Name: series-workflowcjng9 Phase: Succeeded StartedAt: 2026-09-11 03:12:27 +0000 UTC FinishedAt: 2026-09-11 06:58:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[0] Phase: Succeeded StartedAt: 2026-09-11 03:12:27 +0000 UTC FinishedAt: 2026-09-11 03:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 03:12:27 +0000 UTC FinishedAt: 2026-09-11 03:15:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "series_id": "29a2ef90-7be2-4983-bb3b-adcf4ec9353d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZS1yZXRyeSBtZWNoYW5pc20gZm9yIHBlci1WTUEgbG9ja2VkIHBhZ2UgZmF1bHRzIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgKGFybSwgYXJtNjQsIGxvb25nYXJjaCwgcG93ZXJwYywgcmlzY3YsIHMzOTAsIHg4Nikgd2hlbiBoYW5kbGluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIG1tYXBfbG9jay4gVGhlIGFkZGVkIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgKHZtYV9sb2NrX3JldHJpZWQpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gdGhlIHN0YWNrIGluIGVhY2ggYXJjaGl0ZWN0dXJlJiMzOTtzIHBhZ2UgZmF1bHQgaGFuZGxlci4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbHRlciBidWZmZXIgYm91bmRzLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxvY2tpbmcgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGxvY2tpbmcgc2FuaXRpemVycyAoZS5nLiwgTE9DS0RFUCkgb3IgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgY29udHJvbCBmbG93IGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChpbmNsdWRpbmcgYXJjaC94ODYvbW0vZmF1bHQuYyBmb3IgYW1kNjQpIHRvIHJldHJ5IGFjcXVpcmluZyB0aGUgcGVyLVZNQSBsb2NrIHVuZGVyIFJDVSBvbmNlIHVwb24gcmVjZWl2aW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gdGFraW5nIHRoZSBtbWFwIGxvY2suIFRoaXMgYWx0ZXJzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcuIEZvY3VzU3ltYm9scyBpcyBsZWZ0IGVtcHR5IHRvIHByZXZlbnQgZnV6emluZyBkaWx1dGlvbiwgYXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIChkb191c2VyX2FkZHJfZmF1bHQpIGlzIGFuIGFyY2hpdGVjdHVyZSBwYWdlIGZhdWx0IGhhbmRsZXIgZXhlY3V0ZWQgdWJpcXVpdG91c2x5IGJ5IHVzZXJzcGFjZSB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMDAwNjJjNmRkZDc4YTFjZmRjOGYxMWMzNjcwN2I0MzM5ZGYwN2I4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDM6MTM6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmNcbmluZGV4IDBhMDlkNGZmNzcxODUuLjcwNDcyNzQ0ZjVjNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9tbS9mYXVsdC5jXG5AQCAtMzQ0LDYgJiM0MzszNDQsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuIFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0FDQ0VTU19GTEFHUztcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBmc3IpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zOTUsNiAmIzQzOzM5Niw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbiYjNDM7bG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTQyNCw2ICYjNDM7NDI2LDEyIEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRnb3RvIG5vX2NvbnRleHQ7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbiYjNDM7XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuJiM0MztcdFx0Z290byBsb2NrX3ZtYTtcbiYjNDM7XHR9XG4mIzQzO1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbmluZGV4IDc1YzNlNDYzZGYyZWYuLmM3ZmQ2ZjQ4NWIxNjEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuQEAgLTYxNCw2ICYjNDM7NjE0LDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBzaV9jb2RlO1xuIFx0aW50IHBrZXkgPSAtMTtcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBlc3IpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC02ODIsNiAmIzQzOzY4Myw3IEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuIFx0aWYgKCEobW1fZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtNzI4LDYgJiM0Mzs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRcdFx0Z290byBub19jb250ZXh0O1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4mIzQzO1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbiYjNDM7XHRcdGdvdG8gbG9ja192bWE7XG4mIzQzO1x0fVxuJiM0MztcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbmluZGV4IDJjOTNkMzMzNTZlNTcuLmVmNmVhODQ3YjFlMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG5AQCAtMTgxLDYgJiM0MzsxODEsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuJiM0MztcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtXHUwMDNldGhyZWFkLnRyYXBfbnIpKVxuIFx0XHRyZXR1cm47XG5AQCAtMjE5LDYgJiM0MzsyMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMjY1LDYgJiM0MzsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIHdyaXRlLCBhZGRyZXNzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbiYjNDM7XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuJiM0MztcdFx0Z290byBsb2NrX3ZtYTtcbiYjNDM7XHR9XG4mIzQzO1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5pbmRleCA4MDZjNzRlMGQ1YWI3Li4wNjAxOGI2ZDcwODZmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5AQCAtNDIyLDYgJiM0Mzs0MjIsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdGludCBpc193cml0ZSA9IHBhZ2VfZmF1bHRfaXNfd3JpdGUoZXJyb3JfY29kZSk7XG4gXHR2bV9mYXVsdF90IGZhdWx0LCBtYWpvciA9IDA7XG4gXHRib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTtcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmICh1bmxpa2VseShkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKHJlZ3MpIHx8IGtwcm9iZV9mYXVsdCkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4mIzQzO2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC01MTcsNiAmIzQzOzUxOSwxMSBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdGlmIChmYXVsdF9zaWduYWxfcGVuZGluZyhmYXVsdCwgcmVncykpXG4gXHRcdHJldHVybiB1c2VyX21vZGUocmVncykgPyAwIDogU0lHQlVTO1xuIFxuJiM0MztcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuJiM0MztcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIGxvY2tfdm1hO1xuJiM0MztcdH1cbiYjNDM7XG4gbG9ja19tbWFwOlxuIFxuIFx0LyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG5pbmRleCAwNGVkNmY4YWNhZTRmLi5mZjg2MTc5M2RiYTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbkBAIC0yODQsNiAmIzQzOzI4NCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4gXHRpbnQgY29kZSA9IFNFR1ZfTUFQRVJSO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGNhdXNlID0gcmVncy1cdTAwM2VjYXVzZTtcbiBcdGFkZHIgPSByZWdzLVx1MDAzZWJhZGFkZHI7XG5AQCAtMzQ3LDYgJiM0MzszNDgsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMzc2LDYgJiM0MzszNzgsMTIgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuJiM0MztcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIGxvY2tfdm1hO1xuJiM0MztcdH1cbiYjNDM7XG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbkBAIC0yNzEsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHRib29sIGlzX3dyaXRlO1xuJiM0MztcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgcHJvZ3JhbSBjaGVjayBoYXNcbkBAIC0yOTQsNiAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdFx0ZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiYjNDM7bG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTMxOCw2ICYjNDM7MzIwLDEwIEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdFx0XHRoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4mIzQzO1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbiYjNDM7XHRcdGdvdG8gbG9ja192bWE7XG4mIzQzO1x0fVxuIGxvY2tfbW1hcDpcbiByZXRyeTpcbiBcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuY1xuaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2ZhdWx0LmNcbkBAIC0xMjIyLDYgJiM0MzsxMjIyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4mIzQzO1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHR0c2sgPSBjdXJyZW50O1xuIFx0bW0gPSB0c2stXHUwMDNlbW07XG5AQCAtMTMzMSw2ICYjNDM7MTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMTM2MCw2ICYjNDM7MTM2MiwxMiBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdFx0XHRcdFx0XHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuJiM0MztcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIGxvY2tfdm1hO1xuJiM0MztcdH1cbiYjNDM7XG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDAwMDYyYzZkZGQ3OGExY2ZkYzhmMTFjMzY3MDdiNDMzOWRmMDdiOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAzOjEzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggMGEwOWQ0ZmY3NzE4NS4uNzA0NzI3NDRmNWM1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0zNDQsNiAmIzQzOzM0NCw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAl2bV9mYXVsdF90IGZhdWx0OwogCXVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDsKIAl2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fQUNDRVNTX0ZMQUdTOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCWlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBmc3IpKQogCQlyZXR1cm4gMDsKQEAgLTM5NSw2ICYjNDM7Mzk2LDcgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC00MjQsNiAmIzQzOzQyNiwxMiBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCQlnb3RvIG5vX2NvbnRleHQ7CiAJCXJldHVybiAwOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKaW5kZXggNzVjM2U0NjNkZjJlZi4uYzdmZDZmNDg1YjE2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwpAQCAtNjE0LDYgJiM0Mzs2MTQsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgc2lfY29kZTsKIAlpbnQgcGtleSA9IC0xOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCWlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBlc3IpKQogCQlyZXR1cm4gMDsKQEAgLTY4Miw2ICYjNDM7NjgzLDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsCiAJaWYgKCEobW1fZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTcyOCw2ICYjNDM7NzMwLDEyIEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLAogCQkJZ290byBub19jb250ZXh0OwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMKaW5kZXggMmM5M2QzMzM1NmU1Ny4uZWY2ZWE4NDdiMWUwNSAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jCkBAIC0xODEsNiAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDsKIAl2bV9mYXVsdF90IGZhdWx0OwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCWlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBjdXJyZW50LSZndDt0aHJlYWQudHJhcF9ucikpCiAJCXJldHVybjsKQEAgLTIxOSw2ICYjNDM7MjIwLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAlpZiAoIShmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1VTRVIpKQogCQlnb3RvIGxvY2tfbW1hcDsKIAomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtMjY1LDYgJiM0MzsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCW5vX2NvbnRleHQocmVncywgd3JpdGUsIGFkZHJlc3MpOwogCQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiByZXRyeToKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggODA2Yzc0ZTBkNWFiNy4uMDYwMThiNmQ3MDg2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTQyMiw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJaW50IGlzX3dyaXRlID0gcGFnZV9mYXVsdF9pc193cml0ZShlcnJvcl9jb2RlKTsKIAl2bV9mYXVsdF90IGZhdWx0LCBtYWpvciA9IDA7CiAJYm9vbCBrcHJvYmVfZmF1bHQgPSBrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCAxMSk7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKHVubGlrZWx5KGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykgfHwga3Byb2JlX2ZhdWx0KSkKIAkJcmV0dXJuIDA7CkBAIC00ODcsNiAmIzQzOzQ4OCw3IEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC01MTcsNiAmIzQzOzUxOSwxMSBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlpZiAoZmF1bHRfc2lnbmFsX3BlbmRpbmcoZmF1bHQsIHJlZ3MpKQogCQlyZXR1cm4gdXNlcl9tb2RlKHJlZ3MpID8gMCA6IFNJR0JVUzsKIAomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiAJLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKaW5kZXggMDRlZDZmOGFjYWU0Zi4uZmY4NjE3OTNkYmE5NyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuYwpAQCAtMjg0LDYgJiM0MzsyODQsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCXVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDsKIAlpbnQgY29kZSA9IFNFR1ZfTUFQRVJSOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJY2F1c2UgPSByZWdzLSZndDtjYXVzZTsKIAlhZGRyID0gcmVncy0mZ3Q7YmFkYWRkcjsKQEAgLTM0Nyw2ICYjNDM7MzQ4LDcgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAlpZiAoIShmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1VTRVIpKQogCQlnb3RvIGxvY2tfbW1hcDsKIAomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtMzc2LDYgJiM0MzszNzgsMTIgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJCW5vX2NvbnRleHQocmVncywgYWRkcik7CiAJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0NmQ4Mjg5MjYwMDliLi5kY2QxYmEyNDQ5N2Y4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMjcxLDYgJiM0MzsyNzEsNyBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiAJYm9vbCBpc193cml0ZTsKJiM0MzsJYm9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7CiAKIAkvKgogCSAqIFRoZSBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgcHJvZ3JhbSBjaGVjayBoYXMKQEAgLTI5NCw2ICYjNDM7Mjk1LDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKQogCQlmbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtMzE4LDYgJiM0MzszMjAsMTAgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKQogCQkJaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KIGxvY2tfbW1hcDoKIHJldHJ5OgogCXZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IGFhODgzNzBjZTczOTQuLmRmMTBkNWNlYTRlZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMTIyMiw2ICYjNDM7MTIyMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCXRzayA9IGN1cnJlbnQ7CiAJbW0gPSB0c2stJmd0O21tOwpAQCAtMTMzMSw2ICYjNDM7MTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0xMzYwLDYgJiM0MzsxMzYyLDEyIEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCQkJIEFSQ0hfREVGQVVMVF9QS0VZKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBnaXZlbiBteSBiYWNrZ3JvdW5kLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBBTUQ2NCwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIGNvbW1vbiBhbmQgd2VsbC11bmRlcnN0b29kIHBsYXRmb3JtIGZvciBleHBsb2l0YXRpb24gcmVzZWFyY2guIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBhY3R1YWxseSBkZWFsaW5nIHdpdGggaGVyZS4KCkhtbSwgdGhpcyBwYXRjaCBtb2RpZmllcyBwYWdlIGZhdWx0IGhhbmRsZXJzLiBBY3Jvc3MgKm11bHRpcGxlKiBhcmNoaXRlY3R1cmVzLCBubyBsZXNzOiBBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIFBvd2VyUEMsIFJJU0MtViwgUzM5MCwgYW5kLCBjcnVjaWFsbHksIHg4Ni4gVGhpcyBtYWtlcyB0aGluZ3MgbW9yZSBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIHRoZSBrZXJuZWwmIzM5O3MgZmF1bHQgaGFuZGxpbmcgcm91dGluZXMgaXMgZGVmaW5pdGVseSBhIHBvaW50IG9mIGludGVyZXN0LiBGYXVsdCBoYW5kbGVycyBhcmUgYWx3YXlzIGhpZ2gtdmFsdWUgdGFyZ2V0cywgYXMgdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgb2Z0ZW4gdGhlIGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIGBhcmNoL3g4Ni9tbS9mYXVsdC5jYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IHg4NiBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGV4dHJhY3QgYW55IGZvY3VzIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBMaW5lIDEzMzAgaXMgbWVudGlvbmVkLCBzbyBJIHdpbGwgbm93IGZvY3VzIG9uIHRoYXQgc2VjdGlvbi4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9mYXVsdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XHQgKiBUaGUgdnN5c2NhbGwgcGFnZSBkb2VzIG5vdCBoYXZlIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTUEsIHNvIGRvIHRoaXNcbjEzMjE6XHRcdCAqIGVtdWxhdGlvbiBiZWZvcmUgd2UgZ28gc2VhcmNoaW5nIGZvciBWTUFzLlxuMTMyMjpcdFx0ICpcbjEzMjM6XHRcdCAqIFBLUlUgbmV2ZXIgcmVqZWN0cyBpbnN0cnVjdGlvbiBmZXRjaGVzLCBzbyB3ZSBkb24mIzM5O3QgbmVlZFxuMTMyNDpcdFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cbjEzMjU6XHRcdCAqL1xuMTMyNjpcdFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XG4xMzI3Olx0XHRcdGlmIChlbXVsYXRlX3ZzeXNjYWxsX3BmKGVycm9yX2NvZGUsIHJlZ3MsIGFkZHJlc3MpKVxuMTMyODpcdFx0XHRcdHJldHVybjtcbjEzMjk6XHRcdH1cbjEzMzA6XHQjZW5kaWZcbjEzMzE6XHRcbjEzMzI6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuMTMzMzpcdFx0XHRnb3RvIGxvY2tfbW1hcDtcbjEzMzQ6XHRcbjEzMzU6XHRsb2NrX3ZtYTpcbjEzMzY6XHRcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4xMzM3Olx0XHRpZiAoIXZtYSlcbjEzMzg6XHRcdFx0Z290byBsb2NrX21tYXA7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAodW5saWtlbHkoYWNjZXNzX2Vycm9yKGVycm9yX2NvZGUsIHZtYSkpKSB7XG4xMzQxOlx0XHRcdGJhZF9hcmVhX2FjY2Vzc19lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBOVUxMLCB2bWEpO1xuMTM0MjpcdFx0XHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcbjEzNDM6XHRcdFx0cmV0dXJuO1xuMTM0NDpcdFx0fVxuMTM0NTpcdFx0ZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyZXNzLCBmbGFncyB8IEZBVUxUX0ZMQUdfVk1BX0xPQ0ssIHJlZ3MpO1xuMTM0NjpcdFx0aWYgKCEoZmF1bHQgXHUwMDI2IChWTV9GQVVMVF9SRVRSWSB8IFZNX0ZBVUxUX0NPTVBMRVRFRCkpKVxuMTM0NzpcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbjEzNDg6XHRcbjEzNDk6XHRcdGlmICghKGZhdWx0IFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcbjEzNTA6XHRcdFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfU1VDQ0VTUyk7XG4xMzUxOlx0XHRcdGdvdG8gZG9uZTtcbjEzNTI6XHRcdH1cbjEzNTM6XHRcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1JFVFJZKTtcbjEzNTQ6XHRcdGlmIChmYXVsdCBcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXG4xMzU1Olx0XHRcdGZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XG4xMzU2Olx0XG4xMzU3Olx0XHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xuMTM1ODpcdFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xuMTM1OTpcdFx0XHRpZiAoIXVzZXJfbW9kZShyZWdzKSlcbjEzNjA6XHRcdFx0XHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcbjEzNjE6XHRcdFx0XHRcdFx0XHQgU0lHQlVTLCBCVVNfQURSRVJSLFxuMTM2MjpcdFx0XHRcdFx0XHRcdCBBUkNIX0RFRkFVTFRfUEtFWSk7XG4xMzYzOlx0XHRcdHJldHVybjtcbjEzNjQ6XHRcdH1cbjEzNjU6XHRcbjEzNjY6XHRcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuMTM2NzpcdFx0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbjEzNjg6XHRcdFx0Z290byBsb2NrX3ZtYTtcbjEzNjk6XHRcdH1cbjEzNzA6XHRcbjEzNzE6XHRsb2NrX21tYXA6XG4xMzcyOlx0XG4xMzczOlx0cmV0cnk6XG4xMzc0Olx0XHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XG4xMzc1Olx0XHRpZiAodW5saWtlbHkoIXZtYSkpIHtcbjEzNzY6XHRcdFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XG4xMzc3Olx0XHRcdHJldHVybjtcbjEzNzg6XHRcdH1cbjEzNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBob3cgdGhlIHBlci1WTUEgbG9jayByZXRyaWVzIGR1cmluZyBwYWdlIGZhdWx0cywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb3JlIGFyY2hpdGVjdHVyZSBmYXVsdCBoYW5kbGVycy4gSXQgbG9va3MgbGlrZSB3aGVuIGBoYW5kbGVfbW1fZmF1bHQoKWAgcmV0dXJucyBgVk1fRkFVTFRfUkVUUllgIHdpdGggYEZBVUxUX0ZMQUdfVk1BX0xPQ0tgLCBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IGdvaW5nIGZvciB0aGUgYG1tYXBfbG9ja2AsIGl0IHJldHJpZXMgYGxvY2tfdm1hYCBvbmNlIGZpcnN0LgoKVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIGl0ICp3b3J0aCogZnV6emluZz8gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgZXNwZWNpYWxseSB3aXRoaW4gY29yZSBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQuICBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBpcyBpbmRlZWQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBvbiB4ODYgZm9yIHVzZXIgYWRkcmVzcyBmYXVsdHMsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gU28gZmFyLCBzbyBnb29kLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzIGFuZCBwcmV2ZW50IGRpbHV0aW9uLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZpY2FsbHkgdGVsbCBtZSB0byAqYXZvaWQqIGxpc3RpbmcgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMmIzM0OyBsaWtlIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGJlY2F1c2UgdGhhdCBkaWx1dGVzIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgY2FyZWZ1bC4gIGBkb191c2VyX2FkZHJfZmF1bHRgIGlzLCB1bmZvcnR1bmF0ZWx5LCBhIHBhZ2UgZmF1bHQgaGFuZGxlciEKCkJ1dCwgd2FpdCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgdGhhdCBtaWdodCBiZSBtb3JlIHNwZWNpZmljPyBJIG5lZWQgdG8gYXZvaWQganVzdCBsaXN0aW5nIGEgZ2VuZXJpYyBmdW5jdGlvbiBsaWtlIGBkb191c2VyX2FkZHJfZmF1bHRgLiBUaGUgZGlmZiBtZW50aW9ucyBzZXZlcmFsIG90aGVyIGFyY2hpdGVjdHVyZXMmIzM5OyBwYWdlIGZhdWx0IGhhbmRsZXJzIGFzIHdlbGw6IGBhcmNoL2FybS9tbS9mYXVsdC5jOiBkb19wYWdlX2ZhdWx0YCwgYGFyY2gvYXJtNjQvbW0vZmF1bHQuYzogZG9fcGFnZV9mYXVsdGAsIGBhcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jOiBfX2RvX3BhZ2VfZmF1bHRgLCBgYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmM6IF9fX2RvX3BhZ2VfZmF1bHRgLCBgYXJjaC9yaXNjdi9tbS9mYXVsdC5jOiBoYW5kbGVfcGFnZV9mYXVsdGAsIGBhcmNoL3MzOTAvbW0vZmF1bHQuYzogZG9fZXhjZXB0aW9uYC4gIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBjcm9zcy1hcmNoaXRlY3R1cmUgY2hhbmdlLCBidXQgaXQmIzM5O3MgKmFsbCogcGFnZSBmYXVsdCBoYW5kbGVycy4gVG8gYmUgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBxdWFsaWZ5IGFzIGEgYmV0dGVyIGZvY3VzIHN5bWJvbCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGdpdCBkaWZmIGFuZCBsb2cgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucy9maWxlcyBtb2RpZmllZCwgYXMgaXQgd291bGQgYmUgYSBzaGFtZSB0byBtaXNzIGEgYmV0dGVyIGNhbmRpZGF0ZSBiZWNhdXNlIG9mIGEgdHlwby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfbG9ja19yZXRyaWVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL21tL2ZhdWx0LmM9MzM5PWRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybS9tbS9mYXVsdC5jLTM0Ni1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9BQ0NFU1NfRkxBR1M7XG5hcmNoL2FybS9tbS9mYXVsdC5jOjM0NzpcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuYXJjaC9hcm0vbW0vZmF1bHQuYy0zNDgtXG4tLVxuYXJjaC9hcm0vbW0vZmF1bHQuYy00MjktXG5hcmNoL2FybS9tbS9mYXVsdC5jOjQzMDpcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuYXJjaC9hcm0vbW0vZmF1bHQuYzo0MzE6XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuYXJjaC9hcm0vbW0vZmF1bHQuYy00MzItXHRcdGdvdG8gbG9ja192bWE7XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTYwNT1zdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjE2LVx0aW50IHBrZXkgPSAtMTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2MTc6XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02MTgtXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTczMy1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo3MzQ6XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo3MzU6XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTczNi1cdFx0Z290byBsb2NrX3ZtYTtcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jPTE3NT1zdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMtMTgzLVx0dm1fZmF1bHRfdCBmYXVsdDtcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM6MTg0Olx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTE4NS1cbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTI3MC1cbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM6MjcxOlx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jOjI3MjpcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTI3My1cdFx0Z290byBsb2NrX3ZtYTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYz00MTQ9c3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNDI0LVx0Ym9vbCBrcHJvYmVfZmF1bHQgPSBrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCAxMSk7XG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0MjU6XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jLTQyNi1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy01MjEtXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo1MjI6XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jOjUyMzpcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy01MjQtXHRcdGdvdG8gbG9ja192bWE7XG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jPTI3OD12b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0yODYtXHR2bV9mYXVsdF90IGZhdWx0O1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjI4NzpcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTI4OC1cbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzgxLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjM4MjpcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjM4MzpcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzg0LVx0XHRnb3RvIGxvY2tfdm1hO1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jPTI2Nj1zdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpXG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtMjczLVx0Ym9vbCBpc193cml0ZTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjI3NDpcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtMjc1LVxuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTMyMi1cdH1cbmFyY2gvczM5MC9tbS9mYXVsdC5jOjMyMzpcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuYXJjaC9zMzkwL21tL2ZhdWx0LmM6MzI0Olx0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTMyNS1cdFx0Z290byBsb2NrX3ZtYTtcbi0tXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMjI0LVx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuYXJjaC94ODYvbW0vZmF1bHQuYzoxMjI1Olx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEyMjYtXG4tLVxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzY1LVxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzY2Olx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG5hcmNoL3g4Ni9tbS9mYXVsdC5jOjEzNjc6XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzY4LVx0XHRnb3RvIGxvY2tfdm1hO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGZvciBHdWFyZGluZyBDb25kaXRpb25zIG9uIFBFUl9WTUFfTE9DSyoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaGVyZS4gQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgUEVSX1ZNQV9MT0NLYCBpc24mIzM5O3QgY29uZGl0aW9uYWwgb24gc29tZSBvdGhlciBzeW1ib2wgSSYjMzk7bSBvdmVybG9va2luZywgb3IgcGVyaGFwcyBwYXJ0IG9mIGEgbGFyZ2VyLCBtb3JlIGNvbXBsZXggY29uZmlndXJhdGlvbiBzY2hlbWUuIEl0JiMzOTtzIGVhc3kgdG8gZ2V0IHR1bm5lbCB2aXNpb24sIHNvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiBgQ09ORklHX1BFUl9WTUFfTE9DS2AuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgYSBnYXRpbmcgY29uZGl0aW9uLiBJdCYjMzk7bGwgZ2l2ZSB1cyBhIGNsZWFyIHllcyBvciBubyBhbnN3ZXIgb24gd2hldGhlciB0aGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgb3IgaWYgdGhpcyBtZWNoYW5pc20gaXMgZGlzYWJsZWQgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEtub3dpbmcgaWYgaXQmIzM5O3MgY29uZmlnLWRlcGVuZGVudCBpcyBrZXkgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQRVJfVk1BX0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMDA9Y29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0Vcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cbm1tL0tjb25maWcuZGVidWc6MzExOmNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcbm1tL0tjb25maWcuZGVidWctMzEyLVx0Ym9vbCBcJiMzNDtTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzXCYjMzQ7XG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xNDc1LSNlbmRpZlxubW0vdm1zdGF0LmM6MTQ3NjojaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS19TVEFUU1xubW0vdm1zdGF0LmMtMTQ3Ny1cdFtJKFZNQV9MT0NLX1NVQ0NFU1MpXVx0XHRcdD0gXCYjMzQ7dm1hX2xvY2tfc3VjY2Vzc1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfUEVSX1ZNQV9MT0NLYC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhcyBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIGFuZCBJIHdhbnQgdG8gdGhvcm91Z2hseSBhc3Nlc3Mgd2hlcmUgaXQmIzM5O3MgY3VycmVudGx5IGRlZmluZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGV2ZXJ5IHNpbmdsZSBgS2NvbmZpZ2AgZmlsZSBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpbmNsdWRlcyB0aGUgY29yZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZ3MsIHRoZSBkZXZpY2UgZHJpdmVyIEtjb25maWdzLCB0aGUgZmlsZXN5c3RlbSBLY29uZmlncywgdGhlIG5ldHdvcmtpbmcgc3RhY2sgS2NvbmZpZ3Mg4oCTIGJhc2ljYWxseSwgZXZlcnl3aGVyZSB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IHRvdWNoIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl04oCZcyAqZW5hYmxlZCosIHdoZXJlIGl04oCZcyAqZGlzYWJsZWQqLCBhbmQgcGVyaGFwcyBldmVuIG1vcmUgaW1wb3J0YW50bHksIHdoZXJlIGl0JiMzOTtzICp1bmRlZmluZWQqIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBhcmVhcyB0aGF0IGFyZSBiZWluZyBsZWZ0IHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIGZlYXR1cmUgaXMgYmVpbmcgdHJlYXRlZCBhY3Jvc3MgdGhlIGJvYXJkIGFuZCBleHBvc2UgYW55IHBvdGVudGlhbCBpbmNvbnNpc3RlbmNpZXMgb3Igc3VycHJpc2luZyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzZSBpcyBwYXJhbW91bnQgZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSX1ZNQV9MT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG5tbS9LY29uZmlnLmRlYnVnLTMxMi1cdGJvb2wgXCYjMzQ7U3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYGxvY2tfdm1hX3VuZGVyX3JjdWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBsb2NrX3ZtYV91bmRlcl9yY3VgLiBUaGlzIGZlZWxzIGxpa2UgYSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIGxvY2tpbmcgaXNzdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpdHNlbGYuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgZWl0aGVyIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGl2ZXMsIG9yIHBvc3NpYmx5IHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSwgaW4gY2FzZSBpdCYjMzk7cyBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgaGVhZGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2tfdm1hX3VuZGVyX3JjdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQyPVRlcm1pbm9sb2d5XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00OS0gIGFzIGEgcmVhZC93cml0ZSBzZW1hcGhvcmUgaW4gcHJhY3RpY2UuIEEgVk1BIHJlYWQgbG9jayBpcyBvYnRhaW5lZCB2aWFcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTA6ICA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCAoYW5kIHVubG9ja2VkIHZpYSA6YzpmdW5jOmAhdm1hX2VuZF9yZWFkYCkgYW5kIGFcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTEtICB3cml0ZSBsb2NrIHZpYSB2bWFfc3RhcnRfd3JpdGUoKSBvciB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUoKVxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NzY9bXVzdCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTgwLSAgeW91JiMzOTtyZSBkb25lIHdpdGggdGhlIFZNQSwgKm9yKlxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo4MToqIFRyeSB0byBvYnRhaW4gYSBWTUEgcmVhZCBsb2NrIHZpYSA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YC4gVGhpcyB0cmllcyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04Mi0gIGFjcXVpcmUgdGhlIGxvY2sgYXRvbWljYWxseSBzbyBtaWdodCBmYWlsLCBpbiB3aGljaCBjYXNlIGZhbGwtYmFjayBsb2dpYyBpc1xuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9MTAxPWluIG9yZGVyIHRvIG9idGFpbiBhIFZNQSAqKndyaXRlKiogbG9jay4gQSBWTUEgKipyZWFkKiogbG9jayBob3dldmVyIGNhbiBiZVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDoxMDI6b2J0YWluZWQgd2l0aG91dCBhbnkgb3RoZXIgbG9jayAoOmM6ZnVuYzpgIWxvY2tfdm1hX3VuZGVyX3JjdWAgd2lsbCBhY3F1aXJlIHRoZW5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtMTAzLXJlbGVhc2UgYW4gUkNVIGxvY2sgdG8gbG9va3VwIHRoZSBWTUEgZm9yIHlvdSkuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03NTU9d3JpdGUgaGFzIHN0YXJ0ZWQsIHRoZW4gd2UgZG8gbm90IG9idGFpbiBhIHJlYWQgbG9jay5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzU2LVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo3NTc6QSBWTUEgKipyZWFkKiogbG9jayBpcyBvYnRhaW5lZCBieSA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCwgd2hpY2ggZmlyc3RcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzU4LWNhbGxzIDpjOmZ1bmM6YCFyY3VfcmVhZF9sb2NrYCB0byBlbnN1cmUgdGhhdCB0aGUgVk1BIGlzIGxvb2tlZCB1cCBpbiBhbiBSQ1Vcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTc2Nz1WTUEgcmVhZCBsb2NrcyBpbmNyZW1lbnQgOmM6bWVtYmVyOmAhdm1hLnZtX3JlZmNudGAgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHRoZWlyXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0Ojc2ODpkdXJhdGlvbiBhbmQgdGhlIGNhbGxlciBvZiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCBtdXN0IGRyb3AgaXQgdmlhXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTc2OS06YzpmdW5jOmAhdm1hX2VuZF9yZWFkYC5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTc5OT1yZWFkIGxvY2sgYWNxdWlzaXRpb24uIE9uY2UgYWNxdWlyZWQsIHRoZSBSQ1UgbG9jayBjYW4gYmUgcmVsZWFzZWQgYXMgaXQgaXMgb25seVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo4MDA6cmVxdWlyZWQgZm9yIGxvb2t1cC4gVGhpcyBpcyBhYnN0cmFjdGVkIGJ5IDpjOmZ1bmM6YCFsb2NrX3ZtYV91bmRlcl9yY3VgIHdoaWNoXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTgwMS1pcyB0aGUgaW50ZXJmYWNlIGEgdXNlciBzaG91bGQgdXNlLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9ODM2PXBlcm1pdHRpbmcgb3RoZXIgcmVhZGVycywgd2hvIGNhbiBhbHNvIG9idGFpbiB0aGlzIGxvY2sgdW5kZXIgUkNVLlxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04MzctXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjgzODpJbXBvcnRhbnRseSwgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04MzktYXJlIGFsc28gUkNVIHNhZmUsIHNvIHRoZSB3aG9sZSByZWFkIGxvY2sgb3BlcmF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gZnVuY3Rpb25cbi0tXG5hcmNoL2FybS9tbS9mYXVsdC5jPTMzOT1kb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm0vbW0vZmF1bHQuYy0zOTktbG9ja192bWE6XG5hcmNoL2FybS9tbS9mYXVsdC5jOjQwMDpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG5hcmNoL2FybS9tbS9mYXVsdC5jLTQwMS1cdGlmICghdm1hKVxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDU9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTY4Ni1sb2NrX3ZtYTpcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2ODc6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTY4OC1cdGlmICghdm1hKVxuLS1cbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM9MTc1PXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yMjMtbG9ja192bWE6XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jOjIyNDpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTIyNS1cdGlmICghdm1hKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jPTQxND1zdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy00OTEtbG9ja192bWE6XG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0OTI6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNDkzLVx0aWYgKCF2bWEpXG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jPTI3OD12b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zNTEtbG9ja192bWE6XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM6MzUyOlx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zNTMtXHRpZiAoIXZtYSlcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYz0yNjY9c3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTI5OC1sb2NrX3ZtYTpcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjI5OTpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0zMDAtXHRpZiAoIXZtYSlcbi0tXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzM1LWxvY2tfdm1hOlxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzM2Olx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbmFyY2gveDg2L21tL2ZhdWx0LmMtMTMzNy1cdGlmICghdm1hKVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycz02MDk9ICAgIGZuIGRyb3Aoc2VsZjogUGluXHUwMDNjXHUwMDI2bXV0IFNlbGZcdTAwM2UpIHtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMtNzI0LSAgICAgICAgdm1hX2FkZHIgPSBpbm5lci52bWFfYWRkcjtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yczo3MjU6ICAgICAgICB2bWFfcmVhZCA9IG1hdGNoIG1tLmxvY2tfdm1hX3VuZGVyX3JjdSh2bWFfYWRkcikge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTcyNi0gICAgICAgICAgICBTb21lKGd1YXJkKSA9XHUwMDNlIGd1YXJkLFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYz0xMTI3PWVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTExNTAtXHQgKi9cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYzoxMTUxOlx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBwYWdlX2FkZHIpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTExNTItXHRpZiAoIXZtYSkge1xuLS1cbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg9NDgzPXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19kZXRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oLTUwNi1cbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg6NTA3OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaC01MDgtXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MjgzPXN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yODctXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6Mjg4Olx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjg5LVx0aWYgKHZtYSkge1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9ODYzPV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX3ZtYV9uZXcoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdCxcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTkzNi0gKlxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo5Mzc6ICogbG9ja192bWFfdW5kZXJfcmN1KCkgaXMgYSBwb2ludCBsb29rdXAgKG1hc193YWxrKTogaXQgZmluZHMgdGhlIFZNQVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05MzgtICogY29udGFpbmluZyBhIGdpdmVuIGFkZHJlc3MgYnV0IGNhbm5vdCBpdGVyYXRlLiBBbiBSQ1UtcHJvdGVjdGVkXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05NDg9YnBmX2l0ZXJfdGFza192bWFfZmluZF9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuX2RhdGEgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05NjUtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjk2NjpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShkYXRhLVx1MDAzZW1tLCBzdGFydCk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTk2Ny1cdGlmICghdm1hKSB7XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEyLVx0ICogQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwgaW4gdmVyaWZpZXIuYykuIFRha2UgYSByZWZlcmVuY2Vcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMzpcdCAqIG9uIHZtX2ZpbGU7IHZtX21tIGlzIGFscmVhZHkgY29ycmVjdCBiZWNhdXNlIGxvY2tfdm1hX3VuZGVyX3JjdSgpXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTQtXHQgKiB2ZXJpZmllcyB2bWEtXHUwMDNldm1fbW0gPT0gbW0uIEFsbCBvdGhlciBwb2ludGVycyBhcmUgdW50cnVzdGVkIGJ5XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yMjk9c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVxubW0vZGFtb24vdmFkZHIuYzoyMzQ6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHN0YXJ0KTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjM1LVx0aWYgKCF2bWEpXG4tLVxubW0vbWFkdmlzZS5jPTE2NDI9c3RhdGljIGJvb2wgdHJ5X3ZtYV9yZWFkX2xvY2soc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE2NDYtXG5tbS9tYWR2aXNlLmM6MTY0NzpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgbWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZS5zdGFydCk7XG5tbS9tYWR2aXNlLmMtMTY0OC1cdGlmICghdm1hKVxuLS1cbm1tL21tYXBfbG9jay5jPTIwOT1zdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vbW1hcF9sb2NrLmMtMjMzLVx0ICogQWNxdWlyZSBmZW5jZSBpcyByZXF1aXJlZCBoZXJlIHRvIGF2b2lkIHJlb3JkZXJpbmcgYWdhaW5zdCBsYXRlclxubW0vbW1hcF9sb2NrLmM6MjM0Olx0ICogdm1fbG9ja19zZXEgY2hlY2sgYW5kIGNoZWNrcyBpbnNpZGUgbG9ja192bWFfdW5kZXJfcmN1KCkuXG5tbS9tbWFwX2xvY2suYy0yMzUtXHQgKi9cbi0tXG5tbS9tbWFwX2xvY2suYy0yOTItICovXG5tbS9tbWFwX2xvY2suYzoyOTM6c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9tbWFwX2xvY2suYy0yOTQtXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL21tYXBfbG9jay5jPTM1OD1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL21tYXBfbG9jay5jLTM2My1cdC8qIEZhc3QgcGF0aDogcmV0dXJuIHN0YWJsZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTs6ICovXG5tbS9tbWFwX2xvY2suYzozNjQ6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xubW0vbW1hcF9sb2NrLmMtMzY1LVx0aWYgKHZtYSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTEzNz1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp1ZmZkX2xvY2tfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQxLVxubW0vdXNlcmZhdWx0ZmQuYzoxNDI6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xubW0vdXNlcmZhdWx0ZmQuYy0xNDMtXHRpZiAodm1hKSB7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODI2PXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODYwLVx0ICovXG5tbS91c2VyZmF1bHRmZC5jOjE4NjE6XHQqc3JjX3ZtYXAgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHNyY19zdGFydCk7XG5tbS91c2VyZmF1bHRmZC5jLTE4NjItXHRpZiAobGlrZWx5KCpzcmNfdm1hcCkpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjkyPXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfc2V0X21vZGUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDMyMC1cdCAqIGJsb2NrcyBuZXcgbW1hcF9yZWFkX2xvY2soKSBjYWxsZXJzLCBidXQgcGVyLVZNQSBsb2NrZWQgZmF1bHRzXG5tbS91c2VyZmF1bHRmZC5jOjQzMjE6XHQgKiAobG9ja192bWFfdW5kZXJfcmN1KCkgJiM0MzsgRkFVTFRfRkxBR19WTUFfTE9DSykgdGhhdCBhY3F1aXJlZCBiZWZvcmVcbm1tL3VzZXJmYXVsdGZkLmMtNDMyMi1cdCAqIHRoaXMgcG9pbnQga2VlcCBydW5uaW5nLiBDYWxsaW5nIHZtYV9zdGFydF93cml0ZSgpIG9uIGVhY2ggVUZGRC1cbi0tXG5ydXN0L2tlcm5lbC9tbS5ycz0xNjM9ICAgIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcdTAwM2MmIzM5O2FcdTAwM2UocHRyOiAqY29uc3QgYmluZGluZ3M6Om1tX3N0cnVjdCkgLVx1MDAzZSBcdTAwMjYmIzM5O2EgTW1XaXRoVXNlciB7XG4tLVxucnVzdC9rZXJuZWwvbW0ucnMtMTczLSAgICAjW2lubGluZV1cbnJ1c3Qva2VybmVsL21tLnJzOjE3NDogICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdShcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJiMzOTtfXHUwMDNlXHUwMDNlIHtcbnJ1c3Qva2VybmVsL21tLnJzOjE3NTogICAgICAgIC8vIFNBRkVUWTogQ2FsbGluZyBgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdWAgaXMgYWx3YXlzIG9rYXkgZ2l2ZW4gYW4gbW0gd2hlcmVcbnJ1c3Qva2VybmVsL21tLnJzLTE3Ni0gICAgICAgIC8vIGBtbV91c2Vyc2AgaXMgbm9uLXplcm8uXG5ydXN0L2tlcm5lbC9tbS5yczoxNzc6ICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbnJ1c3Qva2VybmVsL21tLnJzLTE3OC0gICAgICAgIGlmIHZtYS5pc19udWxsKCkge1xuLS1cbnJ1c3Qva2VybmVsL21tLnJzLTE4MS0gICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbnJ1c3Qva2VybmVsL21tLnJzOjE4MjogICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbnJ1c3Qva2VybmVsL21tLnJzLTE4My0gICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBtb2RpZmljYXRpb24gaW4gYGRvX3VzZXJfYWRkcl9mYXVsdGAgb24gYW1kNjQgdGhhdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtIGZvciBsb2NraW5nIHRoZSBWTUEgdW5kZXIgUkNVIGlmIGBoYW5kbGVfbW1fZmF1bHRgIHJldHVybnMgYFZNX0ZBVUxUX1JFVFJZYC4gIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7IEFueSBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxvY2tpbmcgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgb3RoZXIgbmFzdHkgY29uY3VycmVuY3kgaXNzdWVzLgoKTm93IGNvbWVzIHRoZSBjcnVjaWFsIHBhcnQ6IGhvdyB0byBndWlkZSB0aGUgZnV6emVyIGVmZmVjdGl2ZWx5LCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgRm9jdXNTeW1ib2xzYC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBBbmQgdGhlbiBpdCBoaXRzIG1lOiBgZG9fdXNlcl9hZGRyX2ZhdWx0YCAqaXMqIGEgcGFnZSBmYXVsdCBoYW5kbGVyISAgSXQmIzM5O3MgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlICYjMzQ7ZG8gbm90IGluY2x1ZGUmIzM0OyBsaXN0LCBhbG9uZyB3aXRoIG90aGVyIGdlbmVyYWwgaGFuZGxlcnMgYW5kIGFsbG9jYXRvcnMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRvX3BhZ2VfZmF1bHRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBvbiBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBtYWtpbmcgdGhlIGNoYW5nZXMgZXZlbiBtb3JlIHBlcnZhc2l2ZS4gQWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFRoYXQgbWFrZXMgdGhpcyBhIGNsYXNzaWMgY2FzZSB3aGVyZSBsaXN0aW5nIGFueSBvZiB0aGVzZSBpbiBgRm9jdXNTeW1ib2xzYCB3aWxsIGNhdXNlIGV4dHJlbWUgZGlsdXRpb24uCgpTaW5jZSBldmVyeSB0ZXN0IHByb2dyYW0gd2lsbCBpbmV2aXRhYmx5IGhpdCB1c2VyIG1lbW9yeSBhbmQgZ2VuZXJhdGUgcGFnZSBmYXVsdHMsIGluY2x1ZGluZyBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZWZmZWN0aXZlbHkgY2xhc3NpZnkgKmV2ZXJ5KiB0ZXN0IGFzICYjMzQ7Zm9jdXNlZCwmIzM0OyByZW5kZXJpbmcgYEZvY3VzU3ltYm9sc2AgdXNlbGVzcy4gIAoKVGhlIGluc3RydWN0aW9ucyBhcmUgYWxzbyBjbGVhcjogSWYgdGhlcmUgYXJlIG5vIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyBtb2RpZmllZCBvciBkaXJlY3RseSBpbnZvbHZlZCwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGBbXWAgdG8gcHJldmVudCBkaWx1dGlvbi4KClNvLCB0aGUgb3B0aW1hbCBmdXp6aW5nIHN0cmF0ZWd5IGhlcmUgaXMgdG8gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbXWAuIFRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGd1aWRlIHRoZSBmdXp6ZXIgd2l0aG91dCBkaWx1dGluZyBpdHMgZWZmb3J0cywgYXMgaXQgZW5zdXJlcyB0aGF0IHRoZSBmdXp6ZXIgZm9jdXNlcyBvbiB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9tbS9mYXVsdC5jYCwgdG8gc2VlIGlmIHRoZSBwZXItdm1hIGxvY2tpbmcgcGF0aCBvciBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBpcyBndWFyZGVkIGJ5IGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGp1c3QgaW4gY2FzZSBhIHNwZWNpZmljIGNvbmZpZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9mYXVsdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0ICogYWxsIHB1cnBvc2VzLCB3ZSBzaG91bGQgdHJlYXQgYSBub3JtYWwga2VybmVsIGFjY2VzcyB0byB1c2VyIG1lbW9yeVxuMTIxMTpcdCAqIChlLmcuIGdldF91c2VyKCksIHB1dF91c2VyKCksIGV0Yy4pIHRoZSBzYW1lIGFzIHRoZSBXUlVTUyBpbnN0cnVjdGlvbi5cbjEyMTI6XHQgKiBUaGUgb25lIGV4Y2VwdGlvbiBpcyBBQyBmbGFnIGhhbmRsaW5nLCB3aGljaCBpcywgcGVyIHRoZSB4ODZcbjEyMTM6XHQgKiBhcmNoaXRlY3R1cmUsIHNwZWNpYWwgZm9yIFdSVVNTLlxuMTIxNDpcdCAqL1xuMTIxNTpcdHN0YXRpYyBpbmxpbmVcbjEyMTY6XHR2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbjEyMTc6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsXG4xMjE4Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuMTIxOTpcdHtcbjEyMjA6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuMTIyMTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0c2s7XG4xMjIyOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbjEyMjM6XHRcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4xMjI0Olx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4xMjI1Olx0XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbjEyMjY6XHRcbjEyMjc6XHRcdHRzayA9IGN1cnJlbnQ7XG4xMjI4Olx0XHRtbSA9IHRzay1cdTAwM2VtbTtcbjEyMjk6XHRcbjEyMzA6XHRcdGlmICh1bmxpa2VseSgoZXJyb3JfY29kZSBcdTAwMjYgKFg4Nl9QRl9VU0VSIHwgWDg2X1BGX0lOU1RSKSkgPT0gWDg2X1BGX0lOU1RSKSkge1xuMTIzMTpcdFx0XHQvKlxuMTIzMjpcdFx0XHQgKiBXaG9vcHMsIHRoaXMgaXMga2VybmVsIG1vZGUgY29kZSB0cnlpbmcgdG8gZXhlY3V0ZSBmcm9tXG4xMjMzOlx0XHRcdCAqIHVzZXIgbWVtb3J5LiAgVW5sZXNzIHRoaXMgaXMgQU1EIGVycmF0dW0gIzkzLCB3aGljaFxuMTIzNDpcdFx0XHQgKiBjb3JydXB0cyBSSVAgc3VjaCB0aGF0IGl0IGxvb2tzIGxpa2UgYSB1c2VyIGFkZHJlc3MsXG4xMjM1Olx0XHRcdCAqIHRoaXMgaXMgdW5yZWNvdmVyYWJsZS4gIERvbiYjMzk7dCBldmVuIHRyeSB0byBsb29rIHVwIHRoZVxuMTIzNjpcdFx0XHQgKiBWTUEgb3IgbG9vayBmb3IgZXh0YWJsZSBlbnRyaWVzLlxuMTIzNzpcdFx0XHQgKi9cbjEyMzg6XHRcdFx0aWYgKGlzX2VycmF0YTkzKHJlZ3MsIGFkZHJlc3MpKVxuMTIzOTpcdFx0XHRcdHJldHVybjtcbjEyNDA6XHRcbjEyNDE6XHRcdFx0cGFnZV9mYXVsdF9vb3BzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpO1xuMTI0MjpcdFx0XHRyZXR1cm47XG4xMjQzOlx0XHR9XG4xMjQ0Olx0XG4xMjQ1Olx0XHQvKiBrcHJvYmVzIGRvbiYjMzk7dCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0czogKi9cbjEyNDY6XHRcdGlmIChXQVJOX09OX09OQ0Uoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgWDg2X1RSQVBfUEYpKSlcbjEyNDc6XHRcdFx0cmV0dXJuO1xuMTI0ODpcdFxuMTI0OTpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgbGl0dGxlIGludmVzdGlnYXRpb246CgoqKkludmVzdGlnYXRpbmcgYGxvY2tfdm1hX3VuZGVyX3JjdWAgaW4gYG1tL21tYXBfbG9jay5jYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGxvY2tfdm1hX3VuZGVyX3JjdWAgd2l0aGluIGBtbS9tbWFwX2xvY2suY2AuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGF0IGZ1bmN0aW9uIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBhdHRhY2hlZCB0byBpdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBgI2lmZGVmIENPTkZJR18uLi5gIG1hY3JvcyBzdXJyb3VuZGluZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBpdHMgdXNhZ2UuIFRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdvdWxkIGltbWVkaWF0ZWx5IHRlbGwgbWUgaWYgaXRzIGJlaGF2aW9yIG9yIGV2ZW4gaXRzIHZlcnkgZXhpc3RlbmNlIGlzIHRpZWQgdG8gc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBhIHF1aWNrIHNjYW4gZm9yIHRob3NlIGRpcmVjdGl2ZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcG9ydGFiaWxpdHkgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBsb2NrIGJlaGF2aW9yIGlzIHVuaXZlcnNhbCBvciBpZiBpdCYjMzk7cyBzcGVjaWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbWFwX2xvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0ICogc3RhYmxlIGFuZCBub3QgaXNvbGF0ZWQuIElmIHRoZSBWTUEgaXMgbm90IGZvdW5kIG9yIGlzIGJlaW5nIG1vZGlmaWVkIHRoZVxuIDI5MTpcdCAqIGZ1bmN0aW9uIHJldHVybnMgTlVMTC5cbiAyOTI6XHQgKi9cbiAyOTM6XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiAyOTQ6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4gMjk1Olx0e1xuIDI5NjpcdFx0TUFfU1RBVEUobWFzLCBcdTAwMjZtbS1cdTAwM2VtbV9tdCwgYWRkcmVzcywgYWRkcmVzcyk7XG4gMjk3Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAyOTg6XHRcbiAyOTk6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTU1VKSlcbiAzMDA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzAxOlx0cmV0cnk6XG4gMzAyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzAzOlx0XHR2bWEgPSBtYXNfd2FsayhcdTAwMjZtYXMpO1xuIDMwNDpcdFx0aWYgKCF2bWEpIHtcbiAzMDU6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzA2Olx0XHRcdGdvdG8gaW52YWw7XG4gMzA3Olx0XHR9XG4gMzA4Olx0XG4gMzA5Olx0XHR2bWEgPSB2bWFfc3RhcnRfcmVhZChtbSwgdm1hKTtcbiAzMTA6XHRcdGlmIChJU19FUlJfT1JfTlVMTCh2bWEpKSB7XG4gMzExOlx0XHRcdC8qIENoZWNrIGlmIHRoZSBWTUEgZ290IGlzb2xhdGVkIGFmdGVyIHdlIGZvdW5kIGl0ICovXG4gMzEyOlx0XHRcdGlmIChQVFJfRVJSKHZtYSkgPT0gLUVBR0FJTikge1xuIDMxMzpcdFx0XHRcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX01JU1MpO1xuIDMxNDpcdFx0XHRcdC8qIFRoZSBhcmVhIHdhcyByZXBsYWNlZCB3aXRoIGFub3RoZXIgb25lICovXG4gMzE1Olx0XHRcdFx0bWFzX3NldChcdTAwMjZtYXMsIGFkZHJlc3MpO1xuIDMxNjpcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMzE3Olx0XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdFx0LyogRmFpbGVkIHRvIGxvY2sgdGhlIFZNQSAqL1xuIDMyMDpcdFx0XHRnb3RvIGludmFsO1xuIDMyMTpcdFx0fVxuIDMyMjpcdFx0LypcbiAzMjM6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBzdGFibGUgcmVmZXJlbmNlIHRvIGEgVk1BOiBUaGUgVk1BIGlzXG4gMzI0Olx0XHQgKiBsb2NrZWQgYW5kIHdlIGtub3cgaXQgaGFzbiYjMzk7dCBhbHJlYWR5IGJlZW4gaXNvbGF0ZWQuXG4gMzI1Olx0XHQgKiBGcm9tIGhlcmUgb24sIHdlIGNhbiBhY2Nlc3MgdGhlIFZNQSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHdoaWNoXG4gMzI2Olx0XHQgKiBmaWVsZHMgYXJlIGFjY2Vzc2libGUgZm9yIFJDVSByZWFkZXJzLlxuIDMyNzpcdFx0ICovXG4gMzI4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTIKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZ1enppbmcgUG90ZW50aWFsIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBgQ09ORklHX01NVWAgaXMgYSBnaXZlbiBvbiB4ODYvYW1kNjQ7IHRoYXQmIzM5O3Mgc3RhbmRhcmQuIE5vIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGp1bXBpbmcgb3V0LiBJIGRpZCBhIHF1aWNrIGNoZWNrLCBhbmQgYFBFUl9WTUFfTE9DS19TVEFUU2AgaXMganVzdCBkZWJ1ZyBmbHVmZiwgc28gd2UgY2FuIGlnbm9yZSB0aGF0LiBJIGRvbiYjMzk7dCBzZWUgYW55IGRlcGVuZGVuY3kgb24gYFBFUl9WTUFfTE9DS2AuIFNpbmNlIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHdpdGggYW4gTU1VIGhhdmUgdGhpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGBFbmFibGVDb25maWdzYCByZW1haW5zIGFuIGVtcHR5IGFycmF5IChgW11gKS4KCk5vdywgdGhlIGNydWNpYWwgYml0OiBgV29ydGhGdXp6aW5nYC4gVGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb2RlIGluIGBtbS9mYXVsdC5jYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgeDg2LXNwZWNpZmljIGB4ODYvbW0vZmF1bHQuY2AsIGlzIG1vZGlmaWVkLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgYmVjYXVzZSB0aGUgY2hhbmdlIGFsdGVycyB0aGUgcmV0cnkgbG9naWMgaW4gdGhlIHBlci1WTUEgbG9ja2VkIGZhdWx0cywgcmV0cnlpbmcgYGxvY2tfdm1hYCBvbmNlIHdoZW4gYFZNX0ZBVUxUX1JFVFJZYCBpcyByZXR1cm5lZC4gQ3J1Y2lhbGx5LCB0aGlzIGFmZmVjdHMgZXhlY3V0YWJsZSBjb2RlLCBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvbiBhbWQ2NC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0LCBgRm9jdXNTeW1ib2xzYC4gVGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBhdm9pZCBkaWx1dGlvbi4gVGhlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSBhbGwgKmFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIGZhdWx0IGhhbmRsZXJzKiBsaWtlIGBkb191c2VyX2FkZHJfZmF1bHRgIGFuZCBgZG9fcGFnZV9mYXVsdGAuIFJlbWVtYmVyIHRoZSBleHBsaWNpdCBpbnN0cnVjdGlvbjogKmF2b2lkKiB0aGUgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiBMaXN0aW5nIGZ1bmN0aW9ucyBsaWtlIHRoZXNlIHdvdWxkIGVzc2VudGlhbGx5IGZsYWcgKmV2ZXJ5KiB0ZXN0IHByb2dyYW0sIGFzIHRoZXNlIGFyZSBmb3VuZGF0aW9uYWwgZnVuY3Rpb25zLiBUaGV5IGFyZSBjYWxsZWQgYnkgdmlydHVhbGx5IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cy4gSW5jbHVkaW5nIGBkb191c2VyX2FkZHJfZmF1bHRgIG9yIGV2ZW4gYGxvY2tfdm1hX3VuZGVyX3JjdWAgd2lsbCBkaWx1dGUgdGhlIGZ1enppbmcuIFRoaXMgd291bGQgYmUgYSBkaXNhc3Rlci4gVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBtdXN0IGJlIGVtcHR5IChgW11gKS4KClRvIHJlY2FwLCBgRW5hYmxlQ29uZmlnc2AgcmVtYWlucyBlbXB0eSBhcyBgQ09ORklHX01NVWAgaXMgc3RhbmRhcmQsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLgoKVGltZSBmb3IgYSBzYW5pdHkgY2hlY2sgb24gdGhlIG91dHB1dCBwYXJhbWV0ZXJzLgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBSZWFzb25pbmdgOiBXZSBoYXZlIGEgY2xlYXIsIGNvbmNpc2UganVzdGlmaWNhdGlvbiBmb3IgdGhlIGZ1enppbmcsIGFuZCB3aHkgd2UgYXJlIGdvaW5nIHRvIGV4Y2x1ZGUgYEZvY3VzU3ltYm9sc2AgYmFzZWQgb24gdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzCiogICBgRm9jdXNTeW1ib2xzYDogW10KKiAgIGBFbmFibGVDb25maWdzYDogW10KCkFscmlnaHQsIGxvb2tzIGdvb2QuIFRpbWUgdG8gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb250cm9sIGZsb3cgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGluY2x1ZGluZyBhcmNoL3g4Ni9tbS9mYXVsdC5jIGZvciBhbWQ2NCkgdG8gcmV0cnkgYWNxdWlyaW5nIHRoZSBwZXItVk1BIGxvY2sgdW5kZXIgUkNVIG9uY2UgdXBvbiByZWNlaXZpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byB0YWtpbmcgdGhlIG1tYXAgbG9jay4gVGhpcyBhbHRlcnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiByZWFjaGFibGUgY29kZSBhbmQgd2FycmFudHMgZnV6emluZy4gRm9jdXNTeW1ib2xzIGlzIGxlZnQgZW1wdHkgdG8gcHJldmVudCBmdXp6aW5nIGRpbHV0aW9uLCBhcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKGRvX3VzZXJfYWRkcl9mYXVsdCkgaXMgYW4gYXJjaGl0ZWN0dXJlIHBhZ2UgZmF1bHQgaGFuZGxlciBleGVjdXRlZCB1YmlxdWl0b3VzbHkgYnkgdXNlcnNwYWNlIHdvcmtsb2Fkcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW5nbGUtcmV0cnkgbWVjaGFuaXNtIGZvciBwZXItVk1BIGxvY2tlZCBwYWdlIGZhdWx0cyBhY3Jvc3MgdmFyaW91cyBhcmNoaXRlY3R1cmVzIChhcm0sIGFybTY0LCBsb29uZ2FyY2gsIHBvd2VycGMsIHJpc2N2LCBzMzkwLCB4ODYpIHdoZW4gaGFuZGxpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byBtbWFwX2xvY2suIFRoZSBhZGRlZCBsb2NhbCBib29sZWFuIHZhcmlhYmxlICh2bWFfbG9ja19yZXRyaWVkKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIHRoZSBzdGFjayBpbiBlYWNoIGFyY2hpdGVjdHVyZSYjMzk7cyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMDAwNjJjNmRkZDc4YTFjZmRjOGYxMWMzNjcwN2I0MzM5ZGYwN2I4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDM6MTM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCAwYTA5ZDRmZjc3MTg1Li43MDQ3Mjc0NGY1YzVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTM0NCw2ICYjNDM7MzQ0LDcgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCXZtX2ZhdWx0X3QgZmF1bHQ7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9BQ0NFU1NfRkxBR1M7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGZzcikpCiAJCXJldHVybiAwOwpAQCAtMzk1LDYgJiM0MzszOTYsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTQyNCw2ICYjNDM7NDI2LDEyIEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJCWdvdG8gbm9fY29udGV4dDsKIAkJcmV0dXJuIDA7CiAJfQomIzQzOwomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiByZXRyeToKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwppbmRleCA3NWMzZTQ2M2RmMmVmLi5jN2ZkNmY0ODViMTYxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jCkBAIC02MTQsNiAmIzQzOzYxNCw3IEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCWludCBzaV9jb2RlOwogCWludCBwa2V5ID0gLTE7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGVzcikpCiAJCXJldHVybiAwOwpAQCAtNjgyLDYgJiM0Mzs2ODMsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwKIAlpZiAoIShtbV9mbGFncyAmYW1wOyBGQVVMVF9GTEFHX1VTRVIpKQogCQlnb3RvIGxvY2tfbW1hcDsKIAomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtNzI4LDYgJiM0Mzs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsCiAJCQlnb3RvIG5vX2NvbnRleHQ7CiAJCXJldHVybiAwOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jIGIvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYwppbmRleCAyYzkzZDMzMzU2ZTU3Li5lZjZlYTg0N2IxZTA1IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMKQEAgLTE4MSw2ICYjNDM7MTgxLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0mZ3Q7bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtJmd0O3RocmVhZC50cmFwX25yKSkKIAkJcmV0dXJuOwpAQCAtMjE5LDYgJiM0MzsyMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0yNjUsNiAmIzQzOzI2NywxMiBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJbm9fY29udGV4dChyZWdzLCB3cml0ZSwgYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCA4MDZjNzRlMGQ1YWI3Li4wNjAxOGI2ZDcwODZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtNDIyLDYgJiM0Mzs0MjIsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlpbnQgaXNfd3JpdGUgPSBwYWdlX2ZhdWx0X2lzX3dyaXRlKGVycm9yX2NvZGUpOwogCXZtX2ZhdWx0X3QgZmF1bHQsIG1ham9yID0gMDsKIAlib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTsKJiM0MzsJYm9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7CiAKIAlpZiAodW5saWtlbHkoZGVidWdnZXJfZmF1bHRfaGFuZGxlcihyZWdzKSB8fCBrcHJvYmVfZmF1bHQpKQogCQlyZXR1cm4gMDsKQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTUxNyw2ICYjNDM7NTE5LDExIEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCWlmIChmYXVsdF9zaWduYWxfcGVuZGluZyhmYXVsdCwgcmVncykpCiAJCXJldHVybiB1c2VyX21vZGUocmVncykgPyAwIDogU0lHQlVTOwogCiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIAkvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vZmF1bHQuYyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuYwppbmRleCAwNGVkNmY4YWNhZTRmLi5mZjg2MTc5M2RiYTk3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jCkBAIC0yODQsNiAmIzQzOzI4NCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUOwogCWludCBjb2RlID0gU0VHVl9NQVBFUlI7CiAJdm1fZmF1bHRfdCBmYXVsdDsKJiM0MzsJYm9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7CiAKIAljYXVzZSA9IHJlZ3MtJmd0O2NhdXNlOwogCWFkZHIgPSByZWdzLSZndDtiYWRhZGRyOwpAQCAtMzQ3LDYgJiM0MzszNDgsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0zNzYsNiAmIzQzOzM3OCwxMiBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQkJbm9fY29udGV4dChyZWdzLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0yNzEsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcykKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdm1fZmF1bHRfdCBmYXVsdDsKIAlib29sIGlzX3dyaXRlOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCS8qCiAJICogVGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZSBwcm9ncmFtIGNoZWNrIGhhcwpAQCAtMjk0LDYgJiM0MzsyOTUsNyBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpCiAJCWZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0zMTgsNiAmIzQzOzMyMCwxMCBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpCiAJCQloYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApOwogCQlyZXR1cm47CiAJfQomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQogbG9ja19tbWFwOgogcmV0cnk6CiAJdm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHJlc3MsIHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC0xMjIyLDYgJiM0MzsxMjIyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdm1fZmF1bHRfdCBmYXVsdDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJdHNrID0gY3VycmVudDsKIAltbSA9IHRzay0mZ3Q7bW07CkBAIC0xMzMxLDYgJiM0MzsxMzMyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTEzNjAsNiAmIzQzOzEzNjIsMTIgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJCQkgQVJDSF9ERUZBVUxUX1BLRVkpOwogCQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiByZXRyeToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBQYWdlIEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGFuZCBicm9hZGx5LCBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyDigJMgYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2IOKAkyB0aGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2NvcGUuIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGNvbW1vbmFsaXR5OyB0aGUgY29yZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgaXQgaGFuZGxlcyBwZXItVk1BIGxvY2tzIGR1cmluZyBhIHBhZ2UgZmF1bHQsIHdpdGggYSByZXRyeSBtZWNoYW5pc20gYmVpbmcgaW50cm9kdWNlZCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBsb2NrX3ZtYV91bmRlcl9yY3VgIGluc2lkZSBvZiBmdW5jdGlvbnMgbGlrZSBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvciBwb3RlbnRpYWxseSBgZG9fcGFnZV9mYXVsdGAuCgpJIHdhbnQgdG8gc2VlIHRoaXMgaW4gYWN0aW9uLiBHaXZlbiB0aGUgdWJpcXVpdHkgb2YgeDg2LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgYXJjaC94ODYvbW0vZmF1bHQuY2AuIFRoZSBjb2RlIGFyb3VuZCBsaW5lIDEzMzAgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3LiBJJiMzOTtsbCByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIGluIHRoYXQgZmlsZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgYGxvY2tfdm1hX3VuZGVyX3JjdWAgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG9ja2luZyB3b3Jrcy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IHRoaXMgY291bGQgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9mYXVsdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XHQgKiBUaGUgdnN5c2NhbGwgcGFnZSBkb2VzIG5vdCBoYXZlIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTUEsIHNvIGRvIHRoaXNcbjEzMjE6XHRcdCAqIGVtdWxhdGlvbiBiZWZvcmUgd2UgZ28gc2VhcmNoaW5nIGZvciBWTUFzLlxuMTMyMjpcdFx0ICpcbjEzMjM6XHRcdCAqIFBLUlUgbmV2ZXIgcmVqZWN0cyBpbnN0cnVjdGlvbiBmZXRjaGVzLCBzbyB3ZSBkb24mIzM5O3QgbmVlZFxuMTMyNDpcdFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cbjEzMjU6XHRcdCAqL1xuMTMyNjpcdFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XG4xMzI3Olx0XHRcdGlmIChlbXVsYXRlX3ZzeXNjYWxsX3BmKGVycm9yX2NvZGUsIHJlZ3MsIGFkZHJlc3MpKVxuMTMyODpcdFx0XHRcdHJldHVybjtcbjEzMjk6XHRcdH1cbjEzMzA6XHQjZW5kaWZcbjEzMzE6XHRcbjEzMzI6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuMTMzMzpcdFx0XHRnb3RvIGxvY2tfbW1hcDtcbjEzMzQ6XHRcbjEzMzU6XHRsb2NrX3ZtYTpcbjEzMzY6XHRcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4xMzM3Olx0XHRpZiAoIXZtYSlcbjEzMzg6XHRcdFx0Z290byBsb2NrX21tYXA7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAodW5saWtlbHkoYWNjZXNzX2Vycm9yKGVycm9yX2NvZGUsIHZtYSkpKSB7XG4xMzQxOlx0XHRcdGJhZF9hcmVhX2FjY2Vzc19lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBOVUxMLCB2bWEpO1xuMTM0MjpcdFx0XHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcbjEzNDM6XHRcdFx0cmV0dXJuO1xuMTM0NDpcdFx0fVxuMTM0NTpcdFx0ZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyZXNzLCBmbGFncyB8IEZBVUxUX0ZMQUdfVk1BX0xPQ0ssIHJlZ3MpO1xuMTM0NjpcdFx0aWYgKCEoZmF1bHQgXHUwMDI2IChWTV9GQVVMVF9SRVRSWSB8IFZNX0ZBVUxUX0NPTVBMRVRFRCkpKVxuMTM0NzpcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbjEzNDg6XHRcbjEzNDk6XHRcdGlmICghKGZhdWx0IFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcbjEzNTA6XHRcdFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfU1VDQ0VTUyk7XG4xMzUxOlx0XHRcdGdvdG8gZG9uZTtcbjEzNTI6XHRcdH1cbjEzNTM6XHRcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1JFVFJZKTtcbjEzNTQ6XHRcdGlmIChmYXVsdCBcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXG4xMzU1Olx0XHRcdGZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XG4xMzU2Olx0XG4xMzU3Olx0XHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xuMTM1ODpcdFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xuMTM1OTpcdFx0XHRpZiAoIXVzZXJfbW9kZShyZWdzKSlcbjEzNjA6XHRcdFx0XHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcbjEzNjE6XHRcdFx0XHRcdFx0XHQgU0lHQlVTLCBCVVNfQURSRVJSLFxuMTM2MjpcdFx0XHRcdFx0XHRcdCBBUkNIX0RFRkFVTFRfUEtFWSk7XG4xMzYzOlx0XHRcdHJldHVybjtcbjEzNjQ6XHRcdH1cbjEzNjU6XHRcbjEzNjY6XHRcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuMTM2NzpcdFx0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbjEzNjg6XHRcdFx0Z290byBsb2NrX3ZtYTtcbjEzNjk6XHRcdH1cbjEzNzA6XHRcbjEzNzE6XHRsb2NrX21tYXA6XG4xMzcyOlx0XG4xMzczOlx0cmV0cnk6XG4xMzc0Olx0XHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XG4xMzc1Olx0XHRpZiAodW5saWtlbHkoIXZtYSkpIHtcbjEzNzY6XHRcdFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XG4xMzc3Olx0XHRcdHJldHVybjtcbjEzNzg6XHRcdH1cbjEzNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5MAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA3NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTmVlZHNLTVNBTiA9IGZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIHJldHJ5IGxvZ2ljIHdoZW4gZGVhbGluZyB3aXRoIHBlci1WTUEgbG9ja3MuIFRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYSBgdm1hX2xvY2tfcmV0cmllZGAgZmxhZyBhbmQgYWx0ZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBzbyB0aGF0IGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgZmFsbGluZyBiYWNrIHRvIGBsb2NrX21tYXBgIGFmdGVyIGEgYFZNX0ZBVUxUX1JFVFJZYCwgaXQgYXR0ZW1wdHMgYGxvY2tfdm1hYCBvbmUgbW9yZSB0aW1lIGlmIHRoZSBmbGFnIGlzbiYjMzk7dCBzZXQuIFRoaXMgY2hhbmdlIGltcGFjdHMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBQb3dlclBDLCBSSVNDLVYsIFMzOTAsIGFuZCB4ODYpLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBLTVNBTiB0ZXN0aW5nLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBLTVNBTiBpcyByZXNlcnZlZCBmb3Igc2NlbmFyaW9zIHdoZXJlIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU28sIGxldCYjMzk7cyBhbmFseXplOgoKRmlyc3QsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gZXZpZGVuY2Ugb2YgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggd291bGQgYmUgYSBiaWcgcmVkIGZsYWcuIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzLCBhbmQgd2UmIzM5O3JlIG5vdCB0b3VjaGluZyBhbnkgc2hhcmVkIGtlcm5lbCBzdHJ1Y3R1cmVzLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5ldyBzdHJ1Y3QgZmllbGRzLCBvciBidWZmZXJzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgYHZtYV9sb2NrX3JldHJpZWRgIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBldmVyeSBhcmNoaXRlY3R1cmUmIzM5O3MgY29kZS4gVGhpcyBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyAqcHVyZWx5KiBjb25jZXJuZWQgd2l0aCBjb250cm9sIGZsb3cgYXJvdW5kIGxvY2tpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByZWZpbmluZyB0aGUgcmV0cnkgbWVjaGFuaXNtLiBUaGUgY29uY2VybnMgaGVyZSBhcmUgdGhpbmdzIGxpa2UgZGVhZGxvY2tzLCBpbmZpbml0ZSBsb29wcywgbG9ja2luZyBpbmNvbnNpc3RlbmNpZXMsIGFuZCByYWNlIGNvbmRpdGlvbnMuIEJ1dCwgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSB0cmFkaXRpb25hbGx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHJ1bnRpbWUgdGVzdGluZywgbm90IEtNU0FOLgoKTG9va2luZyBhdCB0aGUgS01TQU4gcnVsZXM6IFRoZSBrZXkgcG9pbnQgaXMgdGhhdCB3ZSAqc2hvdWxkbiYjMzk7dCogcnVuIEtNU0FOIGlmIGEgYnVnIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgZGV0ZWN0b3JzLiBXZSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0ICphbGwqIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYmVpbmcgcmVhZCBvciBjb3BpZWQuIE5vbmUgb2YgdGhlc2UgcnVsZXMgYXJlIHZpb2xhdGVkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSByaXNrcywgdGhlcmVmb3JlIG5vIGluZm9ybWF0aW9uIGxlYWtzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgY2hhbmdlcyBhY3Jvc3MgYWxsIGFmZmVjdGVkIGFyY2hpdGVjdHVyZXMuIEluIGVhY2ggY2FzZSwgYHZtYV9sb2NrX3JldHJpZWRgIGlzIGEgcHJvcGVybHkgaW5pdGlhbGl6ZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cywgYW5kIHRoZSBwcmltYXJ5IGxvZ2ljIGFkanVzdHMgcGVyLVZNQSBsb2NrIGF0dGVtcHRzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYG1tYXBfbG9ja2AuIFRoaXMgaXMgYWxsIGdvb2QhCgpTbywgaW4gbXkgcHJvZmVzc2lvbmFsIG9waW5pb24sIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhhdCYjMzk7cyB0aGF0LiBOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW5nbGUtcmV0cnkgbWVjaGFuaXNtIGZvciBwZXItVk1BIGxvY2tlZCBwYWdlIGZhdWx0cyBhY3Jvc3MgdmFyaW91cyBhcmNoaXRlY3R1cmVzIChhcm0sIGFybTY0LCBsb29uZ2FyY2gsIHBvd2VycGMsIHJpc2N2LCBzMzkwLCB4ODYpIHdoZW4gaGFuZGxpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byBtbWFwX2xvY2suIFRoZSBhZGRlZCBsb2NhbCBib29sZWFuIHZhcmlhYmxlICh2bWFfbG9ja19yZXRyaWVkKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIHRoZSBzdGFjayBpbiBlYWNoIGFyY2hpdGVjdHVyZSYjMzk7cyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUmIzM5O3MgcGFnZSBmYXVsdCBoYW5kbGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMsIGFsdGVyIGJ1ZmZlciBib3VuZHMsIG9yIHJlYWQgdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgbG9ja2luZyBzYW5pdGl6ZXJzIChlLmcuLCBMT0NLREVQKSBvciBLQVNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxMzo0MC4zODYxMzUyOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA4MzUyNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUncyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgY29udHJvbCBmbG93IGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChpbmNsdWRpbmcgYXJjaC94ODYvbW0vZmF1bHQuYyBmb3IgYW1kNjQpIHRvIHJldHJ5IGFjcXVpcmluZyB0aGUgcGVyLVZNQSBsb2NrIHVuZGVyIFJDVSBvbmNlIHVwb24gcmVjZWl2aW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gdGFraW5nIHRoZSBtbWFwIGxvY2suIFRoaXMgYWx0ZXJzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcuIEZvY3VzU3ltYm9scyBpcyBsZWZ0IGVtcHR5IHRvIHByZXZlbnQgZnV6emluZyBkaWx1dGlvbiwgYXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIChkb191c2VyX2FkZHJfZmF1bHQpIGlzIGFuIGFyY2hpdGVjdHVyZSBwYWdlIGZhdWx0IGhhbmRsZXIgZXhlY3V0ZWQgdWJpcXVpdG91c2x5IGJ5IHVzZXJzcGFjZSB3b3JrbG9hZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjEzOjQwLjM4NjE0MTI3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyODAxMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDAwMDYyYzZkZGQ3OGExY2ZkYzhmMTFjMzY3MDdiNDMzOWRmMDdiOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzoxMzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuY1xcbmluZGV4IDBhMDlkNGZmNzcxODUuLjcwNDcyNzQ0ZjVjNWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuY1xcbisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LmNcXG5AQCAtMzQ0LDYgKzM0NCw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0dm1fZmF1bHRfdCBmYXVsdDtcXG4gXFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xcbiBcXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fQUNDRVNTX0ZMQUdTO1xcbitcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBmc3IpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMzk1LDYgKzM5Niw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTQyNCw2ICs0MjYsMTIgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRcXHRnb3RvIG5vX2NvbnRleHQ7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG4rXFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuK1xcdFxcdGdvdG8gbG9ja192bWE7XFxuK1xcdH1cXG4rXFxuIGxvY2tfbW1hcDpcXG4gXFxuIHJldHJ5OlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcXG5pbmRleCA3NWMzZTQ2M2RmMmVmLi5jN2ZkNmY0ODViMTYxIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xcbkBAIC02MTQsNiArNjE0LDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRpbnQgc2lfY29kZTtcXG4gXFx0aW50IHBrZXkgPSAtMTtcXG4rXFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgZXNyKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTY4Miw2ICs2ODMsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4gXFx0aWYgKCEobW1fZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTcyOCw2ICs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuIFxcdFxcdFxcdGdvdG8gbm9fY29udGV4dDtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4rXFxuK1xcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbitcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG4rXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4rXFx0fVxcbitcXG4gbG9ja19tbWFwOlxcbiBcXG4gcmV0cnk6XFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXFxuaW5kZXggMmM5M2QzMzM1NmU1Ny4uZWY2ZWE4NDdiMWUwNSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuY1xcbkBAIC0xODEsNiArMTgxLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuK1xcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtXFx1MDAzZXRocmVhZC50cmFwX25yKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yMTksNiArMjIwLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTI2NSw2ICsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0XFx0XFx0bm9fY29udGV4dChyZWdzLCB3cml0ZSwgYWRkcmVzcyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuK1xcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIGxvY2tfdm1hO1xcbitcXHR9XFxuK1xcbiBsb2NrX21tYXA6XFxuIFxcbiByZXRyeTpcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xcbmluZGV4IDgwNmM3NGUwZDVhYjcuLjA2MDE4YjZkNzA4NmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xcbkBAIC00MjIsNiArNDIyLDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdGludCBpc193cml0ZSA9IHBhZ2VfZmF1bHRfaXNfd3JpdGUoZXJyb3JfY29kZSk7XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQsIG1ham9yID0gMDtcXG4gXFx0Ym9vbCBrcHJvYmVfZmF1bHQgPSBrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCAxMSk7XFxuK1xcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykgfHwga3Byb2JlX2ZhdWx0KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTQ4Nyw2ICs0ODgsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTUxNyw2ICs1MTksMTEgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdGlmIChmYXVsdF9zaWduYWxfcGVuZGluZyhmYXVsdCwgcmVncykpXFxuIFxcdFxcdHJldHVybiB1c2VyX21vZGUocmVncykgPyAwIDogU0lHQlVTO1xcbiBcXG4rXFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuK1xcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIGxvY2tfdm1hO1xcbitcXHR9XFxuK1xcbiBsb2NrX21tYXA6XFxuIFxcbiBcXHQvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXFxuaW5kZXggMDRlZDZmOGFjYWU0Zi4uZmY4NjE3OTNkYmE5NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG5AQCAtMjg0LDYgKzI4NCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcXG4gXFx0aW50IGNvZGUgPSBTRUdWX01BUEVSUjtcXG4gXFx0dm1fZmF1bHRfdCBmYXVsdDtcXG4rXFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuIFxcbiBcXHRjYXVzZSA9IHJlZ3MtXFx1MDAzZWNhdXNlO1xcbiBcXHRhZGRyID0gcmVncy1cXHUwMDNlYmFkYWRkcjtcXG5AQCAtMzQ3LDYgKzM0OCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuIFxcbitsb2NrX3ZtYTpcXG4gXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcXG4gXFx0aWYgKCF2bWEpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbkBAIC0zNzYsNiArMzc4LDEyIEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuK1xcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIGxvY2tfdm1hO1xcbitcXHR9XFxuK1xcbiBsb2NrX21tYXA6XFxuIFxcbiByZXRyeTpcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xcbmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xcbkBAIC0yNzEsNiArMjcxLDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuIFxcdGJvb2wgaXNfd3JpdGU7XFxuK1xcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZSBwcm9ncmFtIGNoZWNrIGhhc1xcbkBAIC0yOTQsNiArMjk1LDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxcbiBcXHRcXHRmbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbitsb2NrX3ZtYTpcXG4gXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG4gXFx0aWYgKCF2bWEpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbkBAIC0zMTgsNiArMzIwLDEwIEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcXG4gXFx0XFx0XFx0aGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbitcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG4rXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4rXFx0fVxcbiBsb2NrX21tYXA6XFxuIHJldHJ5OlxcbiBcXHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jXFxuaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuY1xcbkBAIC0xMjIyLDYgKzEyMjIsNyBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuIFxcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcXG4rXFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuIFxcbiBcXHR0c2sgPSBjdXJyZW50O1xcbiBcXHRtbSA9IHRzay1cXHUwMDNlbW07XFxuQEAgLTEzMzEsNiArMTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbiBcXG4rbG9ja192bWE6XFxuIFxcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XFxuIFxcdGlmICghdm1hKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG5AQCAtMTM2MCw2ICsxMzYyLDEyIEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4rXFxuK1xcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbitcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG4rXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4rXFx0fVxcbitcXG4gbG9ja19tbWFwOlxcbiBcXG4gcmV0cnk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjEzOjQwLjg3OTcwNjE0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzM2MDkyNDEwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwMDA2MmM2ZGRkNzhhMWNmZGM4ZjExYzM2NzA3YjQzMzlkZjA3YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzoxMzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jXG5pbmRleCAwYTA5ZDRmZjc3MTg1Li43MDQ3Mjc0NGY1YzVhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuY1xuQEAgLTM0NCw2ICszNDQsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuIFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0FDQ0VTU19GTEFHUztcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGZzcikpXG4gXHRcdHJldHVybiAwO1xuQEAgLTM5NSw2ICszOTYsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTQyNCw2ICs0MjYsMTIgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRcdGdvdG8gbm9fY29udGV4dDtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4rXG4rXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbitcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gbG9ja192bWE7XG4rXHR9XG4rXG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuaW5kZXggNzVjM2U0NjNkZjJlZi4uYzdmZDZmNDg1YjE2MSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5AQCAtNjE0LDYgKzYxNCw3IEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgc2lfY29kZTtcbiBcdGludCBwa2V5ID0gLTE7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBlc3IpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC02ODIsNiArNjgzLDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRpZiAoIShtbV9mbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTcyOCw2ICs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRcdFx0Z290byBub19jb250ZXh0O1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbmluZGV4IDJjOTNkMzMzNTZlNTcuLmVmNmVhODQ3YjFlMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG5AQCAtMTgxLDYgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBjdXJyZW50LVx1MDAzZXRocmVhZC50cmFwX25yKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIxOSw2ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC0yNjUsNiArMjY3LDEyIEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0bm9fY29udGV4dChyZWdzLCB3cml0ZSwgYWRkcmVzcyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xuaW5kZXggODA2Yzc0ZTBkNWFiNy4uMDYwMThiNmQ3MDg2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xuQEAgLTQyMiw2ICs0MjIsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdGludCBpc193cml0ZSA9IHBhZ2VfZmF1bHRfaXNfd3JpdGUoZXJyb3JfY29kZSk7XG4gXHR2bV9mYXVsdF90IGZhdWx0LCBtYWpvciA9IDA7XG4gXHRib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKHVubGlrZWx5KGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykgfHwga3Byb2JlX2ZhdWx0KSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNDg3LDYgKzQ4OCw3IEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC01MTcsNiArNTE5LDExIEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSlcbiBcdFx0cmV0dXJuIHVzZXJfbW9kZShyZWdzKSA/IDAgOiBTSUdCVVM7XG4gXG4rXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbitcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gbG9ja192bWE7XG4rXHR9XG4rXG4gbG9ja19tbWFwOlxuIFxuIFx0LyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG5pbmRleCAwNGVkNmY4YWNhZTRmLi5mZjg2MTc5M2RiYTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbkBAIC0yODQsNiArMjg0LDcgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcbiBcdGludCBjb2RlID0gU0VHVl9NQVBFUlI7XG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHRjYXVzZSA9IHJlZ3MtXHUwMDNlY2F1c2U7XG4gXHRhZGRyID0gcmVncy1cdTAwM2ViYWRhZGRyO1xuQEAgLTM0Nyw2ICszNDgsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC0zNzYsNiArMzc4LDEyIEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdFx0bm9fY29udGV4dChyZWdzLCBhZGRyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi5kY2QxYmEyNDQ5N2Y4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtMjcxLDYgKzI3MSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHRib29sIGlzX3dyaXRlO1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZSBwcm9ncmFtIGNoZWNrIGhhc1xuQEAgLTI5NCw2ICsyOTUsNyBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpXG4gXHRcdGZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTMxOCw2ICszMjAsMTAgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxuIFx0XHRcdGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbiBsb2NrX21tYXA6XG4gcmV0cnk6XG4gXHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmNcbmluZGV4IGFhODgzNzBjZTczOTQuLmRmMTBkNWNlYTRlZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jXG5AQCAtMTIyMiw2ICsxMjIyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdHRzayA9IGN1cnJlbnQ7XG4gXHRtbSA9IHRzay1cdTAwM2VtbTtcbkBAIC0xMzMxLDYgKzEzMzIsNyBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMTM2MCw2ICsxMzYyLDEyIEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0XHRcdCBBUkNIX0RFRkFVTFRfUEtFWSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxMzo0MC44Nzk3MDg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0MjE5Njk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBnaXZlbiBteSBiYWNrZ3JvdW5kLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBBTUQ2NCwgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgY29tbW9uIGFuZCB3ZWxsLXVuZGVyc3Rvb2QgcGxhdGZvcm0gZm9yIGV4cGxvaXRhdGlvbiByZXNlYXJjaC4gTm93LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBhY3R1YWxseSBkZWFsaW5nIHdpdGggaGVyZS5cblxuSG1tLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIEFjcm9zcyAqbXVsdGlwbGUqIGFyY2hpdGVjdHVyZXMsIG5vIGxlc3M6IEFSTSwgQVJNNjQsIExvb25nQXJjaCwgUG93ZXJQQywgUklTQy1WLCBTMzkwLCBhbmQsIGNydWNpYWxseSwgeDg2LiBUaGlzIG1ha2VzIHRoaW5ncyBtb3JlIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgdGhlIGtlcm5lbCdzIGZhdWx0IGhhbmRsaW5nIHJvdXRpbmVzIGlzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmVzdC4gRmF1bHQgaGFuZGxlcnMgYXJlIGFsd2F5cyBoaWdoLXZhbHVlIHRhcmdldHMsIGFzIHRoZXkncmUgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgb2Z0ZW4gdGhlIGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gdG91Y2ggYGFyY2gveDg2L21tL2ZhdWx0LmNgLiBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCB4ODYgY29kZS4gSSdsbCBuZWVkIHRvIGV4dHJhY3QgYW55IGZvY3VzIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBMaW5lIDEzMzAgaXMgbWVudGlvbmVkLCBzbyBJIHdpbGwgbm93IGZvY3VzIG9uIHRoYXQgc2VjdGlvbi4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxMzo0NS4zMjE5MDczNjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vZmF1bHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdCAqIFRoZSB2c3lzY2FsbCBwYWdlIGRvZXMgbm90IGhhdmUgYSBcXFwicmVhbFxcXCIgVk1BLCBzbyBkbyB0aGlzXFxuMTMyMTpcXHRcXHQgKiBlbXVsYXRpb24gYmVmb3JlIHdlIGdvIHNlYXJjaGluZyBmb3IgVk1Bcy5cXG4xMzIyOlxcdFxcdCAqXFxuMTMyMzpcXHRcXHQgKiBQS1JVIG5ldmVyIHJlamVjdHMgaW5zdHJ1Y3Rpb24gZmV0Y2hlcywgc28gd2UgZG9uJ3QgbmVlZFxcbjEzMjQ6XFx0XFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cXG4xMzI1OlxcdFxcdCAqL1xcbjEzMjY6XFx0XFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XFxuMTMyNzpcXHRcXHRcXHRpZiAoZW11bGF0ZV92c3lzY2FsbF9wZihlcnJvcl9jb2RlLCByZWdzLCBhZGRyZXNzKSlcXG4xMzI4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMzI5OlxcdFxcdH1cXG4xMzMwOlxcdCNlbmRpZlxcbjEzMzE6XFx0XFxuMTMzMjpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuMTMzMzpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0bG9ja192bWE6XFxuMTMzNjpcXHRcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbjEzMzc6XFx0XFx0aWYgKCF2bWEpXFxuMTMzODpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM5OlxcdFxcbjEzNDA6XFx0XFx0aWYgKHVubGlrZWx5KGFjY2Vzc19lcnJvcihlcnJvcl9jb2RlLCB2bWEpKSkge1xcbjEzNDE6XFx0XFx0XFx0YmFkX2FyZWFfYWNjZXNzX2Vycm9yKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIE5VTEwsIHZtYSk7XFxuMTM0MjpcXHRcXHRcXHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcXG4xMzQzOlxcdFxcdFxcdHJldHVybjtcXG4xMzQ0OlxcdFxcdH1cXG4xMzQ1OlxcdFxcdGZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkcmVzcywgZmxhZ3MgfCBGQVVMVF9GTEFHX1ZNQV9MT0NLLCByZWdzKTtcXG4xMzQ2OlxcdFxcdGlmICghKGZhdWx0IFxcdTAwMjYgKFZNX0ZBVUxUX1JFVFJZIHwgVk1fRkFVTFRfQ09NUExFVEVEKSkpXFxuMTM0NzpcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0aWYgKCEoZmF1bHQgXFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcXG4xMzUwOlxcdFxcdFxcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1NVQ0NFU1MpO1xcbjEzNTE6XFx0XFx0XFx0Z290byBkb25lO1xcbjEzNTI6XFx0XFx0fVxcbjEzNTM6XFx0XFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfUkVUUlkpO1xcbjEzNTQ6XFx0XFx0aWYgKGZhdWx0IFxcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXFxuMTM1NTpcXHRcXHRcXHRmbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVEO1xcbjEzNTY6XFx0XFxuMTM1NzpcXHRcXHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xcbjEzNTg6XFx0XFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xcbjEzNTk6XFx0XFx0XFx0aWYgKCF1c2VyX21vZGUocmVncykpXFxuMTM2MDpcXHRcXHRcXHRcXHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcXG4xMzYxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTSUdCVVMsIEJVU19BRFJFUlIsXFxuMTM2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xcbjEzNjM6XFx0XFx0XFx0cmV0dXJuO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG4xMzY3OlxcdFxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbjEzNjg6XFx0XFx0XFx0Z290byBsb2NrX3ZtYTtcXG4xMzY5OlxcdFxcdH1cXG4xMzcwOlxcdFxcbjEzNzE6XFx0bG9ja19tbWFwOlxcbjEzNzI6XFx0XFxuMTM3MzpcXHRyZXRyeTpcXG4xMzc0OlxcdFxcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcXG4xMzc1OlxcdFxcdGlmICh1bmxpa2VseSghdm1hKSkge1xcbjEzNzY6XFx0XFx0XFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XFxuMTM3NzpcXHRcXHRcXHRyZXR1cm47XFxuMTM3ODpcXHRcXHR9XFxuMTM3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTM6NDUuMzIyMDI1Mjk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MDQ1Njg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgcGVyLVZNQSBsb2NrIHJldHJpZXMgZHVyaW5nIHBhZ2UgZmF1bHRzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvcmUgYXJjaGl0ZWN0dXJlIGZhdWx0IGhhbmRsZXJzLiBJdCBsb29rcyBsaWtlIHdoZW4gYGhhbmRsZV9tbV9mYXVsdCgpYCByZXR1cm5zIGBWTV9GQVVMVF9SRVRSWWAgd2l0aCBgRkFVTFRfRkxBR19WTUFfTE9DS2AsIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgZ29pbmcgZm9yIHRoZSBgbW1hcF9sb2NrYCwgaXQgcmV0cmllcyBgbG9ja192bWFgIG9uY2UgZmlyc3QuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGVzcGVjaWFsbHkgd2l0aGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiAgYGRvX3VzZXJfYWRkcl9mYXVsdGAgaXMgaW5kZWVkIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgb24geDg2IGZvciB1c2VyIGFkZHJlc3MgZmF1bHRzLCBzbyB0aGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvZGUuIFNvIGZhciwgc28gZ29vZC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzIGFuZCBwcmV2ZW50IGRpbHV0aW9uLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZpY2FsbHkgdGVsbCBtZSB0byAqYXZvaWQqIGxpc3RpbmcgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBsaWtlIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGJlY2F1c2UgdGhhdCBkaWx1dGVzIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgY2FyZWZ1bC4gIGBkb191c2VyX2FkZHJfZmF1bHRgIGlzLCB1bmZvcnR1bmF0ZWx5LCBhIHBhZ2UgZmF1bHQgaGFuZGxlciFcblxuQnV0LCB3YWl0LCBhcmUgdGhlcmUgYW55ICpvdGhlciogZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGF0IG1pZ2h0IGJlIG1vcmUgc3BlY2lmaWM/IEkgbmVlZCB0byBhdm9pZCBqdXN0IGxpc3RpbmcgYSBnZW5lcmljIGZ1bmN0aW9uIGxpa2UgYGRvX3VzZXJfYWRkcl9mYXVsdGAuIFRoZSBkaWZmIG1lbnRpb25zIHNldmVyYWwgb3RoZXIgYXJjaGl0ZWN0dXJlcycgcGFnZSBmYXVsdCBoYW5kbGVycyBhcyB3ZWxsOiBgYXJjaC9hcm0vbW0vZmF1bHQuYzogZG9fcGFnZV9mYXVsdGAsIGBhcmNoL2FybTY0L21tL2ZhdWx0LmM6IGRvX3BhZ2VfZmF1bHRgLCBgYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzogX19kb19wYWdlX2ZhdWx0YCwgYGFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jOiBfX19kb19wYWdlX2ZhdWx0YCwgYGFyY2gvcmlzY3YvbW0vZmF1bHQuYzogaGFuZGxlX3BhZ2VfZmF1bHRgLCBgYXJjaC9zMzkwL21tL2ZhdWx0LmM6IGRvX2V4Y2VwdGlvbmAuICBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGl0J3MgYSBjcm9zcy1hcmNoaXRlY3R1cmUgY2hhbmdlLCBidXQgaXQncyAqYWxsKiBwYWdlIGZhdWx0IGhhbmRsZXJzLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgcXVhbGlmeSBhcyBhIGJldHRlciBmb2N1cyBzeW1ib2wsIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGdpdCBkaWZmIGFuZCBsb2cgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucy9maWxlcyBtb2RpZmllZCwgYXMgaXQgd291bGQgYmUgYSBzaGFtZSB0byBtaXNzIGEgYmV0dGVyIGNhbmRpZGF0ZSBiZWNhdXNlIG9mIGEgdHlwby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjEwLjcyNjU5NzkxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA1MTY3NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYV9sb2NrX3JldHJpZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbW0vZmF1bHQuYz0zMzk9ZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC9hcm0vbW0vZmF1bHQuYy0zNDYtXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0FDQ0VTU19GTEFHUztcXG5hcmNoL2FybS9tbS9mYXVsdC5jOjM0NzpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL2FybS9tbS9mYXVsdC5jLTM0OC1cXG4tLVxcbmFyY2gvYXJtL21tL2ZhdWx0LmMtNDI5LVxcbmFyY2gvYXJtL21tL2ZhdWx0LmM6NDMwOlxcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbmFyY2gvYXJtL21tL2ZhdWx0LmM6NDMxOlxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbmFyY2gvYXJtL21tL2ZhdWx0LmMtNDMyLVxcdFxcdGdvdG8gbG9ja192bWE7XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NjA1PXN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYxNi1cXHRpbnQgcGtleSA9IC0xO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2MTc6XFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYxOC1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy03MzMtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjczNDpcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NzM1OlxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy03MzYtXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM9MTc1PXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTE4My1cXHR2bV9mYXVsdF90IGZhdWx0O1xcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM6MTg0OlxcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMtMTg1LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yNzAtXFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzoyNzE6XFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzoyNzI6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yNzMtXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jPTQxND1zdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jLTQyNC1cXHRib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTtcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0MjU6XFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNDI2LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNTIxLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jOjUyMjpcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo1MjM6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNTI0LVxcdFxcdGdvdG8gbG9ja192bWE7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM9Mjc4PXZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMjg2LVxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjI4NzpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMjg4LVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTM4MS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM6MzgyOlxcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzozODM6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTM4NC1cXHRcXHRnb3RvIGxvY2tfdm1hO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9MjY2PXN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTI3My1cXHRib29sIGlzX3dyaXRlO1xcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjI3NDpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0yNzUtXFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0zMjItXFx0fVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjMyMzpcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzozMjQ6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtMzI1LVxcdFxcdGdvdG8gbG9ja192bWE7XFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEyMjQtXFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xcbmFyY2gveDg2L21tL2ZhdWx0LmM6MTIyNTpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEyMjYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEzNjUtXFxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzY2OlxcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbmFyY2gveDg2L21tL2ZhdWx0LmM6MTM2NzpcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEzNjgtXFx0XFx0Z290byBsb2NrX3ZtYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6MTIuNjMxNzc0MTI1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2MjA1MzE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBmb3IgR3VhcmRpbmcgQ29uZGl0aW9ucyBvbiBQRVJfVk1BX0xPQ0sqKlxuXG5SaWdodCwgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGhlcmUuIEJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgd2FudCB0byBjb25maXJtIHRoYXQgYFBFUl9WTUFfTE9DS2AgaXNuJ3QgY29uZGl0aW9uYWwgb24gc29tZSBvdGhlciBzeW1ib2wgSSdtIG92ZXJsb29raW5nLCBvciBwZXJoYXBzIHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIHNjaGVtZS4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBzbyBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgYSBnb29kIGlkZWEuIExldCdzIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiBgQ09ORklHX1BFUl9WTUFfTE9DS2AuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciBhIGdhdGluZyBjb25kaXRpb24uIEl0J2xsIGdpdmUgdXMgYSBjbGVhciB5ZXMgb3Igbm8gYW5zd2VyIG9uIHdoZXRoZXIgdGhpcyBpcyBhIGhhcmQgcmVxdWlyZW1lbnQsIG9yIGlmIHRoaXMgbWVjaGFuaXNtIGlzIGRpc2FibGVkIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBLbm93aW5nIGlmIGl0J3MgY29uZmlnLWRlcGVuZGVudCBpcyBrZXkgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjE2Ljk5MzgzNDAyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMjcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEVSX1ZNQV9MT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMTE6Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbm1tL0tjb25maWcuZGVidWctMzEyLVxcdGJvb2wgXFxcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcXFwiXFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTQ3NS0jZW5kaWZcXG5tbS92bXN0YXQuYzoxNDc2OiNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLX1NUQVRTXFxubW0vdm1zdGF0LmMtMTQ3Ny1cXHRbSShWTUFfTE9DS19TVUNDRVNTKV1cXHRcXHRcXHQ9IFxcXCJ2bWFfbG9ja19zdWNjZXNzXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6MTcuMjQ4ODY3NTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA2MjM0NzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfUEVSX1ZNQV9MT0NLYC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhcyBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIGFuZCBJIHdhbnQgdG8gdGhvcm91Z2hseSBhc3Nlc3Mgd2hlcmUgaXQncyBjdXJyZW50bHkgZGVmaW5lZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZXZlcnkgc2luZ2xlIGBLY29uZmlnYCBmaWxlIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBUaGlzIGluY2x1ZGVzIHRoZSBjb3JlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlncywgdGhlIGRldmljZSBkcml2ZXIgS2NvbmZpZ3MsIHRoZSBmaWxlc3lzdGVtIEtjb25maWdzLCB0aGUgbmV0d29ya2luZyBzdGFjayBLY29uZmlncyDigJMgYmFzaWNhbGx5LCBldmVyeXdoZXJlIHRoYXQgY291bGQgY29uY2VpdmFibHkgdG91Y2ggdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXTigJlzICplbmFibGVkKiwgd2hlcmUgaXTigJlzICpkaXNhYmxlZCosIGFuZCBwZXJoYXBzIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgaXQncyAqdW5kZWZpbmVkKiBiZWNhdXNlIHRob3NlIGFyZSB0aGUgYXJlYXMgdGhhdCBhcmUgYmVpbmcgbGVmdCB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBob3cgdGhpcyBmZWF0dXJlIGlzIGJlaW5nIHRyZWF0ZWQgYWNyb3NzIHRoZSBib2FyZCBhbmQgZXhwb3NlIGFueSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIG9yIHN1cnByaXNpbmcgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2UgaXMgcGFyYW1vdW50IGZvciBhbnkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxNDoyMi4zMTEyMTYxNDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTc5OTc3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUl9WTUFfTE9DS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMTE6Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbm1tL0tjb25maWcuZGVidWctMzEyLVxcdGJvb2wgXFxcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjI0LjEyOTIyMjA3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjQ4NjYyMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBsb2NrX3ZtYV91bmRlcl9yY3VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBsb2NrX3ZtYV91bmRlcl9yY3VgLiBUaGlzIGZlZWxzIGxpa2UgYSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIGxvY2tpbmcgaXNzdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpdHNlbGYuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgZWl0aGVyIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGl2ZXMsIG9yIHBvc3NpYmx5IHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSwgaW4gY2FzZSBpdCdzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBoZWFkZXIuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjI3Ljc3Nzg4ODQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzMDE5NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2tfdm1hX3VuZGVyX3JjdVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQyPVRlcm1pbm9sb2d5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ5LSAgYXMgYSByZWFkL3dyaXRlIHNlbWFwaG9yZSBpbiBwcmFjdGljZS4gQSBWTUEgcmVhZCBsb2NrIGlzIG9idGFpbmVkIHZpYVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTA6ICA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCAoYW5kIHVubG9ja2VkIHZpYSA6YzpmdW5jOmAhdm1hX2VuZF9yZWFkYCkgYW5kIGFcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTUxLSAgd3JpdGUgbG9jayB2aWEgdm1hX3N0YXJ0X3dyaXRlKCkgb3Igdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKClcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NzY9bXVzdCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtODAtICB5b3UncmUgZG9uZSB3aXRoIHRoZSBWTUEsICpvcipcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjgxOiogVHJ5IHRvIG9idGFpbiBhIFZNQSByZWFkIGxvY2sgdmlhIDpjOmZ1bmM6YCFsb2NrX3ZtYV91bmRlcl9yY3VgLiBUaGlzIHRyaWVzIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04Mi0gIGFjcXVpcmUgdGhlIGxvY2sgYXRvbWljYWxseSBzbyBtaWdodCBmYWlsLCBpbiB3aGljaCBjYXNlIGZhbGwtYmFjayBsb2dpYyBpc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD0xMDE9aW4gb3JkZXIgdG8gb2J0YWluIGEgVk1BICoqd3JpdGUqKiBsb2NrLiBBIFZNQSAqKnJlYWQqKiBsb2NrIGhvd2V2ZXIgY2FuIGJlXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDoxMDI6b2J0YWluZWQgd2l0aG91dCBhbnkgb3RoZXIgbG9jayAoOmM6ZnVuYzpgIWxvY2tfdm1hX3VuZGVyX3JjdWAgd2lsbCBhY3F1aXJlIHRoZW5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTEwMy1yZWxlYXNlIGFuIFJDVSBsb2NrIHRvIGxvb2t1cCB0aGUgVk1BIGZvciB5b3UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03NTU9d3JpdGUgaGFzIHN0YXJ0ZWQsIHRoZW4gd2UgZG8gbm90IG9idGFpbiBhIHJlYWQgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTc1Ni1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0Ojc1NzpBIFZNQSAqKnJlYWQqKiBsb2NrIGlzIG9idGFpbmVkIGJ5IDpjOmZ1bmM6YCFsb2NrX3ZtYV91bmRlcl9yY3VgLCB3aGljaCBmaXJzdFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzU4LWNhbGxzIDpjOmZ1bmM6YCFyY3VfcmVhZF9sb2NrYCB0byBlbnN1cmUgdGhhdCB0aGUgVk1BIGlzIGxvb2tlZCB1cCBpbiBhbiBSQ1VcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NzY3PVZNQSByZWFkIGxvY2tzIGluY3JlbWVudCA6YzptZW1iZXI6YCF2bWEudm1fcmVmY250YCByZWZlcmVuY2UgY291bnRlciBmb3IgdGhlaXJcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0Ojc2ODpkdXJhdGlvbiBhbmQgdGhlIGNhbGxlciBvZiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCBtdXN0IGRyb3AgaXQgdmlhXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC03NjktOmM6ZnVuYzpgIXZtYV9lbmRfcmVhZGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTc5OT1yZWFkIGxvY2sgYWNxdWlzaXRpb24uIE9uY2UgYWNxdWlyZWQsIHRoZSBSQ1UgbG9jayBjYW4gYmUgcmVsZWFzZWQgYXMgaXQgaXMgb25seVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6ODAwOnJlcXVpcmVkIGZvciBsb29rdXAuIFRoaXMgaXMgYWJzdHJhY3RlZCBieSA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCB3aGljaFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtODAxLWlzIHRoZSBpbnRlcmZhY2UgYSB1c2VyIHNob3VsZCB1c2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTgzNj1wZXJtaXR0aW5nIG90aGVyIHJlYWRlcnMsIHdobyBjYW4gYWxzbyBvYnRhaW4gdGhpcyBsb2NrIHVuZGVyIFJDVS5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTgzNy1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjgzODpJbXBvcnRhbnRseSwgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtODM5LWFyZSBhbHNvIFJDVSBzYWZlLCBzbyB0aGUgd2hvbGUgcmVhZCBsb2NrIG9wZXJhdGlvbiBpcyBndWFyYW50ZWVkIHRvIGZ1bmN0aW9uXFxuLS1cXG5hcmNoL2FybS9tbS9mYXVsdC5jPTMzOT1kb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybS9tbS9mYXVsdC5jLTM5OS1sb2NrX3ZtYTpcXG5hcmNoL2FybS9tbS9mYXVsdC5jOjQwMDpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbmFyY2gvYXJtL21tL2ZhdWx0LmMtNDAxLVxcdGlmICghdm1hKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTYwNT1zdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02ODYtbG9ja192bWE6XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjY4NzpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02ODgtXFx0aWYgKCF2bWEpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jPTE3NT1zdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yMjMtbG9ja192bWE6XFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzoyMjQ6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTIyNS1cXHRpZiAoIXZtYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jPTQxND1zdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jLTQ5MS1sb2NrX3ZtYTpcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0OTI6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy00OTMtXFx0aWYgKCF2bWEpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM9Mjc4PXZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzUxLWxvY2tfdm1hOlxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzozNTI6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzUzLVxcdGlmICghdm1hKVxcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9MjY2PXN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTI5OC1sb2NrX3ZtYTpcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzoyOTk6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0zMDAtXFx0aWYgKCF2bWEpXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEzMzUtbG9ja192bWE6XFxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzM2OlxcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XFxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzM3LVxcdGlmICghdm1hKVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzPTYwOT0gICAgZm4gZHJvcChzZWxmOiBQaW5cXHUwMDNjXFx1MDAyNm11dCBTZWxmXFx1MDAzZSkge1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTcyNC0gICAgICAgIHZtYV9hZGRyID0gaW5uZXIudm1hX2FkZHI7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzOjcyNTogICAgICAgIHZtYV9yZWFkID0gbWF0Y2ggbW0ubG9ja192bWFfdW5kZXJfcmN1KHZtYV9hZGRyKSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTcyNi0gICAgICAgICAgICBTb21lKGd1YXJkKSA9XFx1MDAzZSBndWFyZCxcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYz0xMTI3PWVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMtMTE1MC1cXHQgKi9cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmM6MTE1MTpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHBhZ2VfYWRkcik7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTExNTItXFx0aWYgKCF2bWEpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg9NDgzPXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19kZXRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtNTA2LVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg6NTA3OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtNTA4LVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0yODM9c3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjg3LVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoyODg6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTI4OS1cXHRpZiAodm1hKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTg2Mz1fX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfdGFza192bWFfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQsXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTkzNi0gKlxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6OTM3OiAqIGxvY2tfdm1hX3VuZGVyX3JjdSgpIGlzIGEgcG9pbnQgbG9va3VwIChtYXNfd2Fsayk6IGl0IGZpbmRzIHRoZSBWTUFcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTkzOC0gKiBjb250YWluaW5nIGEgZ2l2ZW4gYWRkcmVzcyBidXQgY2Fubm90IGl0ZXJhdGUuIEFuIFJDVS1wcm90ZWN0ZWRcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTQ4PWJwZl9pdGVyX3Rhc2tfdm1hX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWFfa2Vybl9kYXRhICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05NjUtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo5NjY6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KGRhdGEtXFx1MDAzZW1tLCBzdGFydCk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05NjctXFx0aWYgKCF2bWEpIHtcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEyLVxcdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDEzOlxcdCAqIG9uIHZtX2ZpbGU7IHZtX21tIGlzIGFscmVhZHkgY29ycmVjdCBiZWNhdXNlIGxvY2tfdm1hX3VuZGVyX3JjdSgpXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDE0LVxcdCAqIHZlcmlmaWVzIHZtYS1cXHUwMDNldm1fbW0gPT0gbW0uIEFsbCBvdGhlciBwb2ludGVycyBhcmUgdW50cnVzdGVkIGJ5XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTIyOT1zdGF0aWMgdm9pZCBkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIzMy1cXG5tbS9kYW1vbi92YWRkci5jOjIzNDpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHN0YXJ0KTtcXG5tbS9kYW1vbi92YWRkci5jLTIzNS1cXHRpZiAoIXZtYSlcXG4tLVxcbm1tL21hZHZpc2UuYz0xNjQyPXN0YXRpYyBib29sIHRyeV92bWFfcmVhZF9sb2NrKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE2NDYtXFxubW0vbWFkdmlzZS5jOjE2NDc6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5zdGFydCk7XFxubW0vbWFkdmlzZS5jLTE2NDgtXFx0aWYgKCF2bWEpXFxuLS1cXG5tbS9tbWFwX2xvY2suYz0yMDk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vbW1hcF9sb2NrLmMtMjMzLVxcdCAqIEFjcXVpcmUgZmVuY2UgaXMgcmVxdWlyZWQgaGVyZSB0byBhdm9pZCByZW9yZGVyaW5nIGFnYWluc3QgbGF0ZXJcXG5tbS9tbWFwX2xvY2suYzoyMzQ6XFx0ICogdm1fbG9ja19zZXEgY2hlY2sgYW5kIGNoZWNrcyBpbnNpZGUgbG9ja192bWFfdW5kZXJfcmN1KCkuXFxubW0vbW1hcF9sb2NrLmMtMjM1LVxcdCAqL1xcbi0tXFxubW0vbW1hcF9sb2NrLmMtMjkyLSAqL1xcbm1tL21tYXBfbG9jay5jOjI5MzpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9tbWFwX2xvY2suYy0yOTQtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS9tbWFwX2xvY2suYz0zNTg9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21tYXBfbG9jay5jLTM2My1cXHQvKiBGYXN0IHBhdGg6IHJldHVybiBzdGFibGUgVk1BIGNvdmVyaW5nICdhZGRyZXNzJzogKi9cXG5tbS9tbWFwX2xvY2suYzozNjQ6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5tbS9tbWFwX2xvY2suYy0zNjUtXFx0aWYgKHZtYSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTM3PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVmZmRfbG9ja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0MS1cXG5tbS91c2VyZmF1bHRmZC5jOjE0MjpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbm1tL3VzZXJmYXVsdGZkLmMtMTQzLVxcdGlmICh2bWEpIHtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTgyNj1zdGF0aWMgaW50IHVmZmRfbW92ZV9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODYwLVxcdCAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTg2MTpcXHQqc3JjX3ZtYXAgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHNyY19zdGFydCk7XFxubW0vdXNlcmZhdWx0ZmQuYy0xODYyLVxcdGlmIChsaWtlbHkoKnNyY192bWFwKSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDI5Mj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX3NldF9tb2RlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDMyMC1cXHQgKiBibG9ja3MgbmV3IG1tYXBfcmVhZF9sb2NrKCkgY2FsbGVycywgYnV0IHBlci1WTUEgbG9ja2VkIGZhdWx0c1xcbm1tL3VzZXJmYXVsdGZkLmM6NDMyMTpcXHQgKiAobG9ja192bWFfdW5kZXJfcmN1KCkgKyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB0aGF0IGFjcXVpcmVkIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmMtNDMyMi1cXHQgKiB0aGlzIHBvaW50IGtlZXAgcnVubmluZy4gQ2FsbGluZyB2bWFfc3RhcnRfd3JpdGUoKSBvbiBlYWNoIFVGRkQtXFxuLS1cXG5ydXN0L2tlcm5lbC9tbS5ycz0xNjM9ICAgIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcXHUwMDNjJ2FcXHUwMDNlKHB0cjogKmNvbnN0IGJpbmRpbmdzOjptbV9zdHJ1Y3QpIC1cXHUwMDNlIFxcdTAwMjYnYSBNbVdpdGhVc2VyIHtcXG4tLVxcbnJ1c3Qva2VybmVsL21tLnJzLTE3My0gICAgI1tpbmxpbmVdXFxucnVzdC9rZXJuZWwvbW0ucnM6MTc0OiAgICBwdWIgZm4gbG9ja192bWFfdW5kZXJfcmN1KFxcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cXHUwMDNlIE9wdGlvblxcdTAwM2NWbWFSZWFkR3VhcmRcXHUwMDNjJ19cXHUwMDNlXFx1MDAzZSB7XFxucnVzdC9rZXJuZWwvbW0ucnM6MTc1OiAgICAgICAgLy8gU0FGRVRZOiBDYWxsaW5nIGBiaW5kaW5nczo6bG9ja192bWFfdW5kZXJfcmN1YCBpcyBhbHdheXMgb2theSBnaXZlbiBhbiBtbSB3aGVyZVxcbnJ1c3Qva2VybmVsL21tLnJzLTE3Ni0gICAgICAgIC8vIGBtbV91c2Vyc2AgaXMgbm9uLXplcm8uXFxucnVzdC9rZXJuZWwvbW0ucnM6MTc3OiAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3Uoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07XFxucnVzdC9rZXJuZWwvbW0ucnMtMTc4LSAgICAgICAgaWYgdm1hLmlzX251bGwoKSB7XFxuLS1cXG5ydXN0L2tlcm5lbC9tbS5ycy0xODEtICAgICAgICBTb21lKFZtYVJlYWRHdWFyZCB7XFxucnVzdC9rZXJuZWwvbW0ucnM6MTgyOiAgICAgICAgICAgIC8vIFNBRkVUWTogSWYgYGxvY2tfdm1hX3VuZGVyX3JjdWAgcmV0dXJucyBhIG5vbi1udWxsIHB0ciwgdGhlbiBpdCBwb2ludHMgYXQgYVxcbnJ1c3Qva2VybmVsL21tLnJzLTE4My0gICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjI5LjQ3MDkxNDE3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY0NDQwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgRmF1bHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvbiBhbWQ2NCB0aGF0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gZm9yIGxvY2tpbmcgdGhlIFZNQSB1bmRlciBSQ1UgaWYgYGhhbmRsZV9tbV9mYXVsdGAgcmV0dXJucyBgVk1fRkFVTFRfUkVUUllgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIgQW55IGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCBvdGhlciBuYXN0eSBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0OiBob3cgdG8gZ3VpZGUgdGhlIGZ1enplciBlZmZlY3RpdmVseSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYEZvY3VzU3ltYm9sc2AuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gQW5kIHRoZW4gaXQgaGl0cyBtZTogYGRvX3VzZXJfYWRkcl9mYXVsdGAgKmlzKiBhIHBhZ2UgZmF1bHQgaGFuZGxlciEgIEl0J3MgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlIFwiZG8gbm90IGluY2x1ZGVcIiBsaXN0LCBhbG9uZyB3aXRoIG90aGVyIGdlbmVyYWwgaGFuZGxlcnMgYW5kIGFsbG9jYXRvcnMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRvX3BhZ2VfZmF1bHRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBvbiBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBtYWtpbmcgdGhlIGNoYW5nZXMgZXZlbiBtb3JlIHBlcnZhc2l2ZS4gQWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFRoYXQgbWFrZXMgdGhpcyBhIGNsYXNzaWMgY2FzZSB3aGVyZSBsaXN0aW5nIGFueSBvZiB0aGVzZSBpbiBgRm9jdXNTeW1ib2xzYCB3aWxsIGNhdXNlIGV4dHJlbWUgZGlsdXRpb24uXG5cblNpbmNlIGV2ZXJ5IHRlc3QgcHJvZ3JhbSB3aWxsIGluZXZpdGFibHkgaGl0IHVzZXIgbWVtb3J5IGFuZCBnZW5lcmF0ZSBwYWdlIGZhdWx0cywgaW5jbHVkaW5nIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBlZmZlY3RpdmVseSBjbGFzc2lmeSAqZXZlcnkqIHRlc3QgYXMgXCJmb2N1c2VkLFwiIHJlbmRlcmluZyBgRm9jdXNTeW1ib2xzYCB1c2VsZXNzLiAgXG5cblRoZSBpbnN0cnVjdGlvbnMgYXJlIGFsc28gY2xlYXI6IElmIHRoZXJlIGFyZSBubyBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgbW9kaWZpZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQsIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBgW11gIHRvIHByZXZlbnQgZGlsdXRpb24uXG5cblNvLCB0aGUgb3B0aW1hbCBmdXp6aW5nIHN0cmF0ZWd5IGhlcmUgaXMgdG8gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbXWAuIFRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGd1aWRlIHRoZSBmdXp6ZXIgd2l0aG91dCBkaWx1dGluZyBpdHMgZWZmb3J0cywgYXMgaXQgZW5zdXJlcyB0aGF0IHRoZSBmdXp6ZXIgZm9jdXNlcyBvbiB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9tbS9mYXVsdC5jYCwgdG8gc2VlIGlmIHRoZSBwZXItdm1hIGxvY2tpbmcgcGF0aCBvciBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBpcyBndWFyZGVkIGJ5IGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGp1c3QgaW4gY2FzZSBhIHNwZWNpZmljIGNvbmZpZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjM4LjUzNTM1ODczOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vZmF1bHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdCAqIGFsbCBwdXJwb3Nlcywgd2Ugc2hvdWxkIHRyZWF0IGEgbm9ybWFsIGtlcm5lbCBhY2Nlc3MgdG8gdXNlciBtZW1vcnlcXG4xMjExOlxcdCAqIChlLmcuIGdldF91c2VyKCksIHB1dF91c2VyKCksIGV0Yy4pIHRoZSBzYW1lIGFzIHRoZSBXUlVTUyBpbnN0cnVjdGlvbi5cXG4xMjEyOlxcdCAqIFRoZSBvbmUgZXhjZXB0aW9uIGlzIEFDIGZsYWcgaGFuZGxpbmcsIHdoaWNoIGlzLCBwZXIgdGhlIHg4NlxcbjEyMTM6XFx0ICogYXJjaGl0ZWN0dXJlLCBzcGVjaWFsIGZvciBXUlVTUy5cXG4xMjE0OlxcdCAqL1xcbjEyMTU6XFx0c3RhdGljIGlubGluZVxcbjEyMTY6XFx0dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuMTIxNzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsXFxuMTIxODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuMTIxOTpcXHR7XFxuMTIyMDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4xMjIxOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbjEyMjI6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuMTIyMzpcXHRcXHR2bV9mYXVsdF90IGZhdWx0O1xcbjEyMjQ6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xcbjEyMjU6XFx0XFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuMTIyNjpcXHRcXG4xMjI3OlxcdFxcdHRzayA9IGN1cnJlbnQ7XFxuMTIyODpcXHRcXHRtbSA9IHRzay1cXHUwMDNlbW07XFxuMTIyOTpcXHRcXG4xMjMwOlxcdFxcdGlmICh1bmxpa2VseSgoZXJyb3JfY29kZSBcXHUwMDI2IChYODZfUEZfVVNFUiB8IFg4Nl9QRl9JTlNUUikpID09IFg4Nl9QRl9JTlNUUikpIHtcXG4xMjMxOlxcdFxcdFxcdC8qXFxuMTIzMjpcXHRcXHRcXHQgKiBXaG9vcHMsIHRoaXMgaXMga2VybmVsIG1vZGUgY29kZSB0cnlpbmcgdG8gZXhlY3V0ZSBmcm9tXFxuMTIzMzpcXHRcXHRcXHQgKiB1c2VyIG1lbW9yeS4gIFVubGVzcyB0aGlzIGlzIEFNRCBlcnJhdHVtICM5Mywgd2hpY2hcXG4xMjM0OlxcdFxcdFxcdCAqIGNvcnJ1cHRzIFJJUCBzdWNoIHRoYXQgaXQgbG9va3MgbGlrZSBhIHVzZXIgYWRkcmVzcyxcXG4xMjM1OlxcdFxcdFxcdCAqIHRoaXMgaXMgdW5yZWNvdmVyYWJsZS4gIERvbid0IGV2ZW4gdHJ5IHRvIGxvb2sgdXAgdGhlXFxuMTIzNjpcXHRcXHRcXHQgKiBWTUEgb3IgbG9vayBmb3IgZXh0YWJsZSBlbnRyaWVzLlxcbjEyMzc6XFx0XFx0XFx0ICovXFxuMTIzODpcXHRcXHRcXHRpZiAoaXNfZXJyYXRhOTMocmVncywgYWRkcmVzcykpXFxuMTIzOTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTI0MDpcXHRcXG4xMjQxOlxcdFxcdFxcdHBhZ2VfZmF1bHRfb29wcyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTtcXG4xMjQyOlxcdFxcdFxcdHJldHVybjtcXG4xMjQzOlxcdFxcdH1cXG4xMjQ0OlxcdFxcbjEyNDU6XFx0XFx0Lyoga3Byb2JlcyBkb24ndCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0czogKi9cXG4xMjQ2OlxcdFxcdGlmIChXQVJOX09OX09OQ0Uoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgWDg2X1RSQVBfUEYpKSlcXG4xMjQ3OlxcdFxcdFxcdHJldHVybjtcXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6MzguNTM1NDY0MjQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0ODMyMjk0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGxpdHRsZSBpbnZlc3RpZ2F0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgYGxvY2tfdm1hX3VuZGVyX3JjdWAgaW4gYG1tL21tYXBfbG9jay5jYCoqXG5cbkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbG9ja192bWFfdW5kZXJfcmN1YCB3aXRoaW4gYG1tL21tYXBfbG9jay5jYC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoYXQgZnVuY3Rpb24gaGFzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGF0dGFjaGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnkgYCNpZmRlZiBDT05GSUdfLi4uYCBtYWNyb3Mgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgaXRzIHVzYWdlLiBUaGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB3b3VsZCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGl0cyBiZWhhdmlvciBvciBldmVuIGl0cyB2ZXJ5IGV4aXN0ZW5jZSBpcyB0aWVkIHRvIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBxdWljayBzY2FuIGZvciB0aG9zZSBkaXJlY3RpdmVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHBvcnRhYmlsaXR5IGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgbG9jayBiZWhhdmlvciBpcyB1bml2ZXJzYWwgb3IgaWYgaXQncyBzcGVjaWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjQ3LjAxODY5NzAwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1hcF9sb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdCAqIHN0YWJsZSBhbmQgbm90IGlzb2xhdGVkLiBJZiB0aGUgVk1BIGlzIG5vdCBmb3VuZCBvciBpcyBiZWluZyBtb2RpZmllZCB0aGVcXG4gMjkxOlxcdCAqIGZ1bmN0aW9uIHJldHVybnMgTlVMTC5cXG4gMjkyOlxcdCAqL1xcbiAyOTM6XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4gMjk1OlxcdHtcXG4gMjk2OlxcdFxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNm1tLVxcdTAwM2VtbV9tdCwgYWRkcmVzcywgYWRkcmVzcyk7XFxuIDI5NzpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NTVUpKVxcbiAzMDA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMwMTpcXHRyZXRyeTpcXG4gMzAyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzAzOlxcdFxcdHZtYSA9IG1hc193YWxrKFxcdTAwMjZtYXMpO1xcbiAzMDQ6XFx0XFx0aWYgKCF2bWEpIHtcXG4gMzA1OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzMDY6XFx0XFx0XFx0Z290byBpbnZhbDtcXG4gMzA3OlxcdFxcdH1cXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0dm1hID0gdm1hX3N0YXJ0X3JlYWQobW0sIHZtYSk7XFxuIDMxMDpcXHRcXHRpZiAoSVNfRVJSX09SX05VTEwodm1hKSkge1xcbiAzMTE6XFx0XFx0XFx0LyogQ2hlY2sgaWYgdGhlIFZNQSBnb3QgaXNvbGF0ZWQgYWZ0ZXIgd2UgZm91bmQgaXQgKi9cXG4gMzEyOlxcdFxcdFxcdGlmIChQVFJfRVJSKHZtYSkgPT0gLUVBR0FJTikge1xcbiAzMTM6XFx0XFx0XFx0XFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfTUlTUyk7XFxuIDMxNDpcXHRcXHRcXHRcXHQvKiBUaGUgYXJlYSB3YXMgcmVwbGFjZWQgd2l0aCBhbm90aGVyIG9uZSAqL1xcbiAzMTU6XFx0XFx0XFx0XFx0bWFzX3NldChcXHUwMDI2bWFzLCBhZGRyZXNzKTtcXG4gMzE2OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDMxNzpcXHRcXHRcXHR9XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdFxcdC8qIEZhaWxlZCB0byBsb2NrIHRoZSBWTUEgKi9cXG4gMzIwOlxcdFxcdFxcdGdvdG8gaW52YWw7XFxuIDMyMTpcXHRcXHR9XFxuIDMyMjpcXHRcXHQvKlxcbiAzMjM6XFx0XFx0ICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHN0YWJsZSByZWZlcmVuY2UgdG8gYSBWTUE6IFRoZSBWTUEgaXNcXG4gMzI0OlxcdFxcdCAqIGxvY2tlZCBhbmQgd2Uga25vdyBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGlzb2xhdGVkLlxcbiAzMjU6XFx0XFx0ICogRnJvbSBoZXJlIG9uLCB3ZSBjYW4gYWNjZXNzIHRoZSBWTUEgd2l0aG91dCB3b3JyeWluZyBhYm91dCB3aGljaFxcbiAzMjY6XFx0XFx0ICogZmllbGRzIGFyZSBhY2Nlc3NpYmxlIGZvciBSQ1UgcmVhZGVycy5cXG4gMzI3OlxcdFxcdCAqL1xcbiAzMjg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6NDcuMDE4ODAyMzg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NzAxMTk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnV6emluZyBQb3RlbnRpYWwgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBgQ09ORklHX01NVWAgaXMgYSBnaXZlbiBvbiB4ODYvYW1kNjQ7IHRoYXQncyBzdGFuZGFyZC4gTm8gb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBhcmUganVtcGluZyBvdXQuIEkgZGlkIGEgcXVpY2sgY2hlY2ssIGFuZCBgUEVSX1ZNQV9MT0NLX1NUQVRTYCBpcyBqdXN0IGRlYnVnIGZsdWZmLCBzbyB3ZSBjYW4gaWdub3JlIHRoYXQuIEkgZG9uJ3Qgc2VlIGFueSBkZXBlbmRlbmN5IG9uIGBQRVJfVk1BX0xPQ0tgLiBTaW5jZSA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aXRoIGFuIE1NVSBoYXZlIHRoaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBgRW5hYmxlQ29uZmlnc2AgcmVtYWlucyBhbiBlbXB0eSBhcnJheSAoYFtdYCkuXG5cbk5vdywgdGhlIGNydWNpYWwgYml0OiBgV29ydGhGdXp6aW5nYC4gVGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb2RlIGluIGBtbS9mYXVsdC5jYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgeDg2LXNwZWNpZmljIGB4ODYvbW0vZmF1bHQuY2AsIGlzIG1vZGlmaWVkLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgYmVjYXVzZSB0aGUgY2hhbmdlIGFsdGVycyB0aGUgcmV0cnkgbG9naWMgaW4gdGhlIHBlci1WTUEgbG9ja2VkIGZhdWx0cywgcmV0cnlpbmcgYGxvY2tfdm1hYCBvbmNlIHdoZW4gYFZNX0ZBVUxUX1JFVFJZYCBpcyByZXR1cm5lZC4gQ3J1Y2lhbGx5LCB0aGlzIGFmZmVjdHMgZXhlY3V0YWJsZSBjb2RlLCBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvbiBhbWQ2NC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQsIGBGb2N1c1N5bWJvbHNgLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIGF2b2lkIGRpbHV0aW9uLiBUaGUgY2hhbmdlZCBmdW5jdGlvbnMgYXJlIGFsbCAqYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgZmF1bHQgaGFuZGxlcnMqIGxpa2UgYGRvX3VzZXJfYWRkcl9mYXVsdGAgYW5kIGBkb19wYWdlX2ZhdWx0YC4gUmVtZW1iZXIgdGhlIGV4cGxpY2l0IGluc3RydWN0aW9uOiAqYXZvaWQqIHRoZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuIExpc3RpbmcgZnVuY3Rpb25zIGxpa2UgdGhlc2Ugd291bGQgZXNzZW50aWFsbHkgZmxhZyAqZXZlcnkqIHRlc3QgcHJvZ3JhbSwgYXMgdGhlc2UgYXJlIGZvdW5kYXRpb25hbCBmdW5jdGlvbnMuIFRoZXkgYXJlIGNhbGxlZCBieSB2aXJ0dWFsbHkgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzLiBJbmNsdWRpbmcgYGRvX3VzZXJfYWRkcl9mYXVsdGAgb3IgZXZlbiBgbG9ja192bWFfdW5kZXJfcmN1YCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZy4gVGhpcyB3b3VsZCBiZSBhIGRpc2FzdGVyLiBUaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIG11c3QgYmUgZW1wdHkgKGBbXWApLlxuXG5UbyByZWNhcCwgYEVuYWJsZUNvbmZpZ3NgIHJlbWFpbnMgZW1wdHkgYXMgYENPTkZJR19NTVVgIGlzIHN0YW5kYXJkLCBzbyB3ZSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLlxuXG5UaW1lIGZvciBhIHNhbml0eSBjaGVjayBvbiB0aGUgb3V0cHV0IHBhcmFtZXRlcnMuXG4qICAgYFdvcnRoRnV6emluZ2A6IHRydWVcbiogICBgUmVhc29uaW5nYDogV2UgaGF2ZSBhIGNsZWFyLCBjb25jaXNlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBmdXp6aW5nLCBhbmQgd2h5IHdlIGFyZSBnb2luZyB0byBleGNsdWRlIGBGb2N1c1N5bWJvbHNgIGJhc2VkIG9uIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1xuKiAgIGBGb2N1c1N5bWJvbHNgOiBbXVxuKiAgIGBFbmFibGVDb25maWdzYDogW11cblxuQWxyaWdodCwgbG9va3MgZ29vZC4gVGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjkyLCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjU0LjQ4ODkyNDI0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb250cm9sIGZsb3cgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGluY2x1ZGluZyBhcmNoL3g4Ni9tbS9mYXVsdC5jIGZvciBhbWQ2NCkgdG8gcmV0cnkgYWNxdWlyaW5nIHRoZSBwZXItVk1BIGxvY2sgdW5kZXIgUkNVIG9uY2UgdXBvbiByZWNlaXZpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byB0YWtpbmcgdGhlIG1tYXAgbG9jay4gVGhpcyBhbHRlcnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiByZWFjaGFibGUgY29kZSBhbmQgd2FycmFudHMgZnV6emluZy4gRm9jdXNTeW1ib2xzIGlzIGxlZnQgZW1wdHkgdG8gcHJldmVudCBmdXp6aW5nIGRpbHV0aW9uLCBhcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKGRvX3VzZXJfYWRkcl9mYXVsdCkgaXMgYW4gYXJjaGl0ZWN0dXJlIHBhZ2UgZmF1bHQgaGFuZGxlciBleGVjdXRlZCB1YmlxdWl0b3VzbHkgYnkgdXNlcnNwYWNlIHdvcmtsb2Fkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6NTQuNDg4OTQ5MzQxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4MDcwMDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjU0LjQ4OTQyNTE4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0OTgwMjIwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUncyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDAwMDYyYzZkZGQ3OGExY2ZkYzhmMTFjMzY3MDdiNDMzOWRmMDdiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAzOjEzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmNcbmluZGV4IDBhMDlkNGZmNzcxODUuLjcwNDcyNzQ0ZjVjNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jXG5AQCAtMzQ0LDYgKzM0NCw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4gXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fQUNDRVNTX0ZMQUdTO1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHRpZiAoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgZnNyKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMzk1LDYgKzM5Niw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtNDI0LDYgKzQyNiwxMiBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdFx0Z290byBub19jb250ZXh0O1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5pbmRleCA3NWMzZTQ2M2RmMmVmLi5jN2ZkNmY0ODViMTYxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbkBAIC02MTQsNiArNjE0LDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBzaV9jb2RlO1xuIFx0aW50IHBrZXkgPSAtMTtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGVzcikpXG4gXHRcdHJldHVybiAwO1xuQEAgLTY4Miw2ICs2ODMsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiBcdGlmICghKG1tX2ZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtNzI4LDYgKzczMCwxMiBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiBcdFx0XHRnb3RvIG5vX2NvbnRleHQ7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jIGIvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuY1xuaW5kZXggMmM5M2QzMzM1NmU1Ny4uZWY2ZWE4NDdiMWUwNSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbkBAIC0xODEsNiArMTgxLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtXHUwMDNldGhyZWFkLnRyYXBfbnIpKVxuIFx0XHRyZXR1cm47XG5AQCAtMjE5LDYgKzIyMCw3IEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTI2NSw2ICsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIHdyaXRlLCBhZGRyZXNzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5pbmRleCA4MDZjNzRlMGQ1YWI3Li4wNjAxOGI2ZDcwODZmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5AQCAtNDIyLDYgKzQyMiw3IEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0aW50IGlzX3dyaXRlID0gcGFnZV9mYXVsdF9pc193cml0ZShlcnJvcl9jb2RlKTtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQsIG1ham9yID0gMDtcbiBcdGJvb2wga3Byb2JlX2ZhdWx0ID0ga3Byb2JlX3BhZ2VfZmF1bHQocmVncywgMTEpO1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHRpZiAodW5saWtlbHkoZGVidWdnZXJfZmF1bHRfaGFuZGxlcihyZWdzKSB8fCBrcHJvYmVfZmF1bHQpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC00ODcsNiArNDg4LDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTUxNyw2ICs1MTksMTEgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRpZiAoZmF1bHRfc2lnbmFsX3BlbmRpbmcoZmF1bHQsIHJlZ3MpKVxuIFx0XHRyZXR1cm4gdXNlcl9tb2RlKHJlZ3MpID8gMCA6IFNJR0JVUztcbiBcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gXHQvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbmluZGV4IDA0ZWQ2ZjhhY2FlNGYuLmZmODYxNzkzZGJhOTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xuQEAgLTI4NCw2ICsyODQsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuIFx0aW50IGNvZGUgPSBTRUdWX01BUEVSUjtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGNhdXNlID0gcmVncy1cdTAwM2VjYXVzZTtcbiBcdGFkZHIgPSByZWdzLVx1MDAzZWJhZGFkZHI7XG5AQCAtMzQ3LDYgKzM0OCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTM3Niw2ICszNzgsMTIgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4rXG4rXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbitcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gbG9ja192bWE7XG4rXHR9XG4rXG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbkBAIC0yNzEsNiArMjcxLDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxuIFx0dW5zaWduZWQgaW50IGZsYWdzO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbiBcdGJvb2wgaXNfd3JpdGU7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlIHByb2dyYW0gY2hlY2sgaGFzXG5AQCAtMjk0LDYgKzI5NSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdFx0ZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMzE4LDYgKzMyMCwxMCBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpXG4gXHRcdFx0aGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuIGxvY2tfbW1hcDpcbiByZXRyeTpcbiBcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuY1xuaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmNcbisrKyBiL2FyY2gveDg2L21tL2ZhdWx0LmNcbkBAIC0xMjIyLDYgKzEyMjIsNyBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbiBcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0dHNrID0gY3VycmVudDtcbiBcdG1tID0gdHNrLVx1MDAzZW1tO1xuQEAgLTEzMzEsNiArMTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC0xMzYwLDYgKzEzNjIsMTIgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHRcdFx0IEFSQ0hfREVGQVVMVF9QS0VZKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjU0LjQ4OTQyNTk3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ4MDMzMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gUGFnZSBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBhbmQgYnJvYWRseSwgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMg4oCTIGFybSwgYXJtNjQsIGxvb25nYXJjaCwgcG93ZXJwYywgcmlzY3YsIHMzOTAsIHg4NiDigJMgdGhhdCdzIGEgc2lnbmlmaWNhbnQgc2NvcGUuIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGNvbW1vbmFsaXR5OyB0aGUgY29yZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgaXQgaGFuZGxlcyBwZXItVk1BIGxvY2tzIGR1cmluZyBhIHBhZ2UgZmF1bHQsIHdpdGggYSByZXRyeSBtZWNoYW5pc20gYmVpbmcgaW50cm9kdWNlZCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBsb2NrX3ZtYV91bmRlcl9yY3VgIGluc2lkZSBvZiBmdW5jdGlvbnMgbGlrZSBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvciBwb3RlbnRpYWxseSBgZG9fcGFnZV9mYXVsdGAuXG5cbkkgd2FudCB0byBzZWUgdGhpcyBpbiBhY3Rpb24uIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiB4ODYsIEknbGwgZ28gc3RyYWlnaHQgdG8gYGFyY2gveDg2L21tL2ZhdWx0LmNgLiBUaGUgY29kZSBhcm91bmQgbGluZSAxMzMwIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldy4gSSdsbCByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIGluIHRoYXQgZmlsZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgYGxvY2tfdm1hX3VuZGVyX3JjdWAgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG9ja2luZyB3b3Jrcy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IHRoaXMgY291bGQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE1OjAwLjMzNzQ2MjAyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vZmF1bHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdCAqIFRoZSB2c3lzY2FsbCBwYWdlIGRvZXMgbm90IGhhdmUgYSBcXFwicmVhbFxcXCIgVk1BLCBzbyBkbyB0aGlzXFxuMTMyMTpcXHRcXHQgKiBlbXVsYXRpb24gYmVmb3JlIHdlIGdvIHNlYXJjaGluZyBmb3IgVk1Bcy5cXG4xMzIyOlxcdFxcdCAqXFxuMTMyMzpcXHRcXHQgKiBQS1JVIG5ldmVyIHJlamVjdHMgaW5zdHJ1Y3Rpb24gZmV0Y2hlcywgc28gd2UgZG9uJ3QgbmVlZFxcbjEzMjQ6XFx0XFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cXG4xMzI1OlxcdFxcdCAqL1xcbjEzMjY6XFx0XFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XFxuMTMyNzpcXHRcXHRcXHRpZiAoZW11bGF0ZV92c3lzY2FsbF9wZihlcnJvcl9jb2RlLCByZWdzLCBhZGRyZXNzKSlcXG4xMzI4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMzI5OlxcdFxcdH1cXG4xMzMwOlxcdCNlbmRpZlxcbjEzMzE6XFx0XFxuMTMzMjpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuMTMzMzpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0bG9ja192bWE6XFxuMTMzNjpcXHRcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbjEzMzc6XFx0XFx0aWYgKCF2bWEpXFxuMTMzODpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM5OlxcdFxcbjEzNDA6XFx0XFx0aWYgKHVubGlrZWx5KGFjY2Vzc19lcnJvcihlcnJvcl9jb2RlLCB2bWEpKSkge1xcbjEzNDE6XFx0XFx0XFx0YmFkX2FyZWFfYWNjZXNzX2Vycm9yKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIE5VTEwsIHZtYSk7XFxuMTM0MjpcXHRcXHRcXHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcXG4xMzQzOlxcdFxcdFxcdHJldHVybjtcXG4xMzQ0OlxcdFxcdH1cXG4xMzQ1OlxcdFxcdGZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkcmVzcywgZmxhZ3MgfCBGQVVMVF9GTEFHX1ZNQV9MT0NLLCByZWdzKTtcXG4xMzQ2OlxcdFxcdGlmICghKGZhdWx0IFxcdTAwMjYgKFZNX0ZBVUxUX1JFVFJZIHwgVk1fRkFVTFRfQ09NUExFVEVEKSkpXFxuMTM0NzpcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0aWYgKCEoZmF1bHQgXFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcXG4xMzUwOlxcdFxcdFxcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1NVQ0NFU1MpO1xcbjEzNTE6XFx0XFx0XFx0Z290byBkb25lO1xcbjEzNTI6XFx0XFx0fVxcbjEzNTM6XFx0XFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfUkVUUlkpO1xcbjEzNTQ6XFx0XFx0aWYgKGZhdWx0IFxcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXFxuMTM1NTpcXHRcXHRcXHRmbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVEO1xcbjEzNTY6XFx0XFxuMTM1NzpcXHRcXHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xcbjEzNTg6XFx0XFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xcbjEzNTk6XFx0XFx0XFx0aWYgKCF1c2VyX21vZGUocmVncykpXFxuMTM2MDpcXHRcXHRcXHRcXHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcXG4xMzYxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTSUdCVVMsIEJVU19BRFJFUlIsXFxuMTM2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xcbjEzNjM6XFx0XFx0XFx0cmV0dXJuO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG4xMzY3OlxcdFxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbjEzNjg6XFx0XFx0XFx0Z290byBsb2NrX3ZtYTtcXG4xMzY5OlxcdFxcdH1cXG4xMzcwOlxcdFxcbjEzNzE6XFx0bG9ja19tbWFwOlxcbjEzNzI6XFx0XFxuMTM3MzpcXHRyZXRyeTpcXG4xMzc0OlxcdFxcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcXG4xMzc1OlxcdFxcdGlmICh1bmxpa2VseSghdm1hKSkge1xcbjEzNzY6XFx0XFx0XFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XFxuMTM3NzpcXHRcXHRcXHRyZXR1cm47XFxuMTM3ODpcXHRcXHR9XFxuMTM3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTU6MDAuMzM3NjAzMThaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTEzMjAyMDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB0aGUgcmV0cnkgbG9naWMgd2hlbiBkZWFsaW5nIHdpdGggcGVyLVZNQSBsb2Nrcy4gVGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBhIGB2bWFfbG9ja19yZXRyaWVkYCBmbGFnIGFuZCBhbHRlcmluZyB0aGUgY29udHJvbCBmbG93IHNvIHRoYXQgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBmYWxsaW5nIGJhY2sgdG8gYGxvY2tfbW1hcGAgYWZ0ZXIgYSBgVk1fRkFVTFRfUkVUUllgLCBpdCBhdHRlbXB0cyBgbG9ja192bWFgIG9uZSBtb3JlIHRpbWUgaWYgdGhlIGZsYWcgaXNuJ3Qgc2V0LiBUaGlzIGNoYW5nZSBpbXBhY3RzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgUG93ZXJQQywgUklTQy1WLCBTMzkwLCBhbmQgeDg2KS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBLTVNBTiB0ZXN0aW5nLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBLTVNBTiBpcyByZXNlcnZlZCBmb3Igc2NlbmFyaW9zIHdoZXJlIHdlJ3JlIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgbGV0J3MgYW5hbHl6ZTpcblxuRmlyc3QsIHRoZXJlJ3MgYWJzb2x1dGVseSBubyBldmlkZW5jZSBvZiBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB3aGljaCB3b3VsZCBiZSBhIGJpZyByZWQgZmxhZy4gTm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMsIGFuZCB3ZSdyZSBub3QgdG91Y2hpbmcgYW55IHNoYXJlZCBrZXJuZWwgc3RydWN0dXJlcy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBuZXcgc3RydWN0IGZpZWxkcywgb3IgYnVmZmVycyBhcmUgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIGB2bWFfbG9ja19yZXRyaWVkYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gZXZlcnkgYXJjaGl0ZWN0dXJlJ3MgY29kZS4gVGhpcyBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzICpwdXJlbHkqIGNvbmNlcm5lZCB3aXRoIGNvbnRyb2wgZmxvdyBhcm91bmQgbG9ja2luZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0J3MgZXNzZW50aWFsbHkgcmVmaW5pbmcgdGhlIHJldHJ5IG1lY2hhbmlzbS4gVGhlIGNvbmNlcm5zIGhlcmUgYXJlIHRoaW5ncyBsaWtlIGRlYWRsb2NrcywgaW5maW5pdGUgbG9vcHMsIGxvY2tpbmcgaW5jb25zaXN0ZW5jaWVzLCBhbmQgcmFjZSBjb25kaXRpb25zLiBCdXQsIHRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgdHJhZGl0aW9uYWxseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBydW50aW1lIHRlc3RpbmcsIG5vdCBLTVNBTi5cblxuTG9va2luZyBhdCB0aGUgS01TQU4gcnVsZXM6IFRoZSBrZXkgcG9pbnQgaXMgdGhhdCB3ZSAqc2hvdWxkbid0KiBydW4gS01TQU4gaWYgYSBidWcgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBkZXRlY3RvcnMuIFdlIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgKmFsbCogc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAqYmVmb3JlKiBiZWluZyByZWFkIG9yIGNvcGllZC4gTm9uZSBvZiB0aGVzZSBydWxlcyBhcmUgdmlvbGF0ZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHJpc2tzLCB0aGVyZWZvcmUgbm8gaW5mb3JtYXRpb24gbGVha3MuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgY2hhbmdlcyBhY3Jvc3MgYWxsIGFmZmVjdGVkIGFyY2hpdGVjdHVyZXMuIEluIGVhY2ggY2FzZSwgYHZtYV9sb2NrX3JldHJpZWRgIGlzIGEgcHJvcGVybHkgaW5pdGlhbGl6ZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cywgYW5kIHRoZSBwcmltYXJ5IGxvZ2ljIGFkanVzdHMgcGVyLVZNQSBsb2NrIGF0dGVtcHRzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYG1tYXBfbG9ja2AuIFRoaXMgaXMgYWxsIGdvb2QhXG5cblNvLCBpbiBteSBwcm9mZXNzaW9uYWwgb3BpbmlvbiwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGF0J3MgdGhhdC4gTm93LCBsZXQncyBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTAsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTU6MDkuNDY5NjI2OTM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUncyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZS1yZXRyeSBtZWNoYW5pc20gZm9yIHBlci1WTUEgbG9ja2VkIHBhZ2UgZmF1bHRzIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgKGFybSwgYXJtNjQsIGxvb25nYXJjaCwgcG93ZXJwYywgcmlzY3YsIHMzOTAsIHg4Nikgd2hlbiBoYW5kbGluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIG1tYXBfbG9jay4gVGhlIGFkZGVkIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgKHZtYV9sb2NrX3JldHJpZWQpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gdGhlIHN0YWNrIGluIGVhY2ggYXJjaGl0ZWN0dXJlJ3MgcGFnZSBmYXVsdCBoYW5kbGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMsIGFsdGVyIGJ1ZmZlciBib3VuZHMsIG9yIHJlYWQgdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgbG9ja2luZyBzYW5pdGl6ZXJzIChlLmcuLCBMT0NLREVQKSBvciBLQVNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 03:12:27 +0000 UTC FinishedAt: 2026-09-11 03:15:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3628c3df6cd2797b34714d23113cd44cb30801e7", "config_name": "upstream-apparmor-kasan.config", "series_id": "29a2ef90-7be2-4983-bb3b-adcf4ec9353d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZS1yZXRyeSBtZWNoYW5pc20gZm9yIHBlci1WTUEgbG9ja2VkIHBhZ2UgZmF1bHRzIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgKGFybSwgYXJtNjQsIGxvb25nYXJjaCwgcG93ZXJwYywgcmlzY3YsIHMzOTAsIHg4Nikgd2hlbiBoYW5kbGluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIG1tYXBfbG9jay4gVGhlIGFkZGVkIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgKHZtYV9sb2NrX3JldHJpZWQpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gdGhlIHN0YWNrIGluIGVhY2ggYXJjaGl0ZWN0dXJlJiMzOTtzIHBhZ2UgZmF1bHQgaGFuZGxlci4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbHRlciBidWZmZXIgYm91bmRzLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxvY2tpbmcgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGxvY2tpbmcgc2FuaXRpemVycyAoZS5nLiwgTE9DS0RFUCkgb3IgS0FTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgY29udHJvbCBmbG93IGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChpbmNsdWRpbmcgYXJjaC94ODYvbW0vZmF1bHQuYyBmb3IgYW1kNjQpIHRvIHJldHJ5IGFjcXVpcmluZyB0aGUgcGVyLVZNQSBsb2NrIHVuZGVyIFJDVSBvbmNlIHVwb24gcmVjZWl2aW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gdGFraW5nIHRoZSBtbWFwIGxvY2suIFRoaXMgYWx0ZXJzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcuIEZvY3VzU3ltYm9scyBpcyBsZWZ0IGVtcHR5IHRvIHByZXZlbnQgZnV6emluZyBkaWx1dGlvbiwgYXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIChkb191c2VyX2FkZHJfZmF1bHQpIGlzIGFuIGFyY2hpdGVjdHVyZSBwYWdlIGZhdWx0IGhhbmRsZXIgZXhlY3V0ZWQgdWJpcXVpdG91c2x5IGJ5IHVzZXJzcGFjZSB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMDAwNjJjNmRkZDc4YTFjZmRjOGYxMWMzNjcwN2I0MzM5ZGYwN2I4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDM6MTM6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmNcbmluZGV4IDBhMDlkNGZmNzcxODUuLjcwNDcyNzQ0ZjVjNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9tbS9mYXVsdC5jXG5AQCAtMzQ0LDYgJiM0MzszNDQsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuIFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0FDQ0VTU19GTEFHUztcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBmc3IpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zOTUsNiAmIzQzOzM5Niw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbiYjNDM7bG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTQyNCw2ICYjNDM7NDI2LDEyIEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRnb3RvIG5vX2NvbnRleHQ7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbiYjNDM7XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuJiM0MztcdFx0Z290byBsb2NrX3ZtYTtcbiYjNDM7XHR9XG4mIzQzO1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbmluZGV4IDc1YzNlNDYzZGYyZWYuLmM3ZmQ2ZjQ4NWIxNjEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuQEAgLTYxNCw2ICYjNDM7NjE0LDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBzaV9jb2RlO1xuIFx0aW50IHBrZXkgPSAtMTtcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBlc3IpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC02ODIsNiAmIzQzOzY4Myw3IEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuIFx0aWYgKCEobW1fZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtNzI4LDYgJiM0Mzs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRcdFx0Z290byBub19jb250ZXh0O1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4mIzQzO1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbiYjNDM7XHRcdGdvdG8gbG9ja192bWE7XG4mIzQzO1x0fVxuJiM0MztcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbmluZGV4IDJjOTNkMzMzNTZlNTcuLmVmNmVhODQ3YjFlMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG5AQCAtMTgxLDYgJiM0MzsxODEsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuJiM0MztcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtXHUwMDNldGhyZWFkLnRyYXBfbnIpKVxuIFx0XHRyZXR1cm47XG5AQCAtMjE5LDYgJiM0MzsyMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMjY1LDYgJiM0MzsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIHdyaXRlLCBhZGRyZXNzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbiYjNDM7XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuJiM0MztcdFx0Z290byBsb2NrX3ZtYTtcbiYjNDM7XHR9XG4mIzQzO1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5pbmRleCA4MDZjNzRlMGQ1YWI3Li4wNjAxOGI2ZDcwODZmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5AQCAtNDIyLDYgJiM0Mzs0MjIsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdGludCBpc193cml0ZSA9IHBhZ2VfZmF1bHRfaXNfd3JpdGUoZXJyb3JfY29kZSk7XG4gXHR2bV9mYXVsdF90IGZhdWx0LCBtYWpvciA9IDA7XG4gXHRib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTtcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmICh1bmxpa2VseShkZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKHJlZ3MpIHx8IGtwcm9iZV9mYXVsdCkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4mIzQzO2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC01MTcsNiAmIzQzOzUxOSwxMSBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdGlmIChmYXVsdF9zaWduYWxfcGVuZGluZyhmYXVsdCwgcmVncykpXG4gXHRcdHJldHVybiB1c2VyX21vZGUocmVncykgPyAwIDogU0lHQlVTO1xuIFxuJiM0MztcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuJiM0MztcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIGxvY2tfdm1hO1xuJiM0MztcdH1cbiYjNDM7XG4gbG9ja19tbWFwOlxuIFxuIFx0LyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG5pbmRleCAwNGVkNmY4YWNhZTRmLi5mZjg2MTc5M2RiYTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbkBAIC0yODQsNiAmIzQzOzI4NCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4gXHRpbnQgY29kZSA9IFNFR1ZfTUFQRVJSO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbiYjNDM7XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGNhdXNlID0gcmVncy1cdTAwM2VjYXVzZTtcbiBcdGFkZHIgPSByZWdzLVx1MDAzZWJhZGFkZHI7XG5AQCAtMzQ3LDYgJiM0MzszNDgsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMzc2LDYgJiM0MzszNzgsMTIgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuJiM0MztcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIGxvY2tfdm1hO1xuJiM0MztcdH1cbiYjNDM7XG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbkBAIC0yNzEsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHRib29sIGlzX3dyaXRlO1xuJiM0MztcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgcHJvZ3JhbSBjaGVjayBoYXNcbkBAIC0yOTQsNiAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdFx0ZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiYjNDM7bG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTMxOCw2ICYjNDM7MzIwLDEwIEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdFx0XHRoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4mIzQzO1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbiYjNDM7XHRcdGdvdG8gbG9ja192bWE7XG4mIzQzO1x0fVxuIGxvY2tfbW1hcDpcbiByZXRyeTpcbiBcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuY1xuaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2ZhdWx0LmNcbkBAIC0xMjIyLDYgJiM0MzsxMjIyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4mIzQzO1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHR0c2sgPSBjdXJyZW50O1xuIFx0bW0gPSB0c2stXHUwMDNlbW07XG5AQCAtMTMzMSw2ICYjNDM7MTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuJiM0Mztsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMTM2MCw2ICYjNDM7MTM2MiwxMiBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdFx0XHRcdFx0XHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuJiM0MztcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4mIzQzO1x0XHRnb3RvIGxvY2tfdm1hO1xuJiM0MztcdH1cbiYjNDM7XG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDAwMDYyYzZkZGQ3OGExY2ZkYzhmMTFjMzY3MDdiNDMzOWRmMDdiOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAzOjEzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggMGEwOWQ0ZmY3NzE4NS4uNzA0NzI3NDRmNWM1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0zNDQsNiAmIzQzOzM0NCw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAl2bV9mYXVsdF90IGZhdWx0OwogCXVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDsKIAl2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fQUNDRVNTX0ZMQUdTOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCWlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBmc3IpKQogCQlyZXR1cm4gMDsKQEAgLTM5NSw2ICYjNDM7Mzk2LDcgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC00MjQsNiAmIzQzOzQyNiwxMiBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCQlnb3RvIG5vX2NvbnRleHQ7CiAJCXJldHVybiAwOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKaW5kZXggNzVjM2U0NjNkZjJlZi4uYzdmZDZmNDg1YjE2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwpAQCAtNjE0LDYgJiM0Mzs2MTQsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgc2lfY29kZTsKIAlpbnQgcGtleSA9IC0xOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCWlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBlc3IpKQogCQlyZXR1cm4gMDsKQEAgLTY4Miw2ICYjNDM7NjgzLDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsCiAJaWYgKCEobW1fZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTcyOCw2ICYjNDM7NzMwLDEyIEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLAogCQkJZ290byBub19jb250ZXh0OwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMKaW5kZXggMmM5M2QzMzM1NmU1Ny4uZWY2ZWE4NDdiMWUwNSAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jCkBAIC0xODEsNiAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDsKIAl2bV9mYXVsdF90IGZhdWx0OwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCWlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBjdXJyZW50LSZndDt0aHJlYWQudHJhcF9ucikpCiAJCXJldHVybjsKQEAgLTIxOSw2ICYjNDM7MjIwLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAlpZiAoIShmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1VTRVIpKQogCQlnb3RvIGxvY2tfbW1hcDsKIAomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtMjY1LDYgJiM0MzsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCW5vX2NvbnRleHQocmVncywgd3JpdGUsIGFkZHJlc3MpOwogCQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiByZXRyeToKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggODA2Yzc0ZTBkNWFiNy4uMDYwMThiNmQ3MDg2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTQyMiw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJaW50IGlzX3dyaXRlID0gcGFnZV9mYXVsdF9pc193cml0ZShlcnJvcl9jb2RlKTsKIAl2bV9mYXVsdF90IGZhdWx0LCBtYWpvciA9IDA7CiAJYm9vbCBrcHJvYmVfZmF1bHQgPSBrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCAxMSk7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKHVubGlrZWx5KGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykgfHwga3Byb2JlX2ZhdWx0KSkKIAkJcmV0dXJuIDA7CkBAIC00ODcsNiAmIzQzOzQ4OCw3IEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC01MTcsNiAmIzQzOzUxOSwxMSBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlpZiAoZmF1bHRfc2lnbmFsX3BlbmRpbmcoZmF1bHQsIHJlZ3MpKQogCQlyZXR1cm4gdXNlcl9tb2RlKHJlZ3MpID8gMCA6IFNJR0JVUzsKIAomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiAJLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKaW5kZXggMDRlZDZmOGFjYWU0Zi4uZmY4NjE3OTNkYmE5NyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuYwpAQCAtMjg0LDYgJiM0MzsyODQsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCXVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDsKIAlpbnQgY29kZSA9IFNFR1ZfTUFQRVJSOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJY2F1c2UgPSByZWdzLSZndDtjYXVzZTsKIAlhZGRyID0gcmVncy0mZ3Q7YmFkYWRkcjsKQEAgLTM0Nyw2ICYjNDM7MzQ4LDcgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAlpZiAoIShmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1VTRVIpKQogCQlnb3RvIGxvY2tfbW1hcDsKIAomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtMzc2LDYgJiM0MzszNzgsMTIgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJCW5vX2NvbnRleHQocmVncywgYWRkcik7CiAJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0NmQ4Mjg5MjYwMDliLi5kY2QxYmEyNDQ5N2Y4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMjcxLDYgJiM0MzsyNzEsNyBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiAJYm9vbCBpc193cml0ZTsKJiM0MzsJYm9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7CiAKIAkvKgogCSAqIFRoZSBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgcHJvZ3JhbSBjaGVjayBoYXMKQEAgLTI5NCw2ICYjNDM7Mjk1LDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKQogCQlmbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtMzE4LDYgJiM0MzszMjAsMTAgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKQogCQkJaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KIGxvY2tfbW1hcDoKIHJldHJ5OgogCXZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IGFhODgzNzBjZTczOTQuLmRmMTBkNWNlYTRlZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMTIyMiw2ICYjNDM7MTIyMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCXRzayA9IGN1cnJlbnQ7CiAJbW0gPSB0c2stJmd0O21tOwpAQCAtMTMzMSw2ICYjNDM7MTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0xMzYwLDYgJiM0MzsxMzYyLDEyIEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCQkJIEFSQ0hfREVGQVVMVF9QS0VZKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBnaXZlbiBteSBiYWNrZ3JvdW5kLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBBTUQ2NCwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIGNvbW1vbiBhbmQgd2VsbC11bmRlcnN0b29kIHBsYXRmb3JtIGZvciBleHBsb2l0YXRpb24gcmVzZWFyY2guIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBhY3R1YWxseSBkZWFsaW5nIHdpdGggaGVyZS4KCkhtbSwgdGhpcyBwYXRjaCBtb2RpZmllcyBwYWdlIGZhdWx0IGhhbmRsZXJzLiBBY3Jvc3MgKm11bHRpcGxlKiBhcmNoaXRlY3R1cmVzLCBubyBsZXNzOiBBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIFBvd2VyUEMsIFJJU0MtViwgUzM5MCwgYW5kLCBjcnVjaWFsbHksIHg4Ni4gVGhpcyBtYWtlcyB0aGluZ3MgbW9yZSBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIHRoZSBrZXJuZWwmIzM5O3MgZmF1bHQgaGFuZGxpbmcgcm91dGluZXMgaXMgZGVmaW5pdGVseSBhIHBvaW50IG9mIGludGVyZXN0LiBGYXVsdCBoYW5kbGVycyBhcmUgYWx3YXlzIGhpZ2gtdmFsdWUgdGFyZ2V0cywgYXMgdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgb2Z0ZW4gdGhlIGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIGBhcmNoL3g4Ni9tbS9mYXVsdC5jYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IHg4NiBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGV4dHJhY3QgYW55IGZvY3VzIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBMaW5lIDEzMzAgaXMgbWVudGlvbmVkLCBzbyBJIHdpbGwgbm93IGZvY3VzIG9uIHRoYXQgc2VjdGlvbi4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9mYXVsdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XHQgKiBUaGUgdnN5c2NhbGwgcGFnZSBkb2VzIG5vdCBoYXZlIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTUEsIHNvIGRvIHRoaXNcbjEzMjE6XHRcdCAqIGVtdWxhdGlvbiBiZWZvcmUgd2UgZ28gc2VhcmNoaW5nIGZvciBWTUFzLlxuMTMyMjpcdFx0ICpcbjEzMjM6XHRcdCAqIFBLUlUgbmV2ZXIgcmVqZWN0cyBpbnN0cnVjdGlvbiBmZXRjaGVzLCBzbyB3ZSBkb24mIzM5O3QgbmVlZFxuMTMyNDpcdFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cbjEzMjU6XHRcdCAqL1xuMTMyNjpcdFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XG4xMzI3Olx0XHRcdGlmIChlbXVsYXRlX3ZzeXNjYWxsX3BmKGVycm9yX2NvZGUsIHJlZ3MsIGFkZHJlc3MpKVxuMTMyODpcdFx0XHRcdHJldHVybjtcbjEzMjk6XHRcdH1cbjEzMzA6XHQjZW5kaWZcbjEzMzE6XHRcbjEzMzI6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuMTMzMzpcdFx0XHRnb3RvIGxvY2tfbW1hcDtcbjEzMzQ6XHRcbjEzMzU6XHRsb2NrX3ZtYTpcbjEzMzY6XHRcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4xMzM3Olx0XHRpZiAoIXZtYSlcbjEzMzg6XHRcdFx0Z290byBsb2NrX21tYXA7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAodW5saWtlbHkoYWNjZXNzX2Vycm9yKGVycm9yX2NvZGUsIHZtYSkpKSB7XG4xMzQxOlx0XHRcdGJhZF9hcmVhX2FjY2Vzc19lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBOVUxMLCB2bWEpO1xuMTM0MjpcdFx0XHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcbjEzNDM6XHRcdFx0cmV0dXJuO1xuMTM0NDpcdFx0fVxuMTM0NTpcdFx0ZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyZXNzLCBmbGFncyB8IEZBVUxUX0ZMQUdfVk1BX0xPQ0ssIHJlZ3MpO1xuMTM0NjpcdFx0aWYgKCEoZmF1bHQgXHUwMDI2IChWTV9GQVVMVF9SRVRSWSB8IFZNX0ZBVUxUX0NPTVBMRVRFRCkpKVxuMTM0NzpcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbjEzNDg6XHRcbjEzNDk6XHRcdGlmICghKGZhdWx0IFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcbjEzNTA6XHRcdFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfU1VDQ0VTUyk7XG4xMzUxOlx0XHRcdGdvdG8gZG9uZTtcbjEzNTI6XHRcdH1cbjEzNTM6XHRcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1JFVFJZKTtcbjEzNTQ6XHRcdGlmIChmYXVsdCBcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXG4xMzU1Olx0XHRcdGZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XG4xMzU2Olx0XG4xMzU3Olx0XHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xuMTM1ODpcdFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xuMTM1OTpcdFx0XHRpZiAoIXVzZXJfbW9kZShyZWdzKSlcbjEzNjA6XHRcdFx0XHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcbjEzNjE6XHRcdFx0XHRcdFx0XHQgU0lHQlVTLCBCVVNfQURSRVJSLFxuMTM2MjpcdFx0XHRcdFx0XHRcdCBBUkNIX0RFRkFVTFRfUEtFWSk7XG4xMzYzOlx0XHRcdHJldHVybjtcbjEzNjQ6XHRcdH1cbjEzNjU6XHRcbjEzNjY6XHRcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuMTM2NzpcdFx0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbjEzNjg6XHRcdFx0Z290byBsb2NrX3ZtYTtcbjEzNjk6XHRcdH1cbjEzNzA6XHRcbjEzNzE6XHRsb2NrX21tYXA6XG4xMzcyOlx0XG4xMzczOlx0cmV0cnk6XG4xMzc0Olx0XHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XG4xMzc1Olx0XHRpZiAodW5saWtlbHkoIXZtYSkpIHtcbjEzNzY6XHRcdFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XG4xMzc3Olx0XHRcdHJldHVybjtcbjEzNzg6XHRcdH1cbjEzNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBob3cgdGhlIHBlci1WTUEgbG9jayByZXRyaWVzIGR1cmluZyBwYWdlIGZhdWx0cywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb3JlIGFyY2hpdGVjdHVyZSBmYXVsdCBoYW5kbGVycy4gSXQgbG9va3MgbGlrZSB3aGVuIGBoYW5kbGVfbW1fZmF1bHQoKWAgcmV0dXJucyBgVk1fRkFVTFRfUkVUUllgIHdpdGggYEZBVUxUX0ZMQUdfVk1BX0xPQ0tgLCBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IGdvaW5nIGZvciB0aGUgYG1tYXBfbG9ja2AsIGl0IHJldHJpZXMgYGxvY2tfdm1hYCBvbmNlIGZpcnN0LgoKVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIGl0ICp3b3J0aCogZnV6emluZz8gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgZXNwZWNpYWxseSB3aXRoaW4gY29yZSBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQuICBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBpcyBpbmRlZWQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBvbiB4ODYgZm9yIHVzZXIgYWRkcmVzcyBmYXVsdHMsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gU28gZmFyLCBzbyBnb29kLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzIGFuZCBwcmV2ZW50IGRpbHV0aW9uLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZpY2FsbHkgdGVsbCBtZSB0byAqYXZvaWQqIGxpc3RpbmcgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMmIzM0OyBsaWtlIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGJlY2F1c2UgdGhhdCBkaWx1dGVzIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgY2FyZWZ1bC4gIGBkb191c2VyX2FkZHJfZmF1bHRgIGlzLCB1bmZvcnR1bmF0ZWx5LCBhIHBhZ2UgZmF1bHQgaGFuZGxlciEKCkJ1dCwgd2FpdCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgdGhhdCBtaWdodCBiZSBtb3JlIHNwZWNpZmljPyBJIG5lZWQgdG8gYXZvaWQganVzdCBsaXN0aW5nIGEgZ2VuZXJpYyBmdW5jdGlvbiBsaWtlIGBkb191c2VyX2FkZHJfZmF1bHRgLiBUaGUgZGlmZiBtZW50aW9ucyBzZXZlcmFsIG90aGVyIGFyY2hpdGVjdHVyZXMmIzM5OyBwYWdlIGZhdWx0IGhhbmRsZXJzIGFzIHdlbGw6IGBhcmNoL2FybS9tbS9mYXVsdC5jOiBkb19wYWdlX2ZhdWx0YCwgYGFyY2gvYXJtNjQvbW0vZmF1bHQuYzogZG9fcGFnZV9mYXVsdGAsIGBhcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jOiBfX2RvX3BhZ2VfZmF1bHRgLCBgYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmM6IF9fX2RvX3BhZ2VfZmF1bHRgLCBgYXJjaC9yaXNjdi9tbS9mYXVsdC5jOiBoYW5kbGVfcGFnZV9mYXVsdGAsIGBhcmNoL3MzOTAvbW0vZmF1bHQuYzogZG9fZXhjZXB0aW9uYC4gIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBjcm9zcy1hcmNoaXRlY3R1cmUgY2hhbmdlLCBidXQgaXQmIzM5O3MgKmFsbCogcGFnZSBmYXVsdCBoYW5kbGVycy4gVG8gYmUgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBxdWFsaWZ5IGFzIGEgYmV0dGVyIGZvY3VzIHN5bWJvbCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGdpdCBkaWZmIGFuZCBsb2cgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucy9maWxlcyBtb2RpZmllZCwgYXMgaXQgd291bGQgYmUgYSBzaGFtZSB0byBtaXNzIGEgYmV0dGVyIGNhbmRpZGF0ZSBiZWNhdXNlIG9mIGEgdHlwby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfbG9ja19yZXRyaWVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL21tL2ZhdWx0LmM9MzM5PWRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybS9tbS9mYXVsdC5jLTM0Ni1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9BQ0NFU1NfRkxBR1M7XG5hcmNoL2FybS9tbS9mYXVsdC5jOjM0NzpcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuYXJjaC9hcm0vbW0vZmF1bHQuYy0zNDgtXG4tLVxuYXJjaC9hcm0vbW0vZmF1bHQuYy00MjktXG5hcmNoL2FybS9tbS9mYXVsdC5jOjQzMDpcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuYXJjaC9hcm0vbW0vZmF1bHQuYzo0MzE6XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuYXJjaC9hcm0vbW0vZmF1bHQuYy00MzItXHRcdGdvdG8gbG9ja192bWE7XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTYwNT1zdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjE2LVx0aW50IHBrZXkgPSAtMTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2MTc6XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02MTgtXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTczMy1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo3MzQ6XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo3MzU6XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTczNi1cdFx0Z290byBsb2NrX3ZtYTtcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jPTE3NT1zdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMtMTgzLVx0dm1fZmF1bHRfdCBmYXVsdDtcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM6MTg0Olx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTE4NS1cbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTI3MC1cbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM6MjcxOlx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jOjI3MjpcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTI3My1cdFx0Z290byBsb2NrX3ZtYTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYz00MTQ9c3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNDI0LVx0Ym9vbCBrcHJvYmVfZmF1bHQgPSBrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCAxMSk7XG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0MjU6XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jLTQyNi1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy01MjEtXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo1MjI6XHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jOjUyMzpcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy01MjQtXHRcdGdvdG8gbG9ja192bWE7XG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jPTI3OD12b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0yODYtXHR2bV9mYXVsdF90IGZhdWx0O1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjI4NzpcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTI4OC1cbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzgxLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjM4MjpcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjM4MzpcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzg0LVx0XHRnb3RvIGxvY2tfdm1hO1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jPTI2Nj1zdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpXG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtMjczLVx0Ym9vbCBpc193cml0ZTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjI3NDpcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtMjc1LVxuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTMyMi1cdH1cbmFyY2gvczM5MC9tbS9mYXVsdC5jOjMyMzpcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuYXJjaC9zMzkwL21tL2ZhdWx0LmM6MzI0Olx0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTMyNS1cdFx0Z290byBsb2NrX3ZtYTtcbi0tXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMjI0LVx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuYXJjaC94ODYvbW0vZmF1bHQuYzoxMjI1Olx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEyMjYtXG4tLVxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzY1LVxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzY2Olx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG5hcmNoL3g4Ni9tbS9mYXVsdC5jOjEzNjc6XHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzY4LVx0XHRnb3RvIGxvY2tfdm1hO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGZvciBHdWFyZGluZyBDb25kaXRpb25zIG9uIFBFUl9WTUFfTE9DSyoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaGVyZS4gQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgUEVSX1ZNQV9MT0NLYCBpc24mIzM5O3QgY29uZGl0aW9uYWwgb24gc29tZSBvdGhlciBzeW1ib2wgSSYjMzk7bSBvdmVybG9va2luZywgb3IgcGVyaGFwcyBwYXJ0IG9mIGEgbGFyZ2VyLCBtb3JlIGNvbXBsZXggY29uZmlndXJhdGlvbiBzY2hlbWUuIEl0JiMzOTtzIGVhc3kgdG8gZ2V0IHR1bm5lbCB2aXNpb24sIHNvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiBgQ09ORklHX1BFUl9WTUFfTE9DS2AuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgYSBnYXRpbmcgY29uZGl0aW9uLiBJdCYjMzk7bGwgZ2l2ZSB1cyBhIGNsZWFyIHllcyBvciBubyBhbnN3ZXIgb24gd2hldGhlciB0aGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgb3IgaWYgdGhpcyBtZWNoYW5pc20gaXMgZGlzYWJsZWQgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEtub3dpbmcgaWYgaXQmIzM5O3MgY29uZmlnLWRlcGVuZGVudCBpcyBrZXkgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQRVJfVk1BX0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMDA9Y29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0Vcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cbm1tL0tjb25maWcuZGVidWc6MzExOmNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcbm1tL0tjb25maWcuZGVidWctMzEyLVx0Ym9vbCBcJiMzNDtTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzXCYjMzQ7XG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xNDc1LSNlbmRpZlxubW0vdm1zdGF0LmM6MTQ3NjojaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS19TVEFUU1xubW0vdm1zdGF0LmMtMTQ3Ny1cdFtJKFZNQV9MT0NLX1NVQ0NFU1MpXVx0XHRcdD0gXCYjMzQ7dm1hX2xvY2tfc3VjY2Vzc1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfUEVSX1ZNQV9MT0NLYC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhcyBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIGFuZCBJIHdhbnQgdG8gdGhvcm91Z2hseSBhc3Nlc3Mgd2hlcmUgaXQmIzM5O3MgY3VycmVudGx5IGRlZmluZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGV2ZXJ5IHNpbmdsZSBgS2NvbmZpZ2AgZmlsZSBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpbmNsdWRlcyB0aGUgY29yZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZ3MsIHRoZSBkZXZpY2UgZHJpdmVyIEtjb25maWdzLCB0aGUgZmlsZXN5c3RlbSBLY29uZmlncywgdGhlIG5ldHdvcmtpbmcgc3RhY2sgS2NvbmZpZ3Mg4oCTIGJhc2ljYWxseSwgZXZlcnl3aGVyZSB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IHRvdWNoIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl04oCZcyAqZW5hYmxlZCosIHdoZXJlIGl04oCZcyAqZGlzYWJsZWQqLCBhbmQgcGVyaGFwcyBldmVuIG1vcmUgaW1wb3J0YW50bHksIHdoZXJlIGl0JiMzOTtzICp1bmRlZmluZWQqIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBhcmVhcyB0aGF0IGFyZSBiZWluZyBsZWZ0IHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIGZlYXR1cmUgaXMgYmVpbmcgdHJlYXRlZCBhY3Jvc3MgdGhlIGJvYXJkIGFuZCBleHBvc2UgYW55IHBvdGVudGlhbCBpbmNvbnNpc3RlbmNpZXMgb3Igc3VycHJpc2luZyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzZSBpcyBwYXJhbW91bnQgZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSX1ZNQV9MT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG5tbS9LY29uZmlnLmRlYnVnLTMxMi1cdGJvb2wgXCYjMzQ7U3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYGxvY2tfdm1hX3VuZGVyX3JjdWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBsb2NrX3ZtYV91bmRlcl9yY3VgLiBUaGlzIGZlZWxzIGxpa2UgYSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIGxvY2tpbmcgaXNzdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpdHNlbGYuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgZWl0aGVyIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGl2ZXMsIG9yIHBvc3NpYmx5IHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSwgaW4gY2FzZSBpdCYjMzk7cyBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgaGVhZGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2tfdm1hX3VuZGVyX3JjdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQyPVRlcm1pbm9sb2d5XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00OS0gIGFzIGEgcmVhZC93cml0ZSBzZW1hcGhvcmUgaW4gcHJhY3RpY2UuIEEgVk1BIHJlYWQgbG9jayBpcyBvYnRhaW5lZCB2aWFcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTA6ICA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCAoYW5kIHVubG9ja2VkIHZpYSA6YzpmdW5jOmAhdm1hX2VuZF9yZWFkYCkgYW5kIGFcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTEtICB3cml0ZSBsb2NrIHZpYSB2bWFfc3RhcnRfd3JpdGUoKSBvciB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUoKVxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NzY9bXVzdCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTgwLSAgeW91JiMzOTtyZSBkb25lIHdpdGggdGhlIFZNQSwgKm9yKlxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo4MToqIFRyeSB0byBvYnRhaW4gYSBWTUEgcmVhZCBsb2NrIHZpYSA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YC4gVGhpcyB0cmllcyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04Mi0gIGFjcXVpcmUgdGhlIGxvY2sgYXRvbWljYWxseSBzbyBtaWdodCBmYWlsLCBpbiB3aGljaCBjYXNlIGZhbGwtYmFjayBsb2dpYyBpc1xuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9MTAxPWluIG9yZGVyIHRvIG9idGFpbiBhIFZNQSAqKndyaXRlKiogbG9jay4gQSBWTUEgKipyZWFkKiogbG9jayBob3dldmVyIGNhbiBiZVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDoxMDI6b2J0YWluZWQgd2l0aG91dCBhbnkgb3RoZXIgbG9jayAoOmM6ZnVuYzpgIWxvY2tfdm1hX3VuZGVyX3JjdWAgd2lsbCBhY3F1aXJlIHRoZW5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtMTAzLXJlbGVhc2UgYW4gUkNVIGxvY2sgdG8gbG9va3VwIHRoZSBWTUEgZm9yIHlvdSkuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03NTU9d3JpdGUgaGFzIHN0YXJ0ZWQsIHRoZW4gd2UgZG8gbm90IG9idGFpbiBhIHJlYWQgbG9jay5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzU2LVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo3NTc6QSBWTUEgKipyZWFkKiogbG9jayBpcyBvYnRhaW5lZCBieSA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCwgd2hpY2ggZmlyc3RcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzU4LWNhbGxzIDpjOmZ1bmM6YCFyY3VfcmVhZF9sb2NrYCB0byBlbnN1cmUgdGhhdCB0aGUgVk1BIGlzIGxvb2tlZCB1cCBpbiBhbiBSQ1Vcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTc2Nz1WTUEgcmVhZCBsb2NrcyBpbmNyZW1lbnQgOmM6bWVtYmVyOmAhdm1hLnZtX3JlZmNudGAgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHRoZWlyXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0Ojc2ODpkdXJhdGlvbiBhbmQgdGhlIGNhbGxlciBvZiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCBtdXN0IGRyb3AgaXQgdmlhXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTc2OS06YzpmdW5jOmAhdm1hX2VuZF9yZWFkYC5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTc5OT1yZWFkIGxvY2sgYWNxdWlzaXRpb24uIE9uY2UgYWNxdWlyZWQsIHRoZSBSQ1UgbG9jayBjYW4gYmUgcmVsZWFzZWQgYXMgaXQgaXMgb25seVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo4MDA6cmVxdWlyZWQgZm9yIGxvb2t1cC4gVGhpcyBpcyBhYnN0cmFjdGVkIGJ5IDpjOmZ1bmM6YCFsb2NrX3ZtYV91bmRlcl9yY3VgIHdoaWNoXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTgwMS1pcyB0aGUgaW50ZXJmYWNlIGEgdXNlciBzaG91bGQgdXNlLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9ODM2PXBlcm1pdHRpbmcgb3RoZXIgcmVhZGVycywgd2hvIGNhbiBhbHNvIG9idGFpbiB0aGlzIGxvY2sgdW5kZXIgUkNVLlxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04MzctXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjgzODpJbXBvcnRhbnRseSwgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04MzktYXJlIGFsc28gUkNVIHNhZmUsIHNvIHRoZSB3aG9sZSByZWFkIGxvY2sgb3BlcmF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gZnVuY3Rpb25cbi0tXG5hcmNoL2FybS9tbS9mYXVsdC5jPTMzOT1kb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm0vbW0vZmF1bHQuYy0zOTktbG9ja192bWE6XG5hcmNoL2FybS9tbS9mYXVsdC5jOjQwMDpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG5hcmNoL2FybS9tbS9mYXVsdC5jLTQwMS1cdGlmICghdm1hKVxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDU9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTY4Ni1sb2NrX3ZtYTpcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2ODc6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTY4OC1cdGlmICghdm1hKVxuLS1cbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM9MTc1PXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yMjMtbG9ja192bWE6XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jOjIyNDpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTIyNS1cdGlmICghdm1hKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jPTQxND1zdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy00OTEtbG9ja192bWE6XG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0OTI6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNDkzLVx0aWYgKCF2bWEpXG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jPTI3OD12b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zNTEtbG9ja192bWE6XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM6MzUyOlx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zNTMtXHRpZiAoIXZtYSlcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYz0yNjY9c3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTI5OC1sb2NrX3ZtYTpcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjI5OTpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0zMDAtXHRpZiAoIXZtYSlcbi0tXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzM1LWxvY2tfdm1hOlxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzM2Olx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbmFyY2gveDg2L21tL2ZhdWx0LmMtMTMzNy1cdGlmICghdm1hKVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycz02MDk9ICAgIGZuIGRyb3Aoc2VsZjogUGluXHUwMDNjXHUwMDI2bXV0IFNlbGZcdTAwM2UpIHtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMtNzI0LSAgICAgICAgdm1hX2FkZHIgPSBpbm5lci52bWFfYWRkcjtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yczo3MjU6ICAgICAgICB2bWFfcmVhZCA9IG1hdGNoIG1tLmxvY2tfdm1hX3VuZGVyX3JjdSh2bWFfYWRkcikge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTcyNi0gICAgICAgICAgICBTb21lKGd1YXJkKSA9XHUwMDNlIGd1YXJkLFxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYz0xMTI3PWVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTExNTAtXHQgKi9cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYzoxMTUxOlx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBwYWdlX2FkZHIpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTExNTItXHRpZiAoIXZtYSkge1xuLS1cbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg9NDgzPXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19kZXRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oLTUwNi1cbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg6NTA3OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaC01MDgtXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MjgzPXN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yODctXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6Mjg4Olx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjg5LVx0aWYgKHZtYSkge1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9ODYzPV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX3ZtYV9uZXcoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdCxcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTkzNi0gKlxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo5Mzc6ICogbG9ja192bWFfdW5kZXJfcmN1KCkgaXMgYSBwb2ludCBsb29rdXAgKG1hc193YWxrKTogaXQgZmluZHMgdGhlIFZNQVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05MzgtICogY29udGFpbmluZyBhIGdpdmVuIGFkZHJlc3MgYnV0IGNhbm5vdCBpdGVyYXRlLiBBbiBSQ1UtcHJvdGVjdGVkXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05NDg9YnBmX2l0ZXJfdGFza192bWFfZmluZF9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuX2RhdGEgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05NjUtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjk2NjpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShkYXRhLVx1MDAzZW1tLCBzdGFydCk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTk2Ny1cdGlmICghdm1hKSB7XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEyLVx0ICogQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwgaW4gdmVyaWZpZXIuYykuIFRha2UgYSByZWZlcmVuY2Vcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMzpcdCAqIG9uIHZtX2ZpbGU7IHZtX21tIGlzIGFscmVhZHkgY29ycmVjdCBiZWNhdXNlIGxvY2tfdm1hX3VuZGVyX3JjdSgpXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTQtXHQgKiB2ZXJpZmllcyB2bWEtXHUwMDNldm1fbW0gPT0gbW0uIEFsbCBvdGhlciBwb2ludGVycyBhcmUgdW50cnVzdGVkIGJ5XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yMjk9c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMzLVxubW0vZGFtb24vdmFkZHIuYzoyMzQ6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHN0YXJ0KTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjM1LVx0aWYgKCF2bWEpXG4tLVxubW0vbWFkdmlzZS5jPTE2NDI9c3RhdGljIGJvb2wgdHJ5X3ZtYV9yZWFkX2xvY2soc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE2NDYtXG5tbS9tYWR2aXNlLmM6MTY0NzpcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgbWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZS5zdGFydCk7XG5tbS9tYWR2aXNlLmMtMTY0OC1cdGlmICghdm1hKVxuLS1cbm1tL21tYXBfbG9jay5jPTIwOT1zdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vbW1hcF9sb2NrLmMtMjMzLVx0ICogQWNxdWlyZSBmZW5jZSBpcyByZXF1aXJlZCBoZXJlIHRvIGF2b2lkIHJlb3JkZXJpbmcgYWdhaW5zdCBsYXRlclxubW0vbW1hcF9sb2NrLmM6MjM0Olx0ICogdm1fbG9ja19zZXEgY2hlY2sgYW5kIGNoZWNrcyBpbnNpZGUgbG9ja192bWFfdW5kZXJfcmN1KCkuXG5tbS9tbWFwX2xvY2suYy0yMzUtXHQgKi9cbi0tXG5tbS9tbWFwX2xvY2suYy0yOTItICovXG5tbS9tbWFwX2xvY2suYzoyOTM6c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9tbWFwX2xvY2suYy0yOTQtXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL21tYXBfbG9jay5jPTM1OD1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL21tYXBfbG9jay5jLTM2My1cdC8qIEZhc3QgcGF0aDogcmV0dXJuIHN0YWJsZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTs6ICovXG5tbS9tbWFwX2xvY2suYzozNjQ6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xubW0vbW1hcF9sb2NrLmMtMzY1LVx0aWYgKHZtYSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTEzNz1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp1ZmZkX2xvY2tfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQxLVxubW0vdXNlcmZhdWx0ZmQuYzoxNDI6XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xubW0vdXNlcmZhdWx0ZmQuYy0xNDMtXHRpZiAodm1hKSB7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODI2PXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODYwLVx0ICovXG5tbS91c2VyZmF1bHRmZC5jOjE4NjE6XHQqc3JjX3ZtYXAgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHNyY19zdGFydCk7XG5tbS91c2VyZmF1bHRmZC5jLTE4NjItXHRpZiAobGlrZWx5KCpzcmNfdm1hcCkpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjkyPXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfc2V0X21vZGUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDMyMC1cdCAqIGJsb2NrcyBuZXcgbW1hcF9yZWFkX2xvY2soKSBjYWxsZXJzLCBidXQgcGVyLVZNQSBsb2NrZWQgZmF1bHRzXG5tbS91c2VyZmF1bHRmZC5jOjQzMjE6XHQgKiAobG9ja192bWFfdW5kZXJfcmN1KCkgJiM0MzsgRkFVTFRfRkxBR19WTUFfTE9DSykgdGhhdCBhY3F1aXJlZCBiZWZvcmVcbm1tL3VzZXJmYXVsdGZkLmMtNDMyMi1cdCAqIHRoaXMgcG9pbnQga2VlcCBydW5uaW5nLiBDYWxsaW5nIHZtYV9zdGFydF93cml0ZSgpIG9uIGVhY2ggVUZGRC1cbi0tXG5ydXN0L2tlcm5lbC9tbS5ycz0xNjM9ICAgIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcdTAwM2MmIzM5O2FcdTAwM2UocHRyOiAqY29uc3QgYmluZGluZ3M6Om1tX3N0cnVjdCkgLVx1MDAzZSBcdTAwMjYmIzM5O2EgTW1XaXRoVXNlciB7XG4tLVxucnVzdC9rZXJuZWwvbW0ucnMtMTczLSAgICAjW2lubGluZV1cbnJ1c3Qva2VybmVsL21tLnJzOjE3NDogICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdShcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJiMzOTtfXHUwMDNlXHUwMDNlIHtcbnJ1c3Qva2VybmVsL21tLnJzOjE3NTogICAgICAgIC8vIFNBRkVUWTogQ2FsbGluZyBgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdWAgaXMgYWx3YXlzIG9rYXkgZ2l2ZW4gYW4gbW0gd2hlcmVcbnJ1c3Qva2VybmVsL21tLnJzLTE3Ni0gICAgICAgIC8vIGBtbV91c2Vyc2AgaXMgbm9uLXplcm8uXG5ydXN0L2tlcm5lbC9tbS5yczoxNzc6ICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbnJ1c3Qva2VybmVsL21tLnJzLTE3OC0gICAgICAgIGlmIHZtYS5pc19udWxsKCkge1xuLS1cbnJ1c3Qva2VybmVsL21tLnJzLTE4MS0gICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbnJ1c3Qva2VybmVsL21tLnJzOjE4MjogICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbnJ1c3Qva2VybmVsL21tLnJzLTE4My0gICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBtb2RpZmljYXRpb24gaW4gYGRvX3VzZXJfYWRkcl9mYXVsdGAgb24gYW1kNjQgdGhhdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtIGZvciBsb2NraW5nIHRoZSBWTUEgdW5kZXIgUkNVIGlmIGBoYW5kbGVfbW1fZmF1bHRgIHJldHVybnMgYFZNX0ZBVUxUX1JFVFJZYC4gIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7IEFueSBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxvY2tpbmcgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgb3RoZXIgbmFzdHkgY29uY3VycmVuY3kgaXNzdWVzLgoKTm93IGNvbWVzIHRoZSBjcnVjaWFsIHBhcnQ6IGhvdyB0byBndWlkZSB0aGUgZnV6emVyIGVmZmVjdGl2ZWx5LCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgRm9jdXNTeW1ib2xzYC4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBBbmQgdGhlbiBpdCBoaXRzIG1lOiBgZG9fdXNlcl9hZGRyX2ZhdWx0YCAqaXMqIGEgcGFnZSBmYXVsdCBoYW5kbGVyISAgSXQmIzM5O3MgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlICYjMzQ7ZG8gbm90IGluY2x1ZGUmIzM0OyBsaXN0LCBhbG9uZyB3aXRoIG90aGVyIGdlbmVyYWwgaGFuZGxlcnMgYW5kIGFsbG9jYXRvcnMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRvX3BhZ2VfZmF1bHRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBvbiBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBtYWtpbmcgdGhlIGNoYW5nZXMgZXZlbiBtb3JlIHBlcnZhc2l2ZS4gQWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFRoYXQgbWFrZXMgdGhpcyBhIGNsYXNzaWMgY2FzZSB3aGVyZSBsaXN0aW5nIGFueSBvZiB0aGVzZSBpbiBgRm9jdXNTeW1ib2xzYCB3aWxsIGNhdXNlIGV4dHJlbWUgZGlsdXRpb24uCgpTaW5jZSBldmVyeSB0ZXN0IHByb2dyYW0gd2lsbCBpbmV2aXRhYmx5IGhpdCB1c2VyIG1lbW9yeSBhbmQgZ2VuZXJhdGUgcGFnZSBmYXVsdHMsIGluY2x1ZGluZyBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZWZmZWN0aXZlbHkgY2xhc3NpZnkgKmV2ZXJ5KiB0ZXN0IGFzICYjMzQ7Zm9jdXNlZCwmIzM0OyByZW5kZXJpbmcgYEZvY3VzU3ltYm9sc2AgdXNlbGVzcy4gIAoKVGhlIGluc3RydWN0aW9ucyBhcmUgYWxzbyBjbGVhcjogSWYgdGhlcmUgYXJlIG5vIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyBtb2RpZmllZCBvciBkaXJlY3RseSBpbnZvbHZlZCwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGBbXWAgdG8gcHJldmVudCBkaWx1dGlvbi4KClNvLCB0aGUgb3B0aW1hbCBmdXp6aW5nIHN0cmF0ZWd5IGhlcmUgaXMgdG8gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbXWAuIFRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGd1aWRlIHRoZSBmdXp6ZXIgd2l0aG91dCBkaWx1dGluZyBpdHMgZWZmb3J0cywgYXMgaXQgZW5zdXJlcyB0aGF0IHRoZSBmdXp6ZXIgZm9jdXNlcyBvbiB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9tbS9mYXVsdC5jYCwgdG8gc2VlIGlmIHRoZSBwZXItdm1hIGxvY2tpbmcgcGF0aCBvciBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBpcyBndWFyZGVkIGJ5IGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGp1c3QgaW4gY2FzZSBhIHNwZWNpZmljIGNvbmZpZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9mYXVsdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0ICogYWxsIHB1cnBvc2VzLCB3ZSBzaG91bGQgdHJlYXQgYSBub3JtYWwga2VybmVsIGFjY2VzcyB0byB1c2VyIG1lbW9yeVxuMTIxMTpcdCAqIChlLmcuIGdldF91c2VyKCksIHB1dF91c2VyKCksIGV0Yy4pIHRoZSBzYW1lIGFzIHRoZSBXUlVTUyBpbnN0cnVjdGlvbi5cbjEyMTI6XHQgKiBUaGUgb25lIGV4Y2VwdGlvbiBpcyBBQyBmbGFnIGhhbmRsaW5nLCB3aGljaCBpcywgcGVyIHRoZSB4ODZcbjEyMTM6XHQgKiBhcmNoaXRlY3R1cmUsIHNwZWNpYWwgZm9yIFdSVVNTLlxuMTIxNDpcdCAqL1xuMTIxNTpcdHN0YXRpYyBpbmxpbmVcbjEyMTY6XHR2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbjEyMTc6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsXG4xMjE4Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuMTIxOTpcdHtcbjEyMjA6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuMTIyMTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0c2s7XG4xMjIyOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbjEyMjM6XHRcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4xMjI0Olx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4xMjI1Olx0XHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbjEyMjY6XHRcbjEyMjc6XHRcdHRzayA9IGN1cnJlbnQ7XG4xMjI4Olx0XHRtbSA9IHRzay1cdTAwM2VtbTtcbjEyMjk6XHRcbjEyMzA6XHRcdGlmICh1bmxpa2VseSgoZXJyb3JfY29kZSBcdTAwMjYgKFg4Nl9QRl9VU0VSIHwgWDg2X1BGX0lOU1RSKSkgPT0gWDg2X1BGX0lOU1RSKSkge1xuMTIzMTpcdFx0XHQvKlxuMTIzMjpcdFx0XHQgKiBXaG9vcHMsIHRoaXMgaXMga2VybmVsIG1vZGUgY29kZSB0cnlpbmcgdG8gZXhlY3V0ZSBmcm9tXG4xMjMzOlx0XHRcdCAqIHVzZXIgbWVtb3J5LiAgVW5sZXNzIHRoaXMgaXMgQU1EIGVycmF0dW0gIzkzLCB3aGljaFxuMTIzNDpcdFx0XHQgKiBjb3JydXB0cyBSSVAgc3VjaCB0aGF0IGl0IGxvb2tzIGxpa2UgYSB1c2VyIGFkZHJlc3MsXG4xMjM1Olx0XHRcdCAqIHRoaXMgaXMgdW5yZWNvdmVyYWJsZS4gIERvbiYjMzk7dCBldmVuIHRyeSB0byBsb29rIHVwIHRoZVxuMTIzNjpcdFx0XHQgKiBWTUEgb3IgbG9vayBmb3IgZXh0YWJsZSBlbnRyaWVzLlxuMTIzNzpcdFx0XHQgKi9cbjEyMzg6XHRcdFx0aWYgKGlzX2VycmF0YTkzKHJlZ3MsIGFkZHJlc3MpKVxuMTIzOTpcdFx0XHRcdHJldHVybjtcbjEyNDA6XHRcbjEyNDE6XHRcdFx0cGFnZV9mYXVsdF9vb3BzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpO1xuMTI0MjpcdFx0XHRyZXR1cm47XG4xMjQzOlx0XHR9XG4xMjQ0Olx0XG4xMjQ1Olx0XHQvKiBrcHJvYmVzIGRvbiYjMzk7dCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0czogKi9cbjEyNDY6XHRcdGlmIChXQVJOX09OX09OQ0Uoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgWDg2X1RSQVBfUEYpKSlcbjEyNDc6XHRcdFx0cmV0dXJuO1xuMTI0ODpcdFxuMTI0OTpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgbGl0dGxlIGludmVzdGlnYXRpb246CgoqKkludmVzdGlnYXRpbmcgYGxvY2tfdm1hX3VuZGVyX3JjdWAgaW4gYG1tL21tYXBfbG9jay5jYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGxvY2tfdm1hX3VuZGVyX3JjdWAgd2l0aGluIGBtbS9tbWFwX2xvY2suY2AuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGF0IGZ1bmN0aW9uIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBhdHRhY2hlZCB0byBpdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBgI2lmZGVmIENPTkZJR18uLi5gIG1hY3JvcyBzdXJyb3VuZGluZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBpdHMgdXNhZ2UuIFRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdvdWxkIGltbWVkaWF0ZWx5IHRlbGwgbWUgaWYgaXRzIGJlaGF2aW9yIG9yIGV2ZW4gaXRzIHZlcnkgZXhpc3RlbmNlIGlzIHRpZWQgdG8gc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBhIHF1aWNrIHNjYW4gZm9yIHRob3NlIGRpcmVjdGl2ZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcG9ydGFiaWxpdHkgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBsb2NrIGJlaGF2aW9yIGlzIHVuaXZlcnNhbCBvciBpZiBpdCYjMzk7cyBzcGVjaWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbWFwX2xvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0ICogc3RhYmxlIGFuZCBub3QgaXNvbGF0ZWQuIElmIHRoZSBWTUEgaXMgbm90IGZvdW5kIG9yIGlzIGJlaW5nIG1vZGlmaWVkIHRoZVxuIDI5MTpcdCAqIGZ1bmN0aW9uIHJldHVybnMgTlVMTC5cbiAyOTI6XHQgKi9cbiAyOTM6XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiAyOTQ6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4gMjk1Olx0e1xuIDI5NjpcdFx0TUFfU1RBVEUobWFzLCBcdTAwMjZtbS1cdTAwM2VtbV9tdCwgYWRkcmVzcywgYWRkcmVzcyk7XG4gMjk3Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAyOTg6XHRcbiAyOTk6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTU1VKSlcbiAzMDA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzAxOlx0cmV0cnk6XG4gMzAyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzAzOlx0XHR2bWEgPSBtYXNfd2FsayhcdTAwMjZtYXMpO1xuIDMwNDpcdFx0aWYgKCF2bWEpIHtcbiAzMDU6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzA2Olx0XHRcdGdvdG8gaW52YWw7XG4gMzA3Olx0XHR9XG4gMzA4Olx0XG4gMzA5Olx0XHR2bWEgPSB2bWFfc3RhcnRfcmVhZChtbSwgdm1hKTtcbiAzMTA6XHRcdGlmIChJU19FUlJfT1JfTlVMTCh2bWEpKSB7XG4gMzExOlx0XHRcdC8qIENoZWNrIGlmIHRoZSBWTUEgZ290IGlzb2xhdGVkIGFmdGVyIHdlIGZvdW5kIGl0ICovXG4gMzEyOlx0XHRcdGlmIChQVFJfRVJSKHZtYSkgPT0gLUVBR0FJTikge1xuIDMxMzpcdFx0XHRcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX01JU1MpO1xuIDMxNDpcdFx0XHRcdC8qIFRoZSBhcmVhIHdhcyByZXBsYWNlZCB3aXRoIGFub3RoZXIgb25lICovXG4gMzE1Olx0XHRcdFx0bWFzX3NldChcdTAwMjZtYXMsIGFkZHJlc3MpO1xuIDMxNjpcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMzE3Olx0XHRcdH1cbiAzMTg6XHRcbiAzMTk6XHRcdFx0LyogRmFpbGVkIHRvIGxvY2sgdGhlIFZNQSAqL1xuIDMyMDpcdFx0XHRnb3RvIGludmFsO1xuIDMyMTpcdFx0fVxuIDMyMjpcdFx0LypcbiAzMjM6XHRcdCAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBzdGFibGUgcmVmZXJlbmNlIHRvIGEgVk1BOiBUaGUgVk1BIGlzXG4gMzI0Olx0XHQgKiBsb2NrZWQgYW5kIHdlIGtub3cgaXQgaGFzbiYjMzk7dCBhbHJlYWR5IGJlZW4gaXNvbGF0ZWQuXG4gMzI1Olx0XHQgKiBGcm9tIGhlcmUgb24sIHdlIGNhbiBhY2Nlc3MgdGhlIFZNQSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHdoaWNoXG4gMzI2Olx0XHQgKiBmaWVsZHMgYXJlIGFjY2Vzc2libGUgZm9yIFJDVSByZWFkZXJzLlxuIDMyNzpcdFx0ICovXG4gMzI4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTIKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZ1enppbmcgUG90ZW50aWFsIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBgQ09ORklHX01NVWAgaXMgYSBnaXZlbiBvbiB4ODYvYW1kNjQ7IHRoYXQmIzM5O3Mgc3RhbmRhcmQuIE5vIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGp1bXBpbmcgb3V0LiBJIGRpZCBhIHF1aWNrIGNoZWNrLCBhbmQgYFBFUl9WTUFfTE9DS19TVEFUU2AgaXMganVzdCBkZWJ1ZyBmbHVmZiwgc28gd2UgY2FuIGlnbm9yZSB0aGF0LiBJIGRvbiYjMzk7dCBzZWUgYW55IGRlcGVuZGVuY3kgb24gYFBFUl9WTUFfTE9DS2AuIFNpbmNlIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHdpdGggYW4gTU1VIGhhdmUgdGhpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGBFbmFibGVDb25maWdzYCByZW1haW5zIGFuIGVtcHR5IGFycmF5IChgW11gKS4KCk5vdywgdGhlIGNydWNpYWwgYml0OiBgV29ydGhGdXp6aW5nYC4gVGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb2RlIGluIGBtbS9mYXVsdC5jYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgeDg2LXNwZWNpZmljIGB4ODYvbW0vZmF1bHQuY2AsIGlzIG1vZGlmaWVkLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgYmVjYXVzZSB0aGUgY2hhbmdlIGFsdGVycyB0aGUgcmV0cnkgbG9naWMgaW4gdGhlIHBlci1WTUEgbG9ja2VkIGZhdWx0cywgcmV0cnlpbmcgYGxvY2tfdm1hYCBvbmNlIHdoZW4gYFZNX0ZBVUxUX1JFVFJZYCBpcyByZXR1cm5lZC4gQ3J1Y2lhbGx5LCB0aGlzIGFmZmVjdHMgZXhlY3V0YWJsZSBjb2RlLCBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvbiBhbWQ2NC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0LCBgRm9jdXNTeW1ib2xzYC4gVGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBhdm9pZCBkaWx1dGlvbi4gVGhlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSBhbGwgKmFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIGZhdWx0IGhhbmRsZXJzKiBsaWtlIGBkb191c2VyX2FkZHJfZmF1bHRgIGFuZCBgZG9fcGFnZV9mYXVsdGAuIFJlbWVtYmVyIHRoZSBleHBsaWNpdCBpbnN0cnVjdGlvbjogKmF2b2lkKiB0aGUgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiBMaXN0aW5nIGZ1bmN0aW9ucyBsaWtlIHRoZXNlIHdvdWxkIGVzc2VudGlhbGx5IGZsYWcgKmV2ZXJ5KiB0ZXN0IHByb2dyYW0sIGFzIHRoZXNlIGFyZSBmb3VuZGF0aW9uYWwgZnVuY3Rpb25zLiBUaGV5IGFyZSBjYWxsZWQgYnkgdmlydHVhbGx5IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cy4gSW5jbHVkaW5nIGBkb191c2VyX2FkZHJfZmF1bHRgIG9yIGV2ZW4gYGxvY2tfdm1hX3VuZGVyX3JjdWAgd2lsbCBkaWx1dGUgdGhlIGZ1enppbmcuIFRoaXMgd291bGQgYmUgYSBkaXNhc3Rlci4gVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBtdXN0IGJlIGVtcHR5IChgW11gKS4KClRvIHJlY2FwLCBgRW5hYmxlQ29uZmlnc2AgcmVtYWlucyBlbXB0eSBhcyBgQ09ORklHX01NVWAgaXMgc3RhbmRhcmQsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLgoKVGltZSBmb3IgYSBzYW5pdHkgY2hlY2sgb24gdGhlIG91dHB1dCBwYXJhbWV0ZXJzLgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBSZWFzb25pbmdgOiBXZSBoYXZlIGEgY2xlYXIsIGNvbmNpc2UganVzdGlmaWNhdGlvbiBmb3IgdGhlIGZ1enppbmcsIGFuZCB3aHkgd2UgYXJlIGdvaW5nIHRvIGV4Y2x1ZGUgYEZvY3VzU3ltYm9sc2AgYmFzZWQgb24gdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzCiogICBgRm9jdXNTeW1ib2xzYDogW10KKiAgIGBFbmFibGVDb25maWdzYDogW10KCkFscmlnaHQsIGxvb2tzIGdvb2QuIFRpbWUgdG8gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb250cm9sIGZsb3cgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGluY2x1ZGluZyBhcmNoL3g4Ni9tbS9mYXVsdC5jIGZvciBhbWQ2NCkgdG8gcmV0cnkgYWNxdWlyaW5nIHRoZSBwZXItVk1BIGxvY2sgdW5kZXIgUkNVIG9uY2UgdXBvbiByZWNlaXZpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byB0YWtpbmcgdGhlIG1tYXAgbG9jay4gVGhpcyBhbHRlcnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiByZWFjaGFibGUgY29kZSBhbmQgd2FycmFudHMgZnV6emluZy4gRm9jdXNTeW1ib2xzIGlzIGxlZnQgZW1wdHkgdG8gcHJldmVudCBmdXp6aW5nIGRpbHV0aW9uLCBhcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKGRvX3VzZXJfYWRkcl9mYXVsdCkgaXMgYW4gYXJjaGl0ZWN0dXJlIHBhZ2UgZmF1bHQgaGFuZGxlciBleGVjdXRlZCB1YmlxdWl0b3VzbHkgYnkgdXNlcnNwYWNlIHdvcmtsb2Fkcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW5nbGUtcmV0cnkgbWVjaGFuaXNtIGZvciBwZXItVk1BIGxvY2tlZCBwYWdlIGZhdWx0cyBhY3Jvc3MgdmFyaW91cyBhcmNoaXRlY3R1cmVzIChhcm0sIGFybTY0LCBsb29uZ2FyY2gsIHBvd2VycGMsIHJpc2N2LCBzMzkwLCB4ODYpIHdoZW4gaGFuZGxpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byBtbWFwX2xvY2suIFRoZSBhZGRlZCBsb2NhbCBib29sZWFuIHZhcmlhYmxlICh2bWFfbG9ja19yZXRyaWVkKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIHRoZSBzdGFjayBpbiBlYWNoIGFyY2hpdGVjdHVyZSYjMzk7cyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMDAwNjJjNmRkZDc4YTFjZmRjOGYxMWMzNjcwN2I0MzM5ZGYwN2I4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDM6MTM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCAwYTA5ZDRmZjc3MTg1Li43MDQ3Mjc0NGY1YzVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTM0NCw2ICYjNDM7MzQ0LDcgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCXZtX2ZhdWx0X3QgZmF1bHQ7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSBWTV9BQ0NFU1NfRkxBR1M7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGZzcikpCiAJCXJldHVybiAwOwpAQCAtMzk1LDYgJiM0MzszOTYsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTQyNCw2ICYjNDM7NDI2LDEyIEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJCWdvdG8gbm9fY29udGV4dDsKIAkJcmV0dXJuIDA7CiAJfQomIzQzOwomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiByZXRyeToKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwppbmRleCA3NWMzZTQ2M2RmMmVmLi5jN2ZkNmY0ODViMTYxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jCkBAIC02MTQsNiAmIzQzOzYxNCw3IEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCWludCBzaV9jb2RlOwogCWludCBwa2V5ID0gLTE7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGVzcikpCiAJCXJldHVybiAwOwpAQCAtNjgyLDYgJiM0Mzs2ODMsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwKIAlpZiAoIShtbV9mbGFncyAmYW1wOyBGQVVMVF9GTEFHX1VTRVIpKQogCQlnb3RvIGxvY2tfbW1hcDsKIAomIzQzO2xvY2tfdm1hOgogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7CiAJaWYgKCF2bWEpCiAJCWdvdG8gbG9ja19tbWFwOwpAQCAtNzI4LDYgJiM0Mzs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsCiAJCQlnb3RvIG5vX2NvbnRleHQ7CiAJCXJldHVybiAwOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jIGIvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYwppbmRleCAyYzkzZDMzMzU2ZTU3Li5lZjZlYTg0N2IxZTA1IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMKQEAgLTE4MSw2ICYjNDM7MTgxLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0mZ3Q7bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMOwogCXZtX2ZhdWx0X3QgZmF1bHQ7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJaWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtJmd0O3RocmVhZC50cmFwX25yKSkKIAkJcmV0dXJuOwpAQCAtMjE5LDYgJiM0MzsyMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0yNjUsNiAmIzQzOzI2NywxMiBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJbm9fY29udGV4dChyZWdzLCB3cml0ZSwgYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCA4MDZjNzRlMGQ1YWI3Li4wNjAxOGI2ZDcwODZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtNDIyLDYgJiM0Mzs0MjIsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlpbnQgaXNfd3JpdGUgPSBwYWdlX2ZhdWx0X2lzX3dyaXRlKGVycm9yX2NvZGUpOwogCXZtX2ZhdWx0X3QgZmF1bHQsIG1ham9yID0gMDsKIAlib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTsKJiM0MzsJYm9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7CiAKIAlpZiAodW5saWtlbHkoZGVidWdnZXJfZmF1bHRfaGFuZGxlcihyZWdzKSB8fCBrcHJvYmVfZmF1bHQpKQogCQlyZXR1cm4gMDsKQEAgLTQ4Nyw2ICYjNDM7NDg4LDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTUxNyw2ICYjNDM7NTE5LDExIEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCWlmIChmYXVsdF9zaWduYWxfcGVuZGluZyhmYXVsdCwgcmVncykpCiAJCXJldHVybiB1c2VyX21vZGUocmVncykgPyAwIDogU0lHQlVTOwogCiYjNDM7CWlmICghdm1hX2xvY2tfcmV0cmllZCkgewomIzQzOwkJdm1hX2xvY2tfcmV0cmllZCA9IHRydWU7CiYjNDM7CQlnb3RvIGxvY2tfdm1hOwomIzQzOwl9CiYjNDM7CiBsb2NrX21tYXA6CiAKIAkvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vZmF1bHQuYyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuYwppbmRleCAwNGVkNmY4YWNhZTRmLi5mZjg2MTc5M2RiYTk3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jCkBAIC0yODQsNiAmIzQzOzI4NCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUOwogCWludCBjb2RlID0gU0VHVl9NQVBFUlI7CiAJdm1fZmF1bHRfdCBmYXVsdDsKJiM0MzsJYm9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7CiAKIAljYXVzZSA9IHJlZ3MtJmd0O2NhdXNlOwogCWFkZHIgPSByZWdzLSZndDtiYWRhZGRyOwpAQCAtMzQ3LDYgJiM0MzszNDgsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCWlmICghKGZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVVNFUikpCiAJCWdvdG8gbG9ja19tbWFwOwogCiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0zNzYsNiAmIzQzOzM3OCwxMiBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQkJbm9fY29udGV4dChyZWdzLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsKJiM0MzsJaWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7CiYjNDM7CQl2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTsKJiM0MzsJCWdvdG8gbG9ja192bWE7CiYjNDM7CX0KJiM0MzsKIGxvY2tfbW1hcDoKIAogcmV0cnk6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0yNzEsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcykKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdm1fZmF1bHRfdCBmYXVsdDsKIAlib29sIGlzX3dyaXRlOwomIzQzOwlib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTsKIAogCS8qCiAJICogVGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZSBwcm9ncmFtIGNoZWNrIGhhcwpAQCAtMjk0LDYgJiM0MzsyOTUsNyBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpCiAJCWZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiYjNDM7bG9ja192bWE6CiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXZtYSkKIAkJZ290byBsb2NrX21tYXA7CkBAIC0zMTgsNiAmIzQzOzMyMCwxMCBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpCiAJCQloYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApOwogCQlyZXR1cm47CiAJfQomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQogbG9ja19tbWFwOgogcmV0cnk6CiAJdm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHJlc3MsIHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC0xMjIyLDYgJiM0MzsxMjIyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdm1fZmF1bHRfdCBmYXVsdDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7CiYjNDM7CWJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlOwogCiAJdHNrID0gY3VycmVudDsKIAltbSA9IHRzay0mZ3Q7bW07CkBAIC0xMzMxLDYgJiM0MzsxMzMyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJaWYgKCEoZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19VU0VSKSkKIAkJZ290byBsb2NrX21tYXA7CiAKJiM0Mztsb2NrX3ZtYToKIAl2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpOwogCWlmICghdm1hKQogCQlnb3RvIGxvY2tfbW1hcDsKQEAgLTEzNjAsNiAmIzQzOzEzNjIsMTIgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJCQkgQVJDSF9ERUZBVUxUX1BLRVkpOwogCQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwlpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHsKJiM0MzsJCXZtYV9sb2NrX3JldHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byBsb2NrX3ZtYTsKJiM0MzsJfQomIzQzOwogbG9ja19tbWFwOgogCiByZXRyeToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBQYWdlIEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGFuZCBicm9hZGx5LCBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyDigJMgYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2IOKAkyB0aGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2NvcGUuIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGNvbW1vbmFsaXR5OyB0aGUgY29yZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgaXQgaGFuZGxlcyBwZXItVk1BIGxvY2tzIGR1cmluZyBhIHBhZ2UgZmF1bHQsIHdpdGggYSByZXRyeSBtZWNoYW5pc20gYmVpbmcgaW50cm9kdWNlZCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBsb2NrX3ZtYV91bmRlcl9yY3VgIGluc2lkZSBvZiBmdW5jdGlvbnMgbGlrZSBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvciBwb3RlbnRpYWxseSBgZG9fcGFnZV9mYXVsdGAuCgpJIHdhbnQgdG8gc2VlIHRoaXMgaW4gYWN0aW9uLiBHaXZlbiB0aGUgdWJpcXVpdHkgb2YgeDg2LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgYXJjaC94ODYvbW0vZmF1bHQuY2AuIFRoZSBjb2RlIGFyb3VuZCBsaW5lIDEzMzAgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3LiBJJiMzOTtsbCByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIGluIHRoYXQgZmlsZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgYGxvY2tfdm1hX3VuZGVyX3JjdWAgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG9ja2luZyB3b3Jrcy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IHRoaXMgY291bGQgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9mYXVsdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XHQgKiBUaGUgdnN5c2NhbGwgcGFnZSBkb2VzIG5vdCBoYXZlIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTUEsIHNvIGRvIHRoaXNcbjEzMjE6XHRcdCAqIGVtdWxhdGlvbiBiZWZvcmUgd2UgZ28gc2VhcmNoaW5nIGZvciBWTUFzLlxuMTMyMjpcdFx0ICpcbjEzMjM6XHRcdCAqIFBLUlUgbmV2ZXIgcmVqZWN0cyBpbnN0cnVjdGlvbiBmZXRjaGVzLCBzbyB3ZSBkb24mIzM5O3QgbmVlZFxuMTMyNDpcdFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cbjEzMjU6XHRcdCAqL1xuMTMyNjpcdFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XG4xMzI3Olx0XHRcdGlmIChlbXVsYXRlX3ZzeXNjYWxsX3BmKGVycm9yX2NvZGUsIHJlZ3MsIGFkZHJlc3MpKVxuMTMyODpcdFx0XHRcdHJldHVybjtcbjEzMjk6XHRcdH1cbjEzMzA6XHQjZW5kaWZcbjEzMzE6XHRcbjEzMzI6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuMTMzMzpcdFx0XHRnb3RvIGxvY2tfbW1hcDtcbjEzMzQ6XHRcbjEzMzU6XHRsb2NrX3ZtYTpcbjEzMzY6XHRcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4xMzM3Olx0XHRpZiAoIXZtYSlcbjEzMzg6XHRcdFx0Z290byBsb2NrX21tYXA7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAodW5saWtlbHkoYWNjZXNzX2Vycm9yKGVycm9yX2NvZGUsIHZtYSkpKSB7XG4xMzQxOlx0XHRcdGJhZF9hcmVhX2FjY2Vzc19lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzLCBOVUxMLCB2bWEpO1xuMTM0MjpcdFx0XHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcbjEzNDM6XHRcdFx0cmV0dXJuO1xuMTM0NDpcdFx0fVxuMTM0NTpcdFx0ZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyZXNzLCBmbGFncyB8IEZBVUxUX0ZMQUdfVk1BX0xPQ0ssIHJlZ3MpO1xuMTM0NjpcdFx0aWYgKCEoZmF1bHQgXHUwMDI2IChWTV9GQVVMVF9SRVRSWSB8IFZNX0ZBVUxUX0NPTVBMRVRFRCkpKVxuMTM0NzpcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbjEzNDg6XHRcbjEzNDk6XHRcdGlmICghKGZhdWx0IFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcbjEzNTA6XHRcdFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfU1VDQ0VTUyk7XG4xMzUxOlx0XHRcdGdvdG8gZG9uZTtcbjEzNTI6XHRcdH1cbjEzNTM6XHRcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1JFVFJZKTtcbjEzNTQ6XHRcdGlmIChmYXVsdCBcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXG4xMzU1Olx0XHRcdGZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XG4xMzU2Olx0XG4xMzU3Olx0XHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xuMTM1ODpcdFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xuMTM1OTpcdFx0XHRpZiAoIXVzZXJfbW9kZShyZWdzKSlcbjEzNjA6XHRcdFx0XHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcbjEzNjE6XHRcdFx0XHRcdFx0XHQgU0lHQlVTLCBCVVNfQURSRVJSLFxuMTM2MjpcdFx0XHRcdFx0XHRcdCBBUkNIX0RFRkFVTFRfUEtFWSk7XG4xMzYzOlx0XHRcdHJldHVybjtcbjEzNjQ6XHRcdH1cbjEzNjU6XHRcbjEzNjY6XHRcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuMTM2NzpcdFx0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbjEzNjg6XHRcdFx0Z290byBsb2NrX3ZtYTtcbjEzNjk6XHRcdH1cbjEzNzA6XHRcbjEzNzE6XHRsb2NrX21tYXA6XG4xMzcyOlx0XG4xMzczOlx0cmV0cnk6XG4xMzc0Olx0XHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XG4xMzc1Olx0XHRpZiAodW5saWtlbHkoIXZtYSkpIHtcbjEzNzY6XHRcdFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XG4xMzc3Olx0XHRcdHJldHVybjtcbjEzNzg6XHRcdH1cbjEzNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5MAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA3NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTmVlZHNLTVNBTiA9IGZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIHJldHJ5IGxvZ2ljIHdoZW4gZGVhbGluZyB3aXRoIHBlci1WTUEgbG9ja3MuIFRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYSBgdm1hX2xvY2tfcmV0cmllZGAgZmxhZyBhbmQgYWx0ZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBzbyB0aGF0IGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgZmFsbGluZyBiYWNrIHRvIGBsb2NrX21tYXBgIGFmdGVyIGEgYFZNX0ZBVUxUX1JFVFJZYCwgaXQgYXR0ZW1wdHMgYGxvY2tfdm1hYCBvbmUgbW9yZSB0aW1lIGlmIHRoZSBmbGFnIGlzbiYjMzk7dCBzZXQuIFRoaXMgY2hhbmdlIGltcGFjdHMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBQb3dlclBDLCBSSVNDLVYsIFMzOTAsIGFuZCB4ODYpLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBLTVNBTiB0ZXN0aW5nLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBLTVNBTiBpcyByZXNlcnZlZCBmb3Igc2NlbmFyaW9zIHdoZXJlIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU28sIGxldCYjMzk7cyBhbmFseXplOgoKRmlyc3QsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gZXZpZGVuY2Ugb2YgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggd291bGQgYmUgYSBiaWcgcmVkIGZsYWcuIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzLCBhbmQgd2UmIzM5O3JlIG5vdCB0b3VjaGluZyBhbnkgc2hhcmVkIGtlcm5lbCBzdHJ1Y3R1cmVzLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5ldyBzdHJ1Y3QgZmllbGRzLCBvciBidWZmZXJzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgYHZtYV9sb2NrX3JldHJpZWRgIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBldmVyeSBhcmNoaXRlY3R1cmUmIzM5O3MgY29kZS4gVGhpcyBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyAqcHVyZWx5KiBjb25jZXJuZWQgd2l0aCBjb250cm9sIGZsb3cgYXJvdW5kIGxvY2tpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByZWZpbmluZyB0aGUgcmV0cnkgbWVjaGFuaXNtLiBUaGUgY29uY2VybnMgaGVyZSBhcmUgdGhpbmdzIGxpa2UgZGVhZGxvY2tzLCBpbmZpbml0ZSBsb29wcywgbG9ja2luZyBpbmNvbnNpc3RlbmNpZXMsIGFuZCByYWNlIGNvbmRpdGlvbnMuIEJ1dCwgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSB0cmFkaXRpb25hbGx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHJ1bnRpbWUgdGVzdGluZywgbm90IEtNU0FOLgoKTG9va2luZyBhdCB0aGUgS01TQU4gcnVsZXM6IFRoZSBrZXkgcG9pbnQgaXMgdGhhdCB3ZSAqc2hvdWxkbiYjMzk7dCogcnVuIEtNU0FOIGlmIGEgYnVnIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgZGV0ZWN0b3JzLiBXZSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0ICphbGwqIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYmVpbmcgcmVhZCBvciBjb3BpZWQuIE5vbmUgb2YgdGhlc2UgcnVsZXMgYXJlIHZpb2xhdGVkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSByaXNrcywgdGhlcmVmb3JlIG5vIGluZm9ybWF0aW9uIGxlYWtzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgY2hhbmdlcyBhY3Jvc3MgYWxsIGFmZmVjdGVkIGFyY2hpdGVjdHVyZXMuIEluIGVhY2ggY2FzZSwgYHZtYV9sb2NrX3JldHJpZWRgIGlzIGEgcHJvcGVybHkgaW5pdGlhbGl6ZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cywgYW5kIHRoZSBwcmltYXJ5IGxvZ2ljIGFkanVzdHMgcGVyLVZNQSBsb2NrIGF0dGVtcHRzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYG1tYXBfbG9ja2AuIFRoaXMgaXMgYWxsIGdvb2QhCgpTbywgaW4gbXkgcHJvZmVzc2lvbmFsIG9waW5pb24sIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhhdCYjMzk7cyB0aGF0LiBOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW5nbGUtcmV0cnkgbWVjaGFuaXNtIGZvciBwZXItVk1BIGxvY2tlZCBwYWdlIGZhdWx0cyBhY3Jvc3MgdmFyaW91cyBhcmNoaXRlY3R1cmVzIChhcm0sIGFybTY0LCBsb29uZ2FyY2gsIHBvd2VycGMsIHJpc2N2LCBzMzkwLCB4ODYpIHdoZW4gaGFuZGxpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byBtbWFwX2xvY2suIFRoZSBhZGRlZCBsb2NhbCBib29sZWFuIHZhcmlhYmxlICh2bWFfbG9ja19yZXRyaWVkKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIHRoZSBzdGFjayBpbiBlYWNoIGFyY2hpdGVjdHVyZSYjMzk7cyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUmIzM5O3MgcGFnZSBmYXVsdCBoYW5kbGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMsIGFsdGVyIGJ1ZmZlciBib3VuZHMsIG9yIHJlYWQgdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgbG9ja2luZyBzYW5pdGl6ZXJzIChlLmcuLCBMT0NLREVQKSBvciBLQVNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxMzo0MC4zODYxMzUyOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA4MzUyNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUncyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgY29udHJvbCBmbG93IGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChpbmNsdWRpbmcgYXJjaC94ODYvbW0vZmF1bHQuYyBmb3IgYW1kNjQpIHRvIHJldHJ5IGFjcXVpcmluZyB0aGUgcGVyLVZNQSBsb2NrIHVuZGVyIFJDVSBvbmNlIHVwb24gcmVjZWl2aW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gdGFraW5nIHRoZSBtbWFwIGxvY2suIFRoaXMgYWx0ZXJzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGxvY2tpbmcgYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcuIEZvY3VzU3ltYm9scyBpcyBsZWZ0IGVtcHR5IHRvIHByZXZlbnQgZnV6emluZyBkaWx1dGlvbiwgYXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIChkb191c2VyX2FkZHJfZmF1bHQpIGlzIGFuIGFyY2hpdGVjdHVyZSBwYWdlIGZhdWx0IGhhbmRsZXIgZXhlY3V0ZWQgdWJpcXVpdG91c2x5IGJ5IHVzZXJzcGFjZSB3b3JrbG9hZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjEzOjQwLjM4NjE0MTI3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyODAxMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDAwMDYyYzZkZGQ3OGExY2ZkYzhmMTFjMzY3MDdiNDMzOWRmMDdiOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzoxMzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuY1xcbmluZGV4IDBhMDlkNGZmNzcxODUuLjcwNDcyNzQ0ZjVjNWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuY1xcbisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LmNcXG5AQCAtMzQ0LDYgKzM0NCw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0dm1fZmF1bHRfdCBmYXVsdDtcXG4gXFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xcbiBcXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fQUNDRVNTX0ZMQUdTO1xcbitcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBmc3IpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMzk1LDYgKzM5Niw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTQyNCw2ICs0MjYsMTIgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRcXHRnb3RvIG5vX2NvbnRleHQ7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG4rXFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuK1xcdFxcdGdvdG8gbG9ja192bWE7XFxuK1xcdH1cXG4rXFxuIGxvY2tfbW1hcDpcXG4gXFxuIHJldHJ5OlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcXG5pbmRleCA3NWMzZTQ2M2RmMmVmLi5jN2ZkNmY0ODViMTYxIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xcbkBAIC02MTQsNiArNjE0LDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRpbnQgc2lfY29kZTtcXG4gXFx0aW50IHBrZXkgPSAtMTtcXG4rXFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgZXNyKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTY4Miw2ICs2ODMsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4gXFx0aWYgKCEobW1fZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTcyOCw2ICs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuIFxcdFxcdFxcdGdvdG8gbm9fY29udGV4dDtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4rXFxuK1xcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbitcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG4rXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4rXFx0fVxcbitcXG4gbG9ja19tbWFwOlxcbiBcXG4gcmV0cnk6XFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXFxuaW5kZXggMmM5M2QzMzM1NmU1Ny4uZWY2ZWE4NDdiMWUwNSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuY1xcbkBAIC0xODEsNiArMTgxLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuK1xcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtXFx1MDAzZXRocmVhZC50cmFwX25yKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yMTksNiArMjIwLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTI2NSw2ICsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0XFx0XFx0bm9fY29udGV4dChyZWdzLCB3cml0ZSwgYWRkcmVzcyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuK1xcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIGxvY2tfdm1hO1xcbitcXHR9XFxuK1xcbiBsb2NrX21tYXA6XFxuIFxcbiByZXRyeTpcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xcbmluZGV4IDgwNmM3NGUwZDVhYjcuLjA2MDE4YjZkNzA4NmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xcbkBAIC00MjIsNiArNDIyLDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdGludCBpc193cml0ZSA9IHBhZ2VfZmF1bHRfaXNfd3JpdGUoZXJyb3JfY29kZSk7XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQsIG1ham9yID0gMDtcXG4gXFx0Ym9vbCBrcHJvYmVfZmF1bHQgPSBrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCAxMSk7XFxuK1xcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykgfHwga3Byb2JlX2ZhdWx0KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTQ4Nyw2ICs0ODgsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gXFxuK2xvY2tfdm1hOlxcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuQEAgLTUxNyw2ICs1MTksMTEgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdGlmIChmYXVsdF9zaWduYWxfcGVuZGluZyhmYXVsdCwgcmVncykpXFxuIFxcdFxcdHJldHVybiB1c2VyX21vZGUocmVncykgPyAwIDogU0lHQlVTO1xcbiBcXG4rXFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuK1xcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIGxvY2tfdm1hO1xcbitcXHR9XFxuK1xcbiBsb2NrX21tYXA6XFxuIFxcbiBcXHQvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXFxuaW5kZXggMDRlZDZmOGFjYWU0Zi4uZmY4NjE3OTNkYmE5NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG5AQCAtMjg0LDYgKzI4NCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcXG4gXFx0aW50IGNvZGUgPSBTRUdWX01BUEVSUjtcXG4gXFx0dm1fZmF1bHRfdCBmYXVsdDtcXG4rXFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuIFxcbiBcXHRjYXVzZSA9IHJlZ3MtXFx1MDAzZWNhdXNlO1xcbiBcXHRhZGRyID0gcmVncy1cXHUwMDNlYmFkYWRkcjtcXG5AQCAtMzQ3LDYgKzM0OCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcXG4gXFx0XFx0Z290byBsb2NrX21tYXA7XFxuIFxcbitsb2NrX3ZtYTpcXG4gXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcXG4gXFx0aWYgKCF2bWEpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbkBAIC0zNzYsNiArMzc4LDEyIEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuK1xcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIGxvY2tfdm1hO1xcbitcXHR9XFxuK1xcbiBsb2NrX21tYXA6XFxuIFxcbiByZXRyeTpcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xcbmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xcbkBAIC0yNzEsNiArMjcxLDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuIFxcdGJvb2wgaXNfd3JpdGU7XFxuK1xcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZSBwcm9ncmFtIGNoZWNrIGhhc1xcbkBAIC0yOTQsNiArMjk1LDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxcbiBcXHRcXHRmbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbitsb2NrX3ZtYTpcXG4gXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG4gXFx0aWYgKCF2bWEpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbkBAIC0zMTgsNiArMzIwLDEwIEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcXG4gXFx0XFx0XFx0aGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbitcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG4rXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4rXFx0fVxcbiBsb2NrX21tYXA6XFxuIHJldHJ5OlxcbiBcXHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jXFxuaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuY1xcbkBAIC0xMjIyLDYgKzEyMjIsNyBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuIFxcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcXG4rXFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuIFxcbiBcXHR0c2sgPSBjdXJyZW50O1xcbiBcXHRtbSA9IHRzay1cXHUwMDNlbW07XFxuQEAgLTEzMzEsNiArMTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuIFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbiBcXG4rbG9ja192bWE6XFxuIFxcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XFxuIFxcdGlmICghdm1hKVxcbiBcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG5AQCAtMTM2MCw2ICsxMzYyLDEyIEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4rXFxuK1xcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbitcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG4rXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4rXFx0fVxcbitcXG4gbG9ja19tbWFwOlxcbiBcXG4gcmV0cnk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjEzOjQwLjg3OTcwNjE0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzM2MDkyNDEwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwMDA2MmM2ZGRkNzhhMWNmZGM4ZjExYzM2NzA3YjQzMzlkZjA3YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzoxMzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jXG5pbmRleCAwYTA5ZDRmZjc3MTg1Li43MDQ3Mjc0NGY1YzVhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuY1xuQEAgLTM0NCw2ICszNDQsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuIFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0FDQ0VTU19GTEFHUztcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGZzcikpXG4gXHRcdHJldHVybiAwO1xuQEAgLTM5NSw2ICszOTYsNyBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTQyNCw2ICs0MjYsMTIgQEAgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRcdGdvdG8gbm9fY29udGV4dDtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4rXG4rXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbitcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gbG9ja192bWE7XG4rXHR9XG4rXG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuaW5kZXggNzVjM2U0NjNkZjJlZi4uYzdmZDZmNDg1YjE2MSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5AQCAtNjE0LDYgKzYxNCw3IEBAIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgc2lfY29kZTtcbiBcdGludCBwa2V5ID0gLTE7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBlc3IpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC02ODIsNiArNjgzLDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRpZiAoIShtbV9mbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTcyOCw2ICs3MzAsMTIgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRcdFx0Z290byBub19jb250ZXh0O1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbmluZGV4IDJjOTNkMzMzNTZlNTcuLmVmNmVhODQ3YjFlMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jXG5AQCAtMTgxLDYgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChrcHJvYmVfcGFnZV9mYXVsdChyZWdzLCBjdXJyZW50LVx1MDAzZXRocmVhZC50cmFwX25yKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIxOSw2ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC0yNjUsNiArMjY3LDEyIEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0bm9fY29udGV4dChyZWdzLCB3cml0ZSwgYWRkcmVzcyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xuaW5kZXggODA2Yzc0ZTBkNWFiNy4uMDYwMThiNmQ3MDg2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuY1xuQEAgLTQyMiw2ICs0MjIsNyBAQCBzdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdGludCBpc193cml0ZSA9IHBhZ2VfZmF1bHRfaXNfd3JpdGUoZXJyb3JfY29kZSk7XG4gXHR2bV9mYXVsdF90IGZhdWx0LCBtYWpvciA9IDA7XG4gXHRib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKHVubGlrZWx5KGRlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIocmVncykgfHwga3Byb2JlX2ZhdWx0KSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNDg3LDYgKzQ4OCw3IEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC01MTcsNiArNTE5LDExIEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSlcbiBcdFx0cmV0dXJuIHVzZXJfbW9kZShyZWdzKSA/IDAgOiBTSUdCVVM7XG4gXG4rXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbitcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gbG9ja192bWE7XG4rXHR9XG4rXG4gbG9ja19tbWFwOlxuIFxuIFx0LyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG5pbmRleCAwNGVkNmY4YWNhZTRmLi5mZjg2MTc5M2RiYTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbkBAIC0yODQsNiArMjg0LDcgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcbiBcdGludCBjb2RlID0gU0VHVl9NQVBFUlI7XG4gXHR2bV9mYXVsdF90IGZhdWx0O1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHRjYXVzZSA9IHJlZ3MtXHUwMDNlY2F1c2U7XG4gXHRhZGRyID0gcmVncy1cdTAwM2ViYWRhZGRyO1xuQEAgLTM0Nyw2ICszNDgsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC0zNzYsNiArMzc4LDEyIEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdFx0bm9fY29udGV4dChyZWdzLCBhZGRyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi5kY2QxYmEyNDQ5N2Y4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtMjcxLDYgKzI3MSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHRib29sIGlzX3dyaXRlO1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZSBwcm9ncmFtIGNoZWNrIGhhc1xuQEAgLTI5NCw2ICsyOTUsNyBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpXG4gXHRcdGZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTMxOCw2ICszMjAsMTAgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxuIFx0XHRcdGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbiBsb2NrX21tYXA6XG4gcmV0cnk6XG4gXHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkcmVzcywgcmVncyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmNcbmluZGV4IGFhODgzNzBjZTczOTQuLmRmMTBkNWNlYTRlZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jXG5AQCAtMTIyMiw2ICsxMjIyLDcgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdHRzayA9IGN1cnJlbnQ7XG4gXHRtbSA9IHRzay1cdTAwM2VtbTtcbkBAIC0xMzMxLDYgKzEzMzIsNyBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMTM2MCw2ICsxMzYyLDEyIEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0XHRcdCBBUkNIX0RFRkFVTFRfUEtFWSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxMzo0MC44Nzk3MDg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0MjE5Njk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBnaXZlbiBteSBiYWNrZ3JvdW5kLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBBTUQ2NCwgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgY29tbW9uIGFuZCB3ZWxsLXVuZGVyc3Rvb2QgcGxhdGZvcm0gZm9yIGV4cGxvaXRhdGlvbiByZXNlYXJjaC4gTm93LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBhY3R1YWxseSBkZWFsaW5nIHdpdGggaGVyZS5cblxuSG1tLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIEFjcm9zcyAqbXVsdGlwbGUqIGFyY2hpdGVjdHVyZXMsIG5vIGxlc3M6IEFSTSwgQVJNNjQsIExvb25nQXJjaCwgUG93ZXJQQywgUklTQy1WLCBTMzkwLCBhbmQsIGNydWNpYWxseSwgeDg2LiBUaGlzIG1ha2VzIHRoaW5ncyBtb3JlIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgdGhlIGtlcm5lbCdzIGZhdWx0IGhhbmRsaW5nIHJvdXRpbmVzIGlzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmVzdC4gRmF1bHQgaGFuZGxlcnMgYXJlIGFsd2F5cyBoaWdoLXZhbHVlIHRhcmdldHMsIGFzIHRoZXkncmUgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgb2Z0ZW4gdGhlIGVudHJ5IHBvaW50IGZvciBleHBsb2l0cy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gdG91Y2ggYGFyY2gveDg2L21tL2ZhdWx0LmNgLiBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCB4ODYgY29kZS4gSSdsbCBuZWVkIHRvIGV4dHJhY3QgYW55IGZvY3VzIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBMaW5lIDEzMzAgaXMgbWVudGlvbmVkLCBzbyBJIHdpbGwgbm93IGZvY3VzIG9uIHRoYXQgc2VjdGlvbi4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxMzo0NS4zMjE5MDczNjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vZmF1bHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdCAqIFRoZSB2c3lzY2FsbCBwYWdlIGRvZXMgbm90IGhhdmUgYSBcXFwicmVhbFxcXCIgVk1BLCBzbyBkbyB0aGlzXFxuMTMyMTpcXHRcXHQgKiBlbXVsYXRpb24gYmVmb3JlIHdlIGdvIHNlYXJjaGluZyBmb3IgVk1Bcy5cXG4xMzIyOlxcdFxcdCAqXFxuMTMyMzpcXHRcXHQgKiBQS1JVIG5ldmVyIHJlamVjdHMgaW5zdHJ1Y3Rpb24gZmV0Y2hlcywgc28gd2UgZG9uJ3QgbmVlZFxcbjEzMjQ6XFx0XFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cXG4xMzI1OlxcdFxcdCAqL1xcbjEzMjY6XFx0XFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XFxuMTMyNzpcXHRcXHRcXHRpZiAoZW11bGF0ZV92c3lzY2FsbF9wZihlcnJvcl9jb2RlLCByZWdzLCBhZGRyZXNzKSlcXG4xMzI4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMzI5OlxcdFxcdH1cXG4xMzMwOlxcdCNlbmRpZlxcbjEzMzE6XFx0XFxuMTMzMjpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuMTMzMzpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0bG9ja192bWE6XFxuMTMzNjpcXHRcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbjEzMzc6XFx0XFx0aWYgKCF2bWEpXFxuMTMzODpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM5OlxcdFxcbjEzNDA6XFx0XFx0aWYgKHVubGlrZWx5KGFjY2Vzc19lcnJvcihlcnJvcl9jb2RlLCB2bWEpKSkge1xcbjEzNDE6XFx0XFx0XFx0YmFkX2FyZWFfYWNjZXNzX2Vycm9yKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIE5VTEwsIHZtYSk7XFxuMTM0MjpcXHRcXHRcXHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcXG4xMzQzOlxcdFxcdFxcdHJldHVybjtcXG4xMzQ0OlxcdFxcdH1cXG4xMzQ1OlxcdFxcdGZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkcmVzcywgZmxhZ3MgfCBGQVVMVF9GTEFHX1ZNQV9MT0NLLCByZWdzKTtcXG4xMzQ2OlxcdFxcdGlmICghKGZhdWx0IFxcdTAwMjYgKFZNX0ZBVUxUX1JFVFJZIHwgVk1fRkFVTFRfQ09NUExFVEVEKSkpXFxuMTM0NzpcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0aWYgKCEoZmF1bHQgXFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcXG4xMzUwOlxcdFxcdFxcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1NVQ0NFU1MpO1xcbjEzNTE6XFx0XFx0XFx0Z290byBkb25lO1xcbjEzNTI6XFx0XFx0fVxcbjEzNTM6XFx0XFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfUkVUUlkpO1xcbjEzNTQ6XFx0XFx0aWYgKGZhdWx0IFxcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXFxuMTM1NTpcXHRcXHRcXHRmbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVEO1xcbjEzNTY6XFx0XFxuMTM1NzpcXHRcXHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xcbjEzNTg6XFx0XFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xcbjEzNTk6XFx0XFx0XFx0aWYgKCF1c2VyX21vZGUocmVncykpXFxuMTM2MDpcXHRcXHRcXHRcXHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcXG4xMzYxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTSUdCVVMsIEJVU19BRFJFUlIsXFxuMTM2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xcbjEzNjM6XFx0XFx0XFx0cmV0dXJuO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG4xMzY3OlxcdFxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbjEzNjg6XFx0XFx0XFx0Z290byBsb2NrX3ZtYTtcXG4xMzY5OlxcdFxcdH1cXG4xMzcwOlxcdFxcbjEzNzE6XFx0bG9ja19tbWFwOlxcbjEzNzI6XFx0XFxuMTM3MzpcXHRyZXRyeTpcXG4xMzc0OlxcdFxcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcXG4xMzc1OlxcdFxcdGlmICh1bmxpa2VseSghdm1hKSkge1xcbjEzNzY6XFx0XFx0XFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XFxuMTM3NzpcXHRcXHRcXHRyZXR1cm47XFxuMTM3ODpcXHRcXHR9XFxuMTM3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTM6NDUuMzIyMDI1Mjk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0MDQ1Njg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgcGVyLVZNQSBsb2NrIHJldHJpZXMgZHVyaW5nIHBhZ2UgZmF1bHRzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvcmUgYXJjaGl0ZWN0dXJlIGZhdWx0IGhhbmRsZXJzLiBJdCBsb29rcyBsaWtlIHdoZW4gYGhhbmRsZV9tbV9mYXVsdCgpYCByZXR1cm5zIGBWTV9GQVVMVF9SRVRSWWAgd2l0aCBgRkFVTFRfRkxBR19WTUFfTE9DS2AsIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgZ29pbmcgZm9yIHRoZSBgbW1hcF9sb2NrYCwgaXQgcmV0cmllcyBgbG9ja192bWFgIG9uY2UgZmlyc3QuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGVzcGVjaWFsbHkgd2l0aGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiAgYGRvX3VzZXJfYWRkcl9mYXVsdGAgaXMgaW5kZWVkIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgb24geDg2IGZvciB1c2VyIGFkZHJlc3MgZmF1bHRzLCBzbyB0aGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvZGUuIFNvIGZhciwgc28gZ29vZC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzIGFuZCBwcmV2ZW50IGRpbHV0aW9uLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZpY2FsbHkgdGVsbCBtZSB0byAqYXZvaWQqIGxpc3RpbmcgXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBsaWtlIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGJlY2F1c2UgdGhhdCBkaWx1dGVzIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgY2FyZWZ1bC4gIGBkb191c2VyX2FkZHJfZmF1bHRgIGlzLCB1bmZvcnR1bmF0ZWx5LCBhIHBhZ2UgZmF1bHQgaGFuZGxlciFcblxuQnV0LCB3YWl0LCBhcmUgdGhlcmUgYW55ICpvdGhlciogZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGF0IG1pZ2h0IGJlIG1vcmUgc3BlY2lmaWM/IEkgbmVlZCB0byBhdm9pZCBqdXN0IGxpc3RpbmcgYSBnZW5lcmljIGZ1bmN0aW9uIGxpa2UgYGRvX3VzZXJfYWRkcl9mYXVsdGAuIFRoZSBkaWZmIG1lbnRpb25zIHNldmVyYWwgb3RoZXIgYXJjaGl0ZWN0dXJlcycgcGFnZSBmYXVsdCBoYW5kbGVycyBhcyB3ZWxsOiBgYXJjaC9hcm0vbW0vZmF1bHQuYzogZG9fcGFnZV9mYXVsdGAsIGBhcmNoL2FybTY0L21tL2ZhdWx0LmM6IGRvX3BhZ2VfZmF1bHRgLCBgYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzogX19kb19wYWdlX2ZhdWx0YCwgYGFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jOiBfX19kb19wYWdlX2ZhdWx0YCwgYGFyY2gvcmlzY3YvbW0vZmF1bHQuYzogaGFuZGxlX3BhZ2VfZmF1bHRgLCBgYXJjaC9zMzkwL21tL2ZhdWx0LmM6IGRvX2V4Y2VwdGlvbmAuICBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGl0J3MgYSBjcm9zcy1hcmNoaXRlY3R1cmUgY2hhbmdlLCBidXQgaXQncyAqYWxsKiBwYWdlIGZhdWx0IGhhbmRsZXJzLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgcXVhbGlmeSBhcyBhIGJldHRlciBmb2N1cyBzeW1ib2wsIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGdpdCBkaWZmIGFuZCBsb2cgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucy9maWxlcyBtb2RpZmllZCwgYXMgaXQgd291bGQgYmUgYSBzaGFtZSB0byBtaXNzIGEgYmV0dGVyIGNhbmRpZGF0ZSBiZWNhdXNlIG9mIGEgdHlwby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjEwLjcyNjU5NzkxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA1MTY3NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYV9sb2NrX3JldHJpZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbW0vZmF1bHQuYz0zMzk9ZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC9hcm0vbW0vZmF1bHQuYy0zNDYtXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IFZNX0FDQ0VTU19GTEFHUztcXG5hcmNoL2FybS9tbS9mYXVsdC5jOjM0NzpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL2FybS9tbS9mYXVsdC5jLTM0OC1cXG4tLVxcbmFyY2gvYXJtL21tL2ZhdWx0LmMtNDI5LVxcbmFyY2gvYXJtL21tL2ZhdWx0LmM6NDMwOlxcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbmFyY2gvYXJtL21tL2ZhdWx0LmM6NDMxOlxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbmFyY2gvYXJtL21tL2ZhdWx0LmMtNDMyLVxcdFxcdGdvdG8gbG9ja192bWE7XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NjA1PXN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYxNi1cXHRpbnQgcGtleSA9IC0xO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2MTc6XFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYxOC1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy03MzMtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjczNDpcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NzM1OlxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy03MzYtXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM9MTc1PXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTE4My1cXHR2bV9mYXVsdF90IGZhdWx0O1xcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmM6MTg0OlxcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xcbmFyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmMtMTg1LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yNzAtXFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzoyNzE6XFx0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzoyNzI6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yNzMtXFx0XFx0Z290byBsb2NrX3ZtYTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jPTQxND1zdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jLTQyNC1cXHRib29sIGtwcm9iZV9mYXVsdCA9IGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIDExKTtcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0MjU6XFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNDI2LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNTIxLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jOjUyMjpcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo1MjM6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMtNTI0LVxcdFxcdGdvdG8gbG9ja192bWE7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM9Mjc4PXZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMjg2LVxcdHZtX2ZhdWx0X3QgZmF1bHQ7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjI4NzpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMjg4LVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTM4MS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM6MzgyOlxcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzozODM6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTM4NC1cXHRcXHRnb3RvIGxvY2tfdm1hO1xcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9MjY2PXN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTI3My1cXHRib29sIGlzX3dyaXRlO1xcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjI3NDpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0yNzUtXFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0zMjItXFx0fVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjMyMzpcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzozMjQ6XFx0XFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtMzI1LVxcdFxcdGdvdG8gbG9ja192bWE7XFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEyMjQtXFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xcbmFyY2gveDg2L21tL2ZhdWx0LmM6MTIyNTpcXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEyMjYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEzNjUtXFxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzY2OlxcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xcbmFyY2gveDg2L21tL2ZhdWx0LmM6MTM2NzpcXHRcXHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEzNjgtXFx0XFx0Z290byBsb2NrX3ZtYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6MTIuNjMxNzc0MTI1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2MjA1MzE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBmb3IgR3VhcmRpbmcgQ29uZGl0aW9ucyBvbiBQRVJfVk1BX0xPQ0sqKlxuXG5SaWdodCwgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGhlcmUuIEJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgd2FudCB0byBjb25maXJtIHRoYXQgYFBFUl9WTUFfTE9DS2AgaXNuJ3QgY29uZGl0aW9uYWwgb24gc29tZSBvdGhlciBzeW1ib2wgSSdtIG92ZXJsb29raW5nLCBvciBwZXJoYXBzIHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIHNjaGVtZS4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBzbyBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgYSBnb29kIGlkZWEuIExldCdzIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiBgQ09ORklHX1BFUl9WTUFfTE9DS2AuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciBhIGdhdGluZyBjb25kaXRpb24uIEl0J2xsIGdpdmUgdXMgYSBjbGVhciB5ZXMgb3Igbm8gYW5zd2VyIG9uIHdoZXRoZXIgdGhpcyBpcyBhIGhhcmQgcmVxdWlyZW1lbnQsIG9yIGlmIHRoaXMgbWVjaGFuaXNtIGlzIGRpc2FibGVkIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBLbm93aW5nIGlmIGl0J3MgY29uZmlnLWRlcGVuZGVudCBpcyBrZXkgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjE2Ljk5MzgzNDAyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMjcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEVSX1ZNQV9MT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMTE6Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbm1tL0tjb25maWcuZGVidWctMzEyLVxcdGJvb2wgXFxcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcXFwiXFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTQ3NS0jZW5kaWZcXG5tbS92bXN0YXQuYzoxNDc2OiNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLX1NUQVRTXFxubW0vdm1zdGF0LmMtMTQ3Ny1cXHRbSShWTUFfTE9DS19TVUNDRVNTKV1cXHRcXHRcXHQ9IFxcXCJ2bWFfbG9ja19zdWNjZXNzXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6MTcuMjQ4ODY3NTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA2MjM0NzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfUEVSX1ZNQV9MT0NLYC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIEkga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhcyBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIGFuZCBJIHdhbnQgdG8gdGhvcm91Z2hseSBhc3Nlc3Mgd2hlcmUgaXQncyBjdXJyZW50bHkgZGVmaW5lZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZXZlcnkgc2luZ2xlIGBLY29uZmlnYCBmaWxlIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBUaGlzIGluY2x1ZGVzIHRoZSBjb3JlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlncywgdGhlIGRldmljZSBkcml2ZXIgS2NvbmZpZ3MsIHRoZSBmaWxlc3lzdGVtIEtjb25maWdzLCB0aGUgbmV0d29ya2luZyBzdGFjayBLY29uZmlncyDigJMgYmFzaWNhbGx5LCBldmVyeXdoZXJlIHRoYXQgY291bGQgY29uY2VpdmFibHkgdG91Y2ggdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXTigJlzICplbmFibGVkKiwgd2hlcmUgaXTigJlzICpkaXNhYmxlZCosIGFuZCBwZXJoYXBzIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgaXQncyAqdW5kZWZpbmVkKiBiZWNhdXNlIHRob3NlIGFyZSB0aGUgYXJlYXMgdGhhdCBhcmUgYmVpbmcgbGVmdCB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBob3cgdGhpcyBmZWF0dXJlIGlzIGJlaW5nIHRyZWF0ZWQgYWNyb3NzIHRoZSBib2FyZCBhbmQgZXhwb3NlIGFueSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIG9yIHN1cnByaXNpbmcgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2UgaXMgcGFyYW1vdW50IGZvciBhbnkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzoxNDoyMi4zMTEyMTYxNDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTc5OTc3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUl9WTUFfTE9DS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMTE6Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbm1tL0tjb25maWcuZGVidWctMzEyLVxcdGJvb2wgXFxcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjI0LjEyOTIyMjA3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjQ4NjYyMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBsb2NrX3ZtYV91bmRlcl9yY3VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBsb2NrX3ZtYV91bmRlcl9yY3VgLiBUaGlzIGZlZWxzIGxpa2UgYSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIGxvY2tpbmcgaXNzdWUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmVhZC1jb3B5LXVwZGF0ZSAoUkNVKSBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpdHNlbGYuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgZWl0aGVyIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgbGl2ZXMsIG9yIHBvc3NpYmx5IHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSwgaW4gY2FzZSBpdCdzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBoZWFkZXIuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjI3Ljc3Nzg4ODQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzMDE5NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2tfdm1hX3VuZGVyX3JjdVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQyPVRlcm1pbm9sb2d5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ5LSAgYXMgYSByZWFkL3dyaXRlIHNlbWFwaG9yZSBpbiBwcmFjdGljZS4gQSBWTUEgcmVhZCBsb2NrIGlzIG9idGFpbmVkIHZpYVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTA6ICA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCAoYW5kIHVubG9ja2VkIHZpYSA6YzpmdW5jOmAhdm1hX2VuZF9yZWFkYCkgYW5kIGFcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTUxLSAgd3JpdGUgbG9jayB2aWEgdm1hX3N0YXJ0X3dyaXRlKCkgb3Igdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKClcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NzY9bXVzdCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtODAtICB5b3UncmUgZG9uZSB3aXRoIHRoZSBWTUEsICpvcipcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjgxOiogVHJ5IHRvIG9idGFpbiBhIFZNQSByZWFkIGxvY2sgdmlhIDpjOmZ1bmM6YCFsb2NrX3ZtYV91bmRlcl9yY3VgLiBUaGlzIHRyaWVzIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC04Mi0gIGFjcXVpcmUgdGhlIGxvY2sgYXRvbWljYWxseSBzbyBtaWdodCBmYWlsLCBpbiB3aGljaCBjYXNlIGZhbGwtYmFjayBsb2dpYyBpc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD0xMDE9aW4gb3JkZXIgdG8gb2J0YWluIGEgVk1BICoqd3JpdGUqKiBsb2NrLiBBIFZNQSAqKnJlYWQqKiBsb2NrIGhvd2V2ZXIgY2FuIGJlXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDoxMDI6b2J0YWluZWQgd2l0aG91dCBhbnkgb3RoZXIgbG9jayAoOmM6ZnVuYzpgIWxvY2tfdm1hX3VuZGVyX3JjdWAgd2lsbCBhY3F1aXJlIHRoZW5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTEwMy1yZWxlYXNlIGFuIFJDVSBsb2NrIHRvIGxvb2t1cCB0aGUgVk1BIGZvciB5b3UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03NTU9d3JpdGUgaGFzIHN0YXJ0ZWQsIHRoZW4gd2UgZG8gbm90IG9idGFpbiBhIHJlYWQgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTc1Ni1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0Ojc1NzpBIFZNQSAqKnJlYWQqKiBsb2NrIGlzIG9idGFpbmVkIGJ5IDpjOmZ1bmM6YCFsb2NrX3ZtYV91bmRlcl9yY3VgLCB3aGljaCBmaXJzdFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzU4LWNhbGxzIDpjOmZ1bmM6YCFyY3VfcmVhZF9sb2NrYCB0byBlbnN1cmUgdGhhdCB0aGUgVk1BIGlzIGxvb2tlZCB1cCBpbiBhbiBSQ1VcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NzY3PVZNQSByZWFkIGxvY2tzIGluY3JlbWVudCA6YzptZW1iZXI6YCF2bWEudm1fcmVmY250YCByZWZlcmVuY2UgY291bnRlciBmb3IgdGhlaXJcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0Ojc2ODpkdXJhdGlvbiBhbmQgdGhlIGNhbGxlciBvZiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCBtdXN0IGRyb3AgaXQgdmlhXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC03NjktOmM6ZnVuYzpgIXZtYV9lbmRfcmVhZGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTc5OT1yZWFkIGxvY2sgYWNxdWlzaXRpb24uIE9uY2UgYWNxdWlyZWQsIHRoZSBSQ1UgbG9jayBjYW4gYmUgcmVsZWFzZWQgYXMgaXQgaXMgb25seVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6ODAwOnJlcXVpcmVkIGZvciBsb29rdXAuIFRoaXMgaXMgYWJzdHJhY3RlZCBieSA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YCB3aGljaFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtODAxLWlzIHRoZSBpbnRlcmZhY2UgYSB1c2VyIHNob3VsZCB1c2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTgzNj1wZXJtaXR0aW5nIG90aGVyIHJlYWRlcnMsIHdobyBjYW4gYWxzbyBvYnRhaW4gdGhpcyBsb2NrIHVuZGVyIFJDVS5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTgzNy1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjgzODpJbXBvcnRhbnRseSwgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiA6YzpmdW5jOmAhbG9ja192bWFfdW5kZXJfcmN1YFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtODM5LWFyZSBhbHNvIFJDVSBzYWZlLCBzbyB0aGUgd2hvbGUgcmVhZCBsb2NrIG9wZXJhdGlvbiBpcyBndWFyYW50ZWVkIHRvIGZ1bmN0aW9uXFxuLS1cXG5hcmNoL2FybS9tbS9mYXVsdC5jPTMzOT1kb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybS9tbS9mYXVsdC5jLTM5OS1sb2NrX3ZtYTpcXG5hcmNoL2FybS9tbS9mYXVsdC5jOjQwMDpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbmFyY2gvYXJtL21tL2ZhdWx0LmMtNDAxLVxcdGlmICghdm1hKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTYwNT1zdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02ODYtbG9ja192bWE6XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjY4NzpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02ODgtXFx0aWYgKCF2bWEpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jPTE3NT1zdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYy0yMjMtbG9ja192bWE6XFxuYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuYzoyMjQ6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jLTIyNS1cXHRpZiAoIXZtYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jPTQxND1zdGF0aWMgaW50IF9fX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jLTQ5MS1sb2NrX3ZtYTpcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYzo0OTI6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYy00OTMtXFx0aWYgKCF2bWEpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM9Mjc4PXZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzUxLWxvY2tfdm1hOlxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzozNTI6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzUzLVxcdGlmICghdm1hKVxcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9MjY2PXN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTI5OC1sb2NrX3ZtYTpcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzoyOTk6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy0zMDAtXFx0aWYgKCF2bWEpXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTEyMTY9dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTEzMzUtbG9ja192bWE6XFxuYXJjaC94ODYvbW0vZmF1bHQuYzoxMzM2OlxcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XFxuYXJjaC94ODYvbW0vZmF1bHQuYy0xMzM3LVxcdGlmICghdm1hKVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzPTYwOT0gICAgZm4gZHJvcChzZWxmOiBQaW5cXHUwMDNjXFx1MDAyNm11dCBTZWxmXFx1MDAzZSkge1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTcyNC0gICAgICAgIHZtYV9hZGRyID0gaW5uZXIudm1hX2FkZHI7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzOjcyNTogICAgICAgIHZtYV9yZWFkID0gbWF0Y2ggbW0ubG9ja192bWFfdW5kZXJfcmN1KHZtYV9hZGRyKSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTcyNi0gICAgICAgICAgICBTb21lKGd1YXJkKSA9XFx1MDAzZSBndWFyZCxcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYz0xMTI3PWVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMtMTE1MC1cXHQgKi9cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmM6MTE1MTpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHBhZ2VfYWRkcik7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTExNTItXFx0aWYgKCF2bWEpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg9NDgzPXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19kZXRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtNTA2LVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg6NTA3OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtNTA4LVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0yODM9c3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjg3LVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoyODg6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTI4OS1cXHRpZiAodm1hKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTg2Mz1fX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfdGFza192bWFfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQsXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTkzNi0gKlxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6OTM3OiAqIGxvY2tfdm1hX3VuZGVyX3JjdSgpIGlzIGEgcG9pbnQgbG9va3VwIChtYXNfd2Fsayk6IGl0IGZpbmRzIHRoZSBWTUFcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTkzOC0gKiBjb250YWluaW5nIGEgZ2l2ZW4gYWRkcmVzcyBidXQgY2Fubm90IGl0ZXJhdGUuIEFuIFJDVS1wcm90ZWN0ZWRcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTQ4PWJwZl9pdGVyX3Rhc2tfdm1hX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWFfa2Vybl9kYXRhICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05NjUtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo5NjY6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KGRhdGEtXFx1MDAzZW1tLCBzdGFydCk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy05NjctXFx0aWYgKCF2bWEpIHtcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEyLVxcdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDEzOlxcdCAqIG9uIHZtX2ZpbGU7IHZtX21tIGlzIGFscmVhZHkgY29ycmVjdCBiZWNhdXNlIGxvY2tfdm1hX3VuZGVyX3JjdSgpXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDE0LVxcdCAqIHZlcmlmaWVzIHZtYS1cXHUwMDNldm1fbW0gPT0gbW0uIEFsbCBvdGhlciBwb2ludGVycyBhcmUgdW50cnVzdGVkIGJ5XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTIyOT1zdGF0aWMgdm9pZCBkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIzMy1cXG5tbS9kYW1vbi92YWRkci5jOjIzNDpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHN0YXJ0KTtcXG5tbS9kYW1vbi92YWRkci5jLTIzNS1cXHRpZiAoIXZtYSlcXG4tLVxcbm1tL21hZHZpc2UuYz0xNjQyPXN0YXRpYyBib29sIHRyeV92bWFfcmVhZF9sb2NrKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE2NDYtXFxubW0vbWFkdmlzZS5jOjE2NDc6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5zdGFydCk7XFxubW0vbWFkdmlzZS5jLTE2NDgtXFx0aWYgKCF2bWEpXFxuLS1cXG5tbS9tbWFwX2xvY2suYz0yMDk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vbW1hcF9sb2NrLmMtMjMzLVxcdCAqIEFjcXVpcmUgZmVuY2UgaXMgcmVxdWlyZWQgaGVyZSB0byBhdm9pZCByZW9yZGVyaW5nIGFnYWluc3QgbGF0ZXJcXG5tbS9tbWFwX2xvY2suYzoyMzQ6XFx0ICogdm1fbG9ja19zZXEgY2hlY2sgYW5kIGNoZWNrcyBpbnNpZGUgbG9ja192bWFfdW5kZXJfcmN1KCkuXFxubW0vbW1hcF9sb2NrLmMtMjM1LVxcdCAqL1xcbi0tXFxubW0vbW1hcF9sb2NrLmMtMjkyLSAqL1xcbm1tL21tYXBfbG9jay5jOjI5MzpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9tbWFwX2xvY2suYy0yOTQtXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS9tbWFwX2xvY2suYz0zNTg9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21tYXBfbG9jay5jLTM2My1cXHQvKiBGYXN0IHBhdGg6IHJldHVybiBzdGFibGUgVk1BIGNvdmVyaW5nICdhZGRyZXNzJzogKi9cXG5tbS9tbWFwX2xvY2suYzozNjQ6XFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG5tbS9tbWFwX2xvY2suYy0zNjUtXFx0aWYgKHZtYSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTM3PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVmZmRfbG9ja192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0MS1cXG5tbS91c2VyZmF1bHRmZC5jOjE0MjpcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbm1tL3VzZXJmYXVsdGZkLmMtMTQzLVxcdGlmICh2bWEpIHtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTgyNj1zdGF0aWMgaW50IHVmZmRfbW92ZV9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODYwLVxcdCAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTg2MTpcXHQqc3JjX3ZtYXAgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHNyY19zdGFydCk7XFxubW0vdXNlcmZhdWx0ZmQuYy0xODYyLVxcdGlmIChsaWtlbHkoKnNyY192bWFwKSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDI5Mj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX3NldF9tb2RlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDMyMC1cXHQgKiBibG9ja3MgbmV3IG1tYXBfcmVhZF9sb2NrKCkgY2FsbGVycywgYnV0IHBlci1WTUEgbG9ja2VkIGZhdWx0c1xcbm1tL3VzZXJmYXVsdGZkLmM6NDMyMTpcXHQgKiAobG9ja192bWFfdW5kZXJfcmN1KCkgKyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB0aGF0IGFjcXVpcmVkIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmMtNDMyMi1cXHQgKiB0aGlzIHBvaW50IGtlZXAgcnVubmluZy4gQ2FsbGluZyB2bWFfc3RhcnRfd3JpdGUoKSBvbiBlYWNoIFVGRkQtXFxuLS1cXG5ydXN0L2tlcm5lbC9tbS5ycz0xNjM9ICAgIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcXHUwMDNjJ2FcXHUwMDNlKHB0cjogKmNvbnN0IGJpbmRpbmdzOjptbV9zdHJ1Y3QpIC1cXHUwMDNlIFxcdTAwMjYnYSBNbVdpdGhVc2VyIHtcXG4tLVxcbnJ1c3Qva2VybmVsL21tLnJzLTE3My0gICAgI1tpbmxpbmVdXFxucnVzdC9rZXJuZWwvbW0ucnM6MTc0OiAgICBwdWIgZm4gbG9ja192bWFfdW5kZXJfcmN1KFxcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cXHUwMDNlIE9wdGlvblxcdTAwM2NWbWFSZWFkR3VhcmRcXHUwMDNjJ19cXHUwMDNlXFx1MDAzZSB7XFxucnVzdC9rZXJuZWwvbW0ucnM6MTc1OiAgICAgICAgLy8gU0FGRVRZOiBDYWxsaW5nIGBiaW5kaW5nczo6bG9ja192bWFfdW5kZXJfcmN1YCBpcyBhbHdheXMgb2theSBnaXZlbiBhbiBtbSB3aGVyZVxcbnJ1c3Qva2VybmVsL21tLnJzLTE3Ni0gICAgICAgIC8vIGBtbV91c2Vyc2AgaXMgbm9uLXplcm8uXFxucnVzdC9rZXJuZWwvbW0ucnM6MTc3OiAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3Uoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07XFxucnVzdC9rZXJuZWwvbW0ucnMtMTc4LSAgICAgICAgaWYgdm1hLmlzX251bGwoKSB7XFxuLS1cXG5ydXN0L2tlcm5lbC9tbS5ycy0xODEtICAgICAgICBTb21lKFZtYVJlYWRHdWFyZCB7XFxucnVzdC9rZXJuZWwvbW0ucnM6MTgyOiAgICAgICAgICAgIC8vIFNBRkVUWTogSWYgYGxvY2tfdm1hX3VuZGVyX3JjdWAgcmV0dXJucyBhIG5vbi1udWxsIHB0ciwgdGhlbiBpdCBwb2ludHMgYXQgYVxcbnJ1c3Qva2VybmVsL21tLnJzLTE4My0gICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjI5LjQ3MDkxNDE3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY0NDQwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgRmF1bHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBpbiBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvbiBhbWQ2NCB0aGF0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gZm9yIGxvY2tpbmcgdGhlIFZNQSB1bmRlciBSQ1UgaWYgYGhhbmRsZV9tbV9mYXVsdGAgcmV0dXJucyBgVk1fRkFVTFRfUkVUUllgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIgQW55IGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCBvdGhlciBuYXN0eSBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0OiBob3cgdG8gZ3VpZGUgdGhlIGZ1enplciBlZmZlY3RpdmVseSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYEZvY3VzU3ltYm9sc2AuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gQW5kIHRoZW4gaXQgaGl0cyBtZTogYGRvX3VzZXJfYWRkcl9mYXVsdGAgKmlzKiBhIHBhZ2UgZmF1bHQgaGFuZGxlciEgIEl0J3MgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlIFwiZG8gbm90IGluY2x1ZGVcIiBsaXN0LCBhbG9uZyB3aXRoIG90aGVyIGdlbmVyYWwgaGFuZGxlcnMgYW5kIGFsbG9jYXRvcnMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRvX3BhZ2VfZmF1bHRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBvbiBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBtYWtpbmcgdGhlIGNoYW5nZXMgZXZlbiBtb3JlIHBlcnZhc2l2ZS4gQWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFRoYXQgbWFrZXMgdGhpcyBhIGNsYXNzaWMgY2FzZSB3aGVyZSBsaXN0aW5nIGFueSBvZiB0aGVzZSBpbiBgRm9jdXNTeW1ib2xzYCB3aWxsIGNhdXNlIGV4dHJlbWUgZGlsdXRpb24uXG5cblNpbmNlIGV2ZXJ5IHRlc3QgcHJvZ3JhbSB3aWxsIGluZXZpdGFibHkgaGl0IHVzZXIgbWVtb3J5IGFuZCBnZW5lcmF0ZSBwYWdlIGZhdWx0cywgaW5jbHVkaW5nIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBlZmZlY3RpdmVseSBjbGFzc2lmeSAqZXZlcnkqIHRlc3QgYXMgXCJmb2N1c2VkLFwiIHJlbmRlcmluZyBgRm9jdXNTeW1ib2xzYCB1c2VsZXNzLiAgXG5cblRoZSBpbnN0cnVjdGlvbnMgYXJlIGFsc28gY2xlYXI6IElmIHRoZXJlIGFyZSBubyBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgbW9kaWZpZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQsIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBgW11gIHRvIHByZXZlbnQgZGlsdXRpb24uXG5cblNvLCB0aGUgb3B0aW1hbCBmdXp6aW5nIHN0cmF0ZWd5IGhlcmUgaXMgdG8gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbXWAuIFRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGd1aWRlIHRoZSBmdXp6ZXIgd2l0aG91dCBkaWx1dGluZyBpdHMgZWZmb3J0cywgYXMgaXQgZW5zdXJlcyB0aGF0IHRoZSBmdXp6ZXIgZm9jdXNlcyBvbiB0aGUgY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9tbS9mYXVsdC5jYCwgdG8gc2VlIGlmIHRoZSBwZXItdm1hIGxvY2tpbmcgcGF0aCBvciBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBpcyBndWFyZGVkIGJ5IGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGp1c3QgaW4gY2FzZSBhIHNwZWNpZmljIGNvbmZpZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFibGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjM4LjUzNTM1ODczOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vZmF1bHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdCAqIGFsbCBwdXJwb3Nlcywgd2Ugc2hvdWxkIHRyZWF0IGEgbm9ybWFsIGtlcm5lbCBhY2Nlc3MgdG8gdXNlciBtZW1vcnlcXG4xMjExOlxcdCAqIChlLmcuIGdldF91c2VyKCksIHB1dF91c2VyKCksIGV0Yy4pIHRoZSBzYW1lIGFzIHRoZSBXUlVTUyBpbnN0cnVjdGlvbi5cXG4xMjEyOlxcdCAqIFRoZSBvbmUgZXhjZXB0aW9uIGlzIEFDIGZsYWcgaGFuZGxpbmcsIHdoaWNoIGlzLCBwZXIgdGhlIHg4NlxcbjEyMTM6XFx0ICogYXJjaGl0ZWN0dXJlLCBzcGVjaWFsIGZvciBXUlVTUy5cXG4xMjE0OlxcdCAqL1xcbjEyMTU6XFx0c3RhdGljIGlubGluZVxcbjEyMTY6XFx0dm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuMTIxNzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsXFxuMTIxODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuMTIxOTpcXHR7XFxuMTIyMDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4xMjIxOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbjEyMjI6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuMTIyMzpcXHRcXHR2bV9mYXVsdF90IGZhdWx0O1xcbjEyMjQ6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xcbjEyMjU6XFx0XFx0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XFxuMTIyNjpcXHRcXG4xMjI3OlxcdFxcdHRzayA9IGN1cnJlbnQ7XFxuMTIyODpcXHRcXHRtbSA9IHRzay1cXHUwMDNlbW07XFxuMTIyOTpcXHRcXG4xMjMwOlxcdFxcdGlmICh1bmxpa2VseSgoZXJyb3JfY29kZSBcXHUwMDI2IChYODZfUEZfVVNFUiB8IFg4Nl9QRl9JTlNUUikpID09IFg4Nl9QRl9JTlNUUikpIHtcXG4xMjMxOlxcdFxcdFxcdC8qXFxuMTIzMjpcXHRcXHRcXHQgKiBXaG9vcHMsIHRoaXMgaXMga2VybmVsIG1vZGUgY29kZSB0cnlpbmcgdG8gZXhlY3V0ZSBmcm9tXFxuMTIzMzpcXHRcXHRcXHQgKiB1c2VyIG1lbW9yeS4gIFVubGVzcyB0aGlzIGlzIEFNRCBlcnJhdHVtICM5Mywgd2hpY2hcXG4xMjM0OlxcdFxcdFxcdCAqIGNvcnJ1cHRzIFJJUCBzdWNoIHRoYXQgaXQgbG9va3MgbGlrZSBhIHVzZXIgYWRkcmVzcyxcXG4xMjM1OlxcdFxcdFxcdCAqIHRoaXMgaXMgdW5yZWNvdmVyYWJsZS4gIERvbid0IGV2ZW4gdHJ5IHRvIGxvb2sgdXAgdGhlXFxuMTIzNjpcXHRcXHRcXHQgKiBWTUEgb3IgbG9vayBmb3IgZXh0YWJsZSBlbnRyaWVzLlxcbjEyMzc6XFx0XFx0XFx0ICovXFxuMTIzODpcXHRcXHRcXHRpZiAoaXNfZXJyYXRhOTMocmVncywgYWRkcmVzcykpXFxuMTIzOTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTI0MDpcXHRcXG4xMjQxOlxcdFxcdFxcdHBhZ2VfZmF1bHRfb29wcyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTtcXG4xMjQyOlxcdFxcdFxcdHJldHVybjtcXG4xMjQzOlxcdFxcdH1cXG4xMjQ0OlxcdFxcbjEyNDU6XFx0XFx0Lyoga3Byb2JlcyBkb24ndCB3YW50IHRvIGhvb2sgdGhlIHNwdXJpb3VzIGZhdWx0czogKi9cXG4xMjQ2OlxcdFxcdGlmIChXQVJOX09OX09OQ0Uoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgWDg2X1RSQVBfUEYpKSlcXG4xMjQ3OlxcdFxcdFxcdHJldHVybjtcXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6MzguNTM1NDY0MjQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0ODMyMjk0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGxpdHRsZSBpbnZlc3RpZ2F0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgYGxvY2tfdm1hX3VuZGVyX3JjdWAgaW4gYG1tL21tYXBfbG9jay5jYCoqXG5cbkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbG9ja192bWFfdW5kZXJfcmN1YCB3aXRoaW4gYG1tL21tYXBfbG9jay5jYC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoYXQgZnVuY3Rpb24gaGFzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGF0dGFjaGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnkgYCNpZmRlZiBDT05GSUdfLi4uYCBtYWNyb3Mgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgaXRzIHVzYWdlLiBUaGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB3b3VsZCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGl0cyBiZWhhdmlvciBvciBldmVuIGl0cyB2ZXJ5IGV4aXN0ZW5jZSBpcyB0aWVkIHRvIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBxdWljayBzY2FuIGZvciB0aG9zZSBkaXJlY3RpdmVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHBvcnRhYmlsaXR5IGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgbG9jayBiZWhhdmlvciBpcyB1bml2ZXJzYWwgb3IgaWYgaXQncyBzcGVjaWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjQ3LjAxODY5NzAwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1hcF9sb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdCAqIHN0YWJsZSBhbmQgbm90IGlzb2xhdGVkLiBJZiB0aGUgVk1BIGlzIG5vdCBmb3VuZCBvciBpcyBiZWluZyBtb2RpZmllZCB0aGVcXG4gMjkxOlxcdCAqIGZ1bmN0aW9uIHJldHVybnMgTlVMTC5cXG4gMjkyOlxcdCAqL1xcbiAyOTM6XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4gMjk1OlxcdHtcXG4gMjk2OlxcdFxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNm1tLVxcdTAwM2VtbV9tdCwgYWRkcmVzcywgYWRkcmVzcyk7XFxuIDI5NzpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NTVUpKVxcbiAzMDA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMwMTpcXHRyZXRyeTpcXG4gMzAyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzAzOlxcdFxcdHZtYSA9IG1hc193YWxrKFxcdTAwMjZtYXMpO1xcbiAzMDQ6XFx0XFx0aWYgKCF2bWEpIHtcXG4gMzA1OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzMDY6XFx0XFx0XFx0Z290byBpbnZhbDtcXG4gMzA3OlxcdFxcdH1cXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0dm1hID0gdm1hX3N0YXJ0X3JlYWQobW0sIHZtYSk7XFxuIDMxMDpcXHRcXHRpZiAoSVNfRVJSX09SX05VTEwodm1hKSkge1xcbiAzMTE6XFx0XFx0XFx0LyogQ2hlY2sgaWYgdGhlIFZNQSBnb3QgaXNvbGF0ZWQgYWZ0ZXIgd2UgZm91bmQgaXQgKi9cXG4gMzEyOlxcdFxcdFxcdGlmIChQVFJfRVJSKHZtYSkgPT0gLUVBR0FJTikge1xcbiAzMTM6XFx0XFx0XFx0XFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfTUlTUyk7XFxuIDMxNDpcXHRcXHRcXHRcXHQvKiBUaGUgYXJlYSB3YXMgcmVwbGFjZWQgd2l0aCBhbm90aGVyIG9uZSAqL1xcbiAzMTU6XFx0XFx0XFx0XFx0bWFzX3NldChcXHUwMDI2bWFzLCBhZGRyZXNzKTtcXG4gMzE2OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDMxNzpcXHRcXHRcXHR9XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdFxcdC8qIEZhaWxlZCB0byBsb2NrIHRoZSBWTUEgKi9cXG4gMzIwOlxcdFxcdFxcdGdvdG8gaW52YWw7XFxuIDMyMTpcXHRcXHR9XFxuIDMyMjpcXHRcXHQvKlxcbiAzMjM6XFx0XFx0ICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHN0YWJsZSByZWZlcmVuY2UgdG8gYSBWTUE6IFRoZSBWTUEgaXNcXG4gMzI0OlxcdFxcdCAqIGxvY2tlZCBhbmQgd2Uga25vdyBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGlzb2xhdGVkLlxcbiAzMjU6XFx0XFx0ICogRnJvbSBoZXJlIG9uLCB3ZSBjYW4gYWNjZXNzIHRoZSBWTUEgd2l0aG91dCB3b3JyeWluZyBhYm91dCB3aGljaFxcbiAzMjY6XFx0XFx0ICogZmllbGRzIGFyZSBhY2Nlc3NpYmxlIGZvciBSQ1UgcmVhZGVycy5cXG4gMzI3OlxcdFxcdCAqL1xcbiAzMjg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6NDcuMDE4ODAyMzg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NzAxMTk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnV6emluZyBQb3RlbnRpYWwgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBgQ09ORklHX01NVWAgaXMgYSBnaXZlbiBvbiB4ODYvYW1kNjQ7IHRoYXQncyBzdGFuZGFyZC4gTm8gb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBhcmUganVtcGluZyBvdXQuIEkgZGlkIGEgcXVpY2sgY2hlY2ssIGFuZCBgUEVSX1ZNQV9MT0NLX1NUQVRTYCBpcyBqdXN0IGRlYnVnIGZsdWZmLCBzbyB3ZSBjYW4gaWdub3JlIHRoYXQuIEkgZG9uJ3Qgc2VlIGFueSBkZXBlbmRlbmN5IG9uIGBQRVJfVk1BX0xPQ0tgLiBTaW5jZSA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aXRoIGFuIE1NVSBoYXZlIHRoaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBgRW5hYmxlQ29uZmlnc2AgcmVtYWlucyBhbiBlbXB0eSBhcnJheSAoYFtdYCkuXG5cbk5vdywgdGhlIGNydWNpYWwgYml0OiBgV29ydGhGdXp6aW5nYC4gVGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb2RlIGluIGBtbS9mYXVsdC5jYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgeDg2LXNwZWNpZmljIGB4ODYvbW0vZmF1bHQuY2AsIGlzIG1vZGlmaWVkLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgYmVjYXVzZSB0aGUgY2hhbmdlIGFsdGVycyB0aGUgcmV0cnkgbG9naWMgaW4gdGhlIHBlci1WTUEgbG9ja2VkIGZhdWx0cywgcmV0cnlpbmcgYGxvY2tfdm1hYCBvbmNlIHdoZW4gYFZNX0ZBVUxUX1JFVFJZYCBpcyByZXR1cm5lZC4gQ3J1Y2lhbGx5LCB0aGlzIGFmZmVjdHMgZXhlY3V0YWJsZSBjb2RlLCBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvbiBhbWQ2NC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQsIGBGb2N1c1N5bWJvbHNgLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIGF2b2lkIGRpbHV0aW9uLiBUaGUgY2hhbmdlZCBmdW5jdGlvbnMgYXJlIGFsbCAqYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgZmF1bHQgaGFuZGxlcnMqIGxpa2UgYGRvX3VzZXJfYWRkcl9mYXVsdGAgYW5kIGBkb19wYWdlX2ZhdWx0YC4gUmVtZW1iZXIgdGhlIGV4cGxpY2l0IGluc3RydWN0aW9uOiAqYXZvaWQqIHRoZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuIExpc3RpbmcgZnVuY3Rpb25zIGxpa2UgdGhlc2Ugd291bGQgZXNzZW50aWFsbHkgZmxhZyAqZXZlcnkqIHRlc3QgcHJvZ3JhbSwgYXMgdGhlc2UgYXJlIGZvdW5kYXRpb25hbCBmdW5jdGlvbnMuIFRoZXkgYXJlIGNhbGxlZCBieSB2aXJ0dWFsbHkgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzLiBJbmNsdWRpbmcgYGRvX3VzZXJfYWRkcl9mYXVsdGAgb3IgZXZlbiBgbG9ja192bWFfdW5kZXJfcmN1YCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZy4gVGhpcyB3b3VsZCBiZSBhIGRpc2FzdGVyLiBUaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIG11c3QgYmUgZW1wdHkgKGBbXWApLlxuXG5UbyByZWNhcCwgYEVuYWJsZUNvbmZpZ3NgIHJlbWFpbnMgZW1wdHkgYXMgYENPTkZJR19NTVVgIGlzIHN0YW5kYXJkLCBzbyB3ZSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLlxuXG5UaW1lIGZvciBhIHNhbml0eSBjaGVjayBvbiB0aGUgb3V0cHV0IHBhcmFtZXRlcnMuXG4qICAgYFdvcnRoRnV6emluZ2A6IHRydWVcbiogICBgUmVhc29uaW5nYDogV2UgaGF2ZSBhIGNsZWFyLCBjb25jaXNlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBmdXp6aW5nLCBhbmQgd2h5IHdlIGFyZSBnb2luZyB0byBleGNsdWRlIGBGb2N1c1N5bWJvbHNgIGJhc2VkIG9uIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1xuKiAgIGBGb2N1c1N5bWJvbHNgOiBbXVxuKiAgIGBFbmFibGVDb25maWdzYDogW11cblxuQWxyaWdodCwgbG9va3MgZ29vZC4gVGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjkyLCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjU0LjQ4ODkyNDI0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoaW5jbHVkaW5nIGFyY2gveDg2L21tL2ZhdWx0LmMgZm9yIGFtZDY0KSB0byByZXRyeSBhY3F1aXJpbmcgdGhlIHBlci1WTUEgbG9jayB1bmRlciBSQ1Ugb25jZSB1cG9uIHJlY2VpdmluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRha2luZyB0aGUgbW1hcCBsb2NrLiBUaGlzIGFsdGVycyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBsb2NraW5nIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiBGb2N1c1N5bWJvbHMgaXMgbGVmdCBlbXB0eSB0byBwcmV2ZW50IGZ1enppbmcgZGlsdXRpb24sIGFzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiAoZG9fdXNlcl9hZGRyX2ZhdWx0KSBpcyBhbiBhcmNoaXRlY3R1cmUgcGFnZSBmYXVsdCBoYW5kbGVyIGV4ZWN1dGVkIHViaXF1aXRvdXNseSBieSB1c2Vyc3BhY2Ugd29ya2xvYWRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBjb250cm9sIGZsb3cgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGluY2x1ZGluZyBhcmNoL3g4Ni9tbS9mYXVsdC5jIGZvciBhbWQ2NCkgdG8gcmV0cnkgYWNxdWlyaW5nIHRoZSBwZXItVk1BIGxvY2sgdW5kZXIgUkNVIG9uY2UgdXBvbiByZWNlaXZpbmcgVk1fRkFVTFRfUkVUUlkgYmVmb3JlIGZhbGxpbmcgYmFjayB0byB0YWtpbmcgdGhlIG1tYXAgbG9jay4gVGhpcyBhbHRlcnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbG9ja2luZyBiZWhhdmlvciBpbiByZWFjaGFibGUgY29kZSBhbmQgd2FycmFudHMgZnV6emluZy4gRm9jdXNTeW1ib2xzIGlzIGxlZnQgZW1wdHkgdG8gcHJldmVudCBmdXp6aW5nIGRpbHV0aW9uLCBhcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKGRvX3VzZXJfYWRkcl9mYXVsdCkgaXMgYW4gYXJjaGl0ZWN0dXJlIHBhZ2UgZmF1bHQgaGFuZGxlciBleGVjdXRlZCB1YmlxdWl0b3VzbHkgYnkgdXNlcnNwYWNlIHdvcmtsb2Fkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTQ6NTQuNDg4OTQ5MzQxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4MDcwMDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjU0LjQ4OTQyNTE4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0OTgwMjIwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUncyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDAwMDYyYzZkZGQ3OGExY2ZkYzhmMTFjMzY3MDdiNDMzOWRmMDdiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAzOjEzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmNcbmluZGV4IDBhMDlkNGZmNzcxODUuLjcwNDcyNzQ0ZjVjNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jXG5AQCAtMzQ0LDYgKzM0NCw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVMVF9GTEFHX0RFRkFVTFQ7XG4gXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gVk1fQUNDRVNTX0ZMQUdTO1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHRpZiAoa3Byb2JlX3BhZ2VfZmF1bHQocmVncywgZnNyKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMzk1LDYgKzM5Niw3IEBAIGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtNDI0LDYgKzQyNiwxMiBAQCBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdFx0Z290byBub19jb250ZXh0O1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbitcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gcmV0cnk6XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5pbmRleCA3NWMzZTQ2M2RmMmVmLi5jN2ZkNmY0ODViMTYxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbkBAIC02MTQsNiArNjE0LDcgQEAgc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBzaV9jb2RlO1xuIFx0aW50IHBrZXkgPSAtMTtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGVzcikpXG4gXHRcdHJldHVybiAwO1xuQEAgLTY4Miw2ICs2ODMsNyBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiBcdGlmICghKG1tX2ZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbiBcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtNzI4LDYgKzczMCwxMiBAQCBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiBcdFx0XHRnb3RvIG5vX2NvbnRleHQ7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9tbS9mYXVsdC5jIGIvYXJjaC9sb29uZ2FyY2gvbW0vZmF1bHQuY1xuaW5kZXggMmM5M2QzMzM1NmU1Ny4uZWY2ZWE4NDdiMWUwNSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL21tL2ZhdWx0LmNcbkBAIC0xODEsNiArMTgxLDcgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGtwcm9iZV9wYWdlX2ZhdWx0KHJlZ3MsIGN1cnJlbnQtXHUwMDNldGhyZWFkLnRyYXBfbnIpKVxuIFx0XHRyZXR1cm47XG5AQCAtMjE5LDYgKzIyMCw3IEBAIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTI2NSw2ICsyNjcsMTIgQEAgc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIHdyaXRlLCBhZGRyZXNzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5pbmRleCA4MDZjNzRlMGQ1YWI3Li4wNjAxOGI2ZDcwODZmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jXG5AQCAtNDIyLDYgKzQyMiw3IEBAIHN0YXRpYyBpbnQgX19fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0aW50IGlzX3dyaXRlID0gcGFnZV9mYXVsdF9pc193cml0ZShlcnJvcl9jb2RlKTtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQsIG1ham9yID0gMDtcbiBcdGJvb2wga3Byb2JlX2ZhdWx0ID0ga3Byb2JlX3BhZ2VfZmF1bHQocmVncywgMTEpO1xuK1x0Ym9vbCB2bWFfbG9ja19yZXRyaWVkID0gZmFsc2U7XG4gXG4gXHRpZiAodW5saWtlbHkoZGVidWdnZXJfZmF1bHRfaGFuZGxlcihyZWdzKSB8fCBrcHJvYmVfZmF1bHQpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC00ODcsNiArNDg4LDcgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTUxNyw2ICs1MTksMTEgQEAgc3RhdGljIGludCBfX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRpZiAoZmF1bHRfc2lnbmFsX3BlbmRpbmcoZmF1bHQsIHJlZ3MpKVxuIFx0XHRyZXR1cm4gdXNlcl9tb2RlKHJlZ3MpID8gMCA6IFNJR0JVUztcbiBcbitcdGlmICghdm1hX2xvY2tfcmV0cmllZCkge1xuK1x0XHR2bWFfbG9ja19yZXRyaWVkID0gdHJ1ZTtcbitcdFx0Z290byBsb2NrX3ZtYTtcbitcdH1cbitcbiBsb2NrX21tYXA6XG4gXG4gXHQvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbmluZGV4IDA0ZWQ2ZjhhY2FlNGYuLmZmODYxNzkzZGJhOTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xuQEAgLTI4NCw2ICsyODQsNyBAQCB2b2lkIGhhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0dW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19ERUZBVUxUO1xuIFx0aW50IGNvZGUgPSBTRUdWX01BUEVSUjtcbiBcdHZtX2ZhdWx0X3QgZmF1bHQ7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdGNhdXNlID0gcmVncy1cdTAwM2VjYXVzZTtcbiBcdGFkZHIgPSByZWdzLVx1MDAzZWJhZGFkZHI7XG5AQCAtMzQ3LDYgKzM0OCw3IEBAIHZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19VU0VSKSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG4gXG4rbG9ja192bWE6XG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuQEAgLTM3Niw2ICszNzgsMTIgQEAgdm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4rXG4rXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcbitcdFx0dm1hX2xvY2tfcmV0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gbG9ja192bWE7XG4rXHR9XG4rXG4gbG9ja19tbWFwOlxuIFxuIHJldHJ5OlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbmluZGV4IDQ2ZDgyODkyNjAwOWIuLmRjZDFiYTI0NDk3ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbkBAIC0yNzEsNiArMjcxLDcgQEAgc3RhdGljIHZvaWQgZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWNjZXNzKVxuIFx0dW5zaWduZWQgaW50IGZsYWdzO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbiBcdGJvb2wgaXNfd3JpdGU7XG4rXHRib29sIHZtYV9sb2NrX3JldHJpZWQgPSBmYWxzZTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlIHByb2dyYW0gY2hlY2sgaGFzXG5AQCAtMjk0LDYgKzI5NSw3IEBAIHN0YXRpYyB2b2lkIGRvX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFjY2VzcylcbiBcdFx0ZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VTRVIpKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbitsb2NrX3ZtYTpcbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbiBcdFx0Z290byBsb2NrX21tYXA7XG5AQCAtMzE4LDYgKzMyMCwxMCBAQCBzdGF0aWMgdm9pZCBkb19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhY2Nlc3MpXG4gXHRcdFx0aGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuIGxvY2tfbW1hcDpcbiByZXRyeTpcbiBcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuY1xuaW5kZXggYWE4ODM3MGNlNzM5NC4uZGYxMGQ1Y2VhNGVlYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmNcbisrKyBiL2FyY2gveDg2L21tL2ZhdWx0LmNcbkBAIC0xMjIyLDYgKzEyMjIsNyBAQCB2b2lkIGRvX3VzZXJfYWRkcl9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIFx0dm1fZmF1bHRfdCBmYXVsdDtcbiBcdHVuc2lnbmVkIGludCBmbGFncyA9IEZBVUxUX0ZMQUdfREVGQVVMVDtcbitcdGJvb2wgdm1hX2xvY2tfcmV0cmllZCA9IGZhbHNlO1xuIFxuIFx0dHNrID0gY3VycmVudDtcbiBcdG1tID0gdHNrLVx1MDAzZW1tO1xuQEAgLTEzMzEsNiArMTMzMiw3IEBAIHZvaWQgZG9fdXNlcl9hZGRyX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXG4gXHRcdGdvdG8gbG9ja19tbWFwO1xuIFxuK2xvY2tfdm1hOlxuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRnb3RvIGxvY2tfbW1hcDtcbkBAIC0xMzYwLDYgKzEzNjIsMTIgQEAgdm9pZCBkb191c2VyX2FkZHJfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHRcdFx0IEFSQ0hfREVGQVVMVF9QS0VZKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0aWYgKCF2bWFfbG9ja19yZXRyaWVkKSB7XG4rXHRcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xuK1x0XHRnb3RvIGxvY2tfdm1hO1xuK1x0fVxuK1xuIGxvY2tfbW1hcDpcbiBcbiByZXRyeTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE0OjU0LjQ4OTQyNTk3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ4MDMzMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gUGFnZSBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBhbmQgYnJvYWRseSwgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMg4oCTIGFybSwgYXJtNjQsIGxvb25nYXJjaCwgcG93ZXJwYywgcmlzY3YsIHMzOTAsIHg4NiDigJMgdGhhdCdzIGEgc2lnbmlmaWNhbnQgc2NvcGUuIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGNvbW1vbmFsaXR5OyB0aGUgY29yZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgaXQgaGFuZGxlcyBwZXItVk1BIGxvY2tzIGR1cmluZyBhIHBhZ2UgZmF1bHQsIHdpdGggYSByZXRyeSBtZWNoYW5pc20gYmVpbmcgaW50cm9kdWNlZCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBsb2NrX3ZtYV91bmRlcl9yY3VgIGluc2lkZSBvZiBmdW5jdGlvbnMgbGlrZSBgZG9fdXNlcl9hZGRyX2ZhdWx0YCBvciBwb3RlbnRpYWxseSBgZG9fcGFnZV9mYXVsdGAuXG5cbkkgd2FudCB0byBzZWUgdGhpcyBpbiBhY3Rpb24uIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiB4ODYsIEknbGwgZ28gc3RyYWlnaHQgdG8gYGFyY2gveDg2L21tL2ZhdWx0LmNgLiBUaGUgY29kZSBhcm91bmQgbGluZSAxMzMwIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldy4gSSdsbCByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIGluIHRoYXQgZmlsZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyB0aGV5IGltcGxlbWVudCB0aGUgYGxvY2tfdm1hX3VuZGVyX3JjdWAgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG9ja2luZyB3b3Jrcy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IHRoaXMgY291bGQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjE1OjAwLjMzNzQ2MjAyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vZmF1bHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdCAqIFRoZSB2c3lzY2FsbCBwYWdlIGRvZXMgbm90IGhhdmUgYSBcXFwicmVhbFxcXCIgVk1BLCBzbyBkbyB0aGlzXFxuMTMyMTpcXHRcXHQgKiBlbXVsYXRpb24gYmVmb3JlIHdlIGdvIHNlYXJjaGluZyBmb3IgVk1Bcy5cXG4xMzIyOlxcdFxcdCAqXFxuMTMyMzpcXHRcXHQgKiBQS1JVIG5ldmVyIHJlamVjdHMgaW5zdHJ1Y3Rpb24gZmV0Y2hlcywgc28gd2UgZG9uJ3QgbmVlZFxcbjEzMjQ6XFx0XFx0ICogdG8gY29uc2lkZXIgdGhlIFBGX1BLIGJpdC5cXG4xMzI1OlxcdFxcdCAqL1xcbjEzMjY6XFx0XFx0aWYgKGlzX3ZzeXNjYWxsX3ZhZGRyKGFkZHJlc3MpKSB7XFxuMTMyNzpcXHRcXHRcXHRpZiAoZW11bGF0ZV92c3lzY2FsbF9wZihlcnJvcl9jb2RlLCByZWdzLCBhZGRyZXNzKSlcXG4xMzI4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMzI5OlxcdFxcdH1cXG4xMzMwOlxcdCNlbmRpZlxcbjEzMzE6XFx0XFxuMTMzMjpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVVNFUikpXFxuMTMzMzpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0bG9ja192bWE6XFxuMTMzNjpcXHRcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbjEzMzc6XFx0XFx0aWYgKCF2bWEpXFxuMTMzODpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4xMzM5OlxcdFxcbjEzNDA6XFx0XFx0aWYgKHVubGlrZWx5KGFjY2Vzc19lcnJvcihlcnJvcl9jb2RlLCB2bWEpKSkge1xcbjEzNDE6XFx0XFx0XFx0YmFkX2FyZWFfYWNjZXNzX2Vycm9yKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIE5VTEwsIHZtYSk7XFxuMTM0MjpcXHRcXHRcXHRjb3VudF92bV92bWFfbG9ja19ldmVudChWTUFfTE9DS19TVUNDRVNTKTtcXG4xMzQzOlxcdFxcdFxcdHJldHVybjtcXG4xMzQ0OlxcdFxcdH1cXG4xMzQ1OlxcdFxcdGZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkcmVzcywgZmxhZ3MgfCBGQVVMVF9GTEFHX1ZNQV9MT0NLLCByZWdzKTtcXG4xMzQ2OlxcdFxcdGlmICghKGZhdWx0IFxcdTAwMjYgKFZNX0ZBVUxUX1JFVFJZIHwgVk1fRkFVTFRfQ09NUExFVEVEKSkpXFxuMTM0NzpcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0aWYgKCEoZmF1bHQgXFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkpIHtcXG4xMzUwOlxcdFxcdFxcdGNvdW50X3ZtX3ZtYV9sb2NrX2V2ZW50KFZNQV9MT0NLX1NVQ0NFU1MpO1xcbjEzNTE6XFx0XFx0XFx0Z290byBkb25lO1xcbjEzNTI6XFx0XFx0fVxcbjEzNTM6XFx0XFx0Y291bnRfdm1fdm1hX2xvY2tfZXZlbnQoVk1BX0xPQ0tfUkVUUlkpO1xcbjEzNTQ6XFx0XFx0aWYgKGZhdWx0IFxcdTAwMjYgVk1fRkFVTFRfTUFKT1IpXFxuMTM1NTpcXHRcXHRcXHRmbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVEO1xcbjEzNTY6XFx0XFxuMTM1NzpcXHRcXHQvKiBRdWljayBwYXRoIHRvIHJlc3BvbmQgdG8gc2lnbmFscyAqL1xcbjEzNTg6XFx0XFx0aWYgKGZhdWx0X3NpZ25hbF9wZW5kaW5nKGZhdWx0LCByZWdzKSkge1xcbjEzNTk6XFx0XFx0XFx0aWYgKCF1c2VyX21vZGUocmVncykpXFxuMTM2MDpcXHRcXHRcXHRcXHRrZXJuZWxtb2RlX2ZpeHVwX29yX29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyxcXG4xMzYxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTSUdCVVMsIEJVU19BRFJFUlIsXFxuMTM2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9ERUZBVUxUX1BLRVkpO1xcbjEzNjM6XFx0XFx0XFx0cmV0dXJuO1xcbjEzNjQ6XFx0XFx0fVxcbjEzNjU6XFx0XFxuMTM2NjpcXHRcXHRpZiAoIXZtYV9sb2NrX3JldHJpZWQpIHtcXG4xMzY3OlxcdFxcdFxcdHZtYV9sb2NrX3JldHJpZWQgPSB0cnVlO1xcbjEzNjg6XFx0XFx0XFx0Z290byBsb2NrX3ZtYTtcXG4xMzY5OlxcdFxcdH1cXG4xMzcwOlxcdFxcbjEzNzE6XFx0bG9ja19tbWFwOlxcbjEzNzI6XFx0XFxuMTM3MzpcXHRyZXRyeTpcXG4xMzc0OlxcdFxcdHZtYSA9IGxvY2tfbW1fYW5kX2ZpbmRfdm1hKG1tLCBhZGRyZXNzLCByZWdzKTtcXG4xMzc1OlxcdFxcdGlmICh1bmxpa2VseSghdm1hKSkge1xcbjEzNzY6XFx0XFx0XFx0YmFkX2FyZWFfbm9zZW1hcGhvcmUocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7XFxuMTM3NzpcXHRcXHRcXHRyZXR1cm47XFxuMTM3ODpcXHRcXHR9XFxuMTM3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTU6MDAuMzM3NjAzMThaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTEzMjAyMDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB0aGUgcmV0cnkgbG9naWMgd2hlbiBkZWFsaW5nIHdpdGggcGVyLVZNQSBsb2Nrcy4gVGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBhIGB2bWFfbG9ja19yZXRyaWVkYCBmbGFnIGFuZCBhbHRlcmluZyB0aGUgY29udHJvbCBmbG93IHNvIHRoYXQgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBmYWxsaW5nIGJhY2sgdG8gYGxvY2tfbW1hcGAgYWZ0ZXIgYSBgVk1fRkFVTFRfUkVUUllgLCBpdCBhdHRlbXB0cyBgbG9ja192bWFgIG9uZSBtb3JlIHRpbWUgaWYgdGhlIGZsYWcgaXNuJ3Qgc2V0LiBUaGlzIGNoYW5nZSBpbXBhY3RzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgUG93ZXJQQywgUklTQy1WLCBTMzkwLCBhbmQgeDg2KS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBLTVNBTiB0ZXN0aW5nLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBLTVNBTiBpcyByZXNlcnZlZCBmb3Igc2NlbmFyaW9zIHdoZXJlIHdlJ3JlIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgbGV0J3MgYW5hbHl6ZTpcblxuRmlyc3QsIHRoZXJlJ3MgYWJzb2x1dGVseSBubyBldmlkZW5jZSBvZiBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB3aGljaCB3b3VsZCBiZSBhIGJpZyByZWQgZmxhZy4gTm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMsIGFuZCB3ZSdyZSBub3QgdG91Y2hpbmcgYW55IHNoYXJlZCBrZXJuZWwgc3RydWN0dXJlcy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBuZXcgc3RydWN0IGZpZWxkcywgb3IgYnVmZmVycyBhcmUgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIGB2bWFfbG9ja19yZXRyaWVkYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gZXZlcnkgYXJjaGl0ZWN0dXJlJ3MgY29kZS4gVGhpcyBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzICpwdXJlbHkqIGNvbmNlcm5lZCB3aXRoIGNvbnRyb2wgZmxvdyBhcm91bmQgbG9ja2luZyBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0J3MgZXNzZW50aWFsbHkgcmVmaW5pbmcgdGhlIHJldHJ5IG1lY2hhbmlzbS4gVGhlIGNvbmNlcm5zIGhlcmUgYXJlIHRoaW5ncyBsaWtlIGRlYWRsb2NrcywgaW5maW5pdGUgbG9vcHMsIGxvY2tpbmcgaW5jb25zaXN0ZW5jaWVzLCBhbmQgcmFjZSBjb25kaXRpb25zLiBCdXQsIHRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgdHJhZGl0aW9uYWxseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBydW50aW1lIHRlc3RpbmcsIG5vdCBLTVNBTi5cblxuTG9va2luZyBhdCB0aGUgS01TQU4gcnVsZXM6IFRoZSBrZXkgcG9pbnQgaXMgdGhhdCB3ZSAqc2hvdWxkbid0KiBydW4gS01TQU4gaWYgYSBidWcgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBkZXRlY3RvcnMuIFdlIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgKmFsbCogc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAqYmVmb3JlKiBiZWluZyByZWFkIG9yIGNvcGllZC4gTm9uZSBvZiB0aGVzZSBydWxlcyBhcmUgdmlvbGF0ZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHJpc2tzLCB0aGVyZWZvcmUgbm8gaW5mb3JtYXRpb24gbGVha3MuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGUgY2hhbmdlcyBhY3Jvc3MgYWxsIGFmZmVjdGVkIGFyY2hpdGVjdHVyZXMuIEluIGVhY2ggY2FzZSwgYHZtYV9sb2NrX3JldHJpZWRgIGlzIGEgcHJvcGVybHkgaW5pdGlhbGl6ZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cywgYW5kIHRoZSBwcmltYXJ5IGxvZ2ljIGFkanVzdHMgcGVyLVZNQSBsb2NrIGF0dGVtcHRzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYG1tYXBfbG9ja2AuIFRoaXMgaXMgYWxsIGdvb2QhXG5cblNvLCBpbiBteSBwcm9mZXNzaW9uYWwgb3BpbmlvbiwgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGF0J3MgdGhhdC4gTm93LCBsZXQncyBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTAsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MTU6MDkuNDY5NjI2OTM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlLXJldHJ5IG1lY2hhbmlzbSBmb3IgcGVyLVZNQSBsb2NrZWQgcGFnZSBmYXVsdHMgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyAoYXJtLCBhcm02NCwgbG9vbmdhcmNoLCBwb3dlcnBjLCByaXNjdiwgczM5MCwgeDg2KSB3aGVuIGhhbmRsaW5nIFZNX0ZBVUxUX1JFVFJZIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gbW1hcF9sb2NrLiBUaGUgYWRkZWQgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSAodm1hX2xvY2tfcmV0cmllZCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiB0aGUgc3RhY2sgaW4gZWFjaCBhcmNoaXRlY3R1cmUncyBwYWdlIGZhdWx0IGhhbmRsZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcywgYWx0ZXIgYnVmZmVyIGJvdW5kcywgb3IgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBsb2NraW5nIHNhbml0aXplcnMgKGUuZy4sIExPQ0tERVApIG9yIEtBU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZS1yZXRyeSBtZWNoYW5pc20gZm9yIHBlci1WTUEgbG9ja2VkIHBhZ2UgZmF1bHRzIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgKGFybSwgYXJtNjQsIGxvb25nYXJjaCwgcG93ZXJwYywgcmlzY3YsIHMzOTAsIHg4Nikgd2hlbiBoYW5kbGluZyBWTV9GQVVMVF9SRVRSWSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIG1tYXBfbG9jay4gVGhlIGFkZGVkIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgKHZtYV9sb2NrX3JldHJpZWQpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gdGhlIHN0YWNrIGluIGVhY2ggYXJjaGl0ZWN0dXJlJ3MgcGFnZSBmYXVsdCBoYW5kbGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMsIGFsdGVyIGJ1ZmZlciBib3VuZHMsIG9yIHJlYWQgdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgbG9ja2luZyBzYW5pdGl6ZXJzIChlLmcuLCBMT0NLREVQKSBvciBLQVNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[1] Phase: Succeeded StartedAt: 2026-09-11 03:15:22 +0000 UTC FinishedAt: 2026-09-11 03:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 03:15:22 +0000 UTC FinishedAt: 2026-09-11 03:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2] Phase: Succeeded StartedAt: 2026-09-11 03:15:22 +0000 UTC FinishedAt: 2026-09-11 06:58:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 03:15:22 +0000 UTC FinishedAt: 2026-09-11 06:58:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 03:15:22 +0000 UTC FinishedAt: 2026-09-11 03:15:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 03:15:22 +0000 UTC FinishedAt: 2026-09-11 03:15:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowcjng9/series-workflowcjng9-convert-artifact-3111379259/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 03:15:32 +0000 UTC FinishedAt: 2026-09-11 03:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 03:15:33 +0000 UTC FinishedAt: 2026-09-11 03:36: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:*b39772ca-1ddd-4712-a573-10a39cb63a17,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-workflowcjng9/series-workflowcjng9-convert-artifact-3111379259/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": "fae7c996-923c-4f2c-804a-b298c865b49f", "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-workflowcjng9/series-workflowcjng9-build-action-2303258489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 03:15:33 +0000 UTC FinishedAt: 2026-09-11 03:36:17 +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:*b39772ca-1ddd-4712-a573-10a39cb63a17,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-workflowcjng9/series-workflowcjng9-convert-artifact-3111379259/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": "fae7c996-923c-4f2c-804a-b298c865b49f", "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-workflowcjng9/series-workflowcjng9-build-action-2303258489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 03:36:43 +0000 UTC FinishedAt: 2026-09-11 03:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 03:36:43 +0000 UTC FinishedAt: 2026-09-11 03:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 03:36:43 +0000 UTC FinishedAt: 2026-09-11 03:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 03:36:43 +0000 UTC FinishedAt: 2026-09-11 03:36:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowcjng9/series-workflowcjng9-convert-artifact-494884754/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 03:36:54 +0000 UTC FinishedAt: 2026-09-11 03:38:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 03:36:54 +0000 UTC FinishedAt: 2026-09-11 03:38:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fae7c996-923c-4f2c-804a-b298c865b49f,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-workflowcjng9/series-workflowcjng9-build-action-2303258489/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-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 03:38:50 +0000 UTC FinishedAt: 2026-09-11 03:38:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 03:38:50 +0000 UTC FinishedAt: 2026-09-11 03:38:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 03:38:50 +0000 UTC FinishedAt: 2026-09-11 03:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 03:38:50 +0000 UTC FinishedAt: 2026-09-11 03:55:03 +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:*b39772ca-1ddd-4712-a573-10a39cb63a17,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-workflowcjng9/series-workflowcjng9-convert-artifact-494884754/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": "527792c3-b1e7-4615-ba8d-e61054aae424", "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-workflowcjng9/series-workflowcjng9-build-action-2966934566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 03:38:50 +0000 UTC FinishedAt: 2026-09-11 03:54:53 +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:*b39772ca-1ddd-4712-a573-10a39cb63a17,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-workflowcjng9/series-workflowcjng9-convert-artifact-494884754/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": "527792c3-b1e7-4615-ba8d-e61054aae424", "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-workflowcjng9/series-workflowcjng9-build-action-2966934566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 03:55:03 +0000 UTC FinishedAt: 2026-09-11 03:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 03:55:03 +0000 UTC FinishedAt: 2026-09-11 03:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 03:55:03 +0000 UTC FinishedAt: 2026-09-11 03:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 03:55:03 +0000 UTC FinishedAt: 2026-09-11 03:56:49 +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:*527792c3-b1e7-4615-ba8d-e61054aae424,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-workflowcjng9/series-workflowcjng9-build-action-2966934566/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-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 03:56:58 +0000 UTC FinishedAt: 2026-09-11 06:58:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 03:56:58 +0000 UTC FinishedAt: 2026-09-11 06:58:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fae7c996-923c-4f2c-804a-b298c865b49f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*527792c3-b1e7-4615-ba8d-e61054aae424,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-workflowcjng9/series-workflowcjng9-build-action-2303258489/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-workflowcjng9/series-workflowcjng9-build-action-2966934566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 03:56:58 +0000 UTC FinishedAt: 2026-09-11 03:57:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 03:56:58 +0000 UTC FinishedAt: 2026-09-11 03:57:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcjng9/series-workflowcjng9-convert-artifact-72960999/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 03:56:58 +0000 UTC FinishedAt: 2026-09-11 03:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 03:56:58 +0000 UTC FinishedAt: 2026-09-11 03:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 03:56:58 +0000 UTC FinishedAt: 2026-09-11 03:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 03:57:08 +0000 UTC FinishedAt: 2026-09-11 06:58:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjng9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3628c3df6cd2797b34714d23113cd44cb30801e7","config_name":"upstream-apparmor-kasan.config","series_id":"29a2ef90-7be2-4983-bb3b-adcf4ec9353d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 03:57:08 +0000 UTC FinishedAt: 2026-09-11 06:58:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fae7c996-923c-4f2c-804a-b298c865b49f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*527792c3-b1e7-4615-ba8d-e61054aae424,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-workflowcjng9/series-workflowcjng9-build-action-2303258489/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-workflowcjng9/series-workflowcjng9-build-action-2966934566/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-workflowcjng9/series-workflowcjng9-convert-artifact-72960999/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,}