Name: series-workflow26pvs Phase: Succeeded StartedAt: 2026-09-03 20:23:44 +0000 UTC FinishedAt: 2026-09-04 00:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[0] Phase: Succeeded StartedAt: 2026-09-03 20:23:44 +0000 UTC FinishedAt: 2026-09-03 20:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 20:23:44 +0000 UTC FinishedAt: 2026-09-03 20:27:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "PREEMPT_RT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "PREEMPT_RT" ], "series_id": "4e6cab48-8b04-4107-bacd-d2bfc8bf94eb" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_rmap_age_gfn_range", "kvm_rmap_lock_readonly", "kvm_rmap_unlock_readonly", "kvm_rmap_lock", "kvm_rmap_unlock", "kvm_age_gfn", "kvm_test_age_gfn", "pte_list_add", "pte_list_remove", "kvm_zap_all_rmap_sptes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrX3JlYWRvbmx5JiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrJiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9jayYjMzQ7LAogICAgJiMzNDtrdm1fYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fdGVzdF9hZ2VfZ2ZuJiMzNDssCiAgICAmIzM0O3B0ZV9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9yZW1vdmUmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9hbGxfcm1hcF9zcHRlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdmNGQ2NTRkNmRjOTU3Zjg2YzE5NzFhYjU1ZGU5Zjg2MmEzZGQwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjY6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdVxuICAqL1xuICNkZWZpbmUgS1ZNX1JNQVBfTUFOWVx0QklUKDApXG4gXG4mIzQzOyNpZm5kZWYgQ09ORklHX1BSRUVNUFRfUlRcbiAvKlxuICAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xuICAqIG9wZXJhdGVzIHdpdGggbW11X2xvY2sgaGVsZCBmb3Igd3JpdGUpLCBidXQgcm1hcHMgY2FuIGJlIHdhbGtlZCB3aXRob3V0XG5AQCAtMTAwOCw3ICYjNDM7MTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuICAqIGFjdHVhbCBsb2NraW5nIGlzIHRoZSBzYW1lLCBidXQgdGhlIGNhbGxlciBpcyBkaXNhbGxvd2VkIGZyb20gbW9kaWZ5aW5nIHRoZVxuICAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJtYXBfdmFsO1xuIFxuQEAgLTEwMzIsNiAmIzQzOzEwMzQsMzUgQEAgc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4gXHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCk7XG4mIzQzO31cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuJiM0Mzt7XG4mIzQzO1x0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCwgbmV3X3ZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvbGRfdmFsKSB7IH1cbiYjNDM7I2VuZGlmXG4gXG4gLypcbiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS5cbkBAIC0xNzQ1LDExICYjNDM7MTc3NiwxNSBAQCBzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGdmbl90IGdmbjtcbiBcdGludCBsZXZlbDtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXG4mIzQzO1x0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKGxldmVsID0gUEdfTEVWRUxfNEs7IGxldmVsIFx1MDAzYz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwmIzQzOyYjNDM7KSB7XG4gXHRcdGZvciAoZ2ZuID0gcmFuZ2UtXHUwMDNlc3RhcnQ7IGdmbiBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kO1xuIFx0XHQgICAgIGdmbiAmIzQzOz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHtcbiBcdFx0XHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cdTAwM2VzbG90KTtcbi1cdFx0XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkocm1hcF9oZWFkKTtcbiYjNDM7XHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcbiBcbiBcdFx0XHRmb3JfZWFjaF9ybWFwX3NwdGVfbG9ja2xlc3Mocm1hcF92YWwsIFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xuIFx0XHRcdFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9ybWFwX2FnZV9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9jayYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2smIzM0OywKICAgICYjMzQ7a3ZtX2FnZV9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3Rlc3RfYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cHRlX2xpc3RfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2t2bV96YXBfYWxsX3JtYXBfc3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcmV2ZXJzZS1tYXBwaW5nIChybWFwKSBsb2NraW5nIGxvZ2ljLCBhZGRpbmcgQ09ORklHX1BSRUVNUFRfUlQgc3VwcG9ydCB3aXRoIGxvY2tkZXAgYXNzZXJ0aW9ucyAobG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkL2xvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUpIGFuZCBtb2RpZnlpbmcgdGhlIHJtYXAgYWdpbmcgYW5kIGxvY2tpbmcgcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTVUgbm90aWZpZXJzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBpbnZhcmlhbnQgY2hlY2tzIGFuZCBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyN2Y0ZDY1NGQ2ZGM5NTdmODZjMTk3MWFiNTVkZTlmODYyYTNkZDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMDoyNjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdQogICovCiAjZGVmaW5lIEtWTV9STUFQX01BTlkJQklUKDApCiAKJiM0MzsjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUCiAvKgogICogcm1hcHMgYW5kIFBURSBsaXN0cyBhcmUgbW9zdGx5IHByb3RlY3RlZCBieSBtbXVfbG9jayAodGhlIHNoYWRvdyBNTVUgYWx3YXlzCiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dApAQCAtMTAwOCw3ICYjNDM7MTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQogICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlCiAgKiBybWFwLCBhbmQgc28gdGhlIHVubG9jayBmbG93IGlzIGEgbm9wIGlmIHRoZSBybWFwIGlzL3dhcyBlbXB0eS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpCiB7CiAJdW5zaWduZWQgbG9uZyBybWFwX3ZhbDsKIApAQCAtMTAzMiw2ICYjNDM7MTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCwKIAlfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7cm1hcF9oZWFkLSZndDt2YWwpOwomIzQzO30KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJcmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCSAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCSAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgmYW1wO3JtYXBfaGVhZC0mZ3Q7dmFsLCBuZXdfdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZCgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS4KQEAgLTE3NDUsMTEgJiM0MzsxNzc2LDE1IEBAIHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAogCWdmbl90IGdmbjsKIAlpbnQgbGV2ZWw7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlQKJiM0MzsJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOyNlbmRpZgomIzQzOwogCWZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgJmx0Oz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwmIzQzOyYjNDM7KSB7CiAJCWZvciAoZ2ZuID0gcmFuZ2UtJmd0O3N0YXJ0OyBnZm4gJmx0OyByYW5nZS0mZ3Q7ZW5kOwogCQkgICAgIGdmbiAmIzQzOz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHsKIAkJCXJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLSZndDtzbG90KTsKLQkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShybWFwX2hlYWQpOwomIzQzOwkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7CiAKIAkJCWZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgJmFtcDtpdGVyLCBzcHRlcCwgb2xkX3NwdGUpIHsKIAkJCQlpZiAoIWlzX2FjY2Vzc2VkX3NwdGUob2xkX3NwdGUpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzM2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBQcmVlbXB0X1JUIENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB0aGUgcmVsZXZhbnQgdG9vbHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEkgc2VlIHRoZSBwYXRjaCBmb2N1c2VzIG9uIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGludGVyZXN0IOKAkyBhbnl0aGluZyB0b3VjaGluZyB0aGUgTU1VIGluIEtWTSBpcyB1c3VhbGx5IHdvcnRoIGEgY2FyZWZ1bCBsb29rLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1c2luZyBgI2lmbmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYW5kIGAjZWxzZWAvYCNlbmRpZmAgYmxvY2tzIGFyb3VuZCBzZXZlcmFsIGZ1bmN0aW9ucywgbmFtZWx5IGBrdm1fcm1hcF9nZXRgLCBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBhbmQgdGhlIHJlYWQtb25seSB2YXJpYW50cy4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBSZWFsLVRpbWUgUHJlZW1wdGlvbiAoQ09ORklHX1BSRUVNUFRfUlQpIGNvbmZpZ3VyYXRpb24uIEl0IGFsc28gYXBwZWFycyB0aGF0IGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYSBga3ZtYCBhcmd1bWVudC4gVGhhdCYjMzk7cyBhIHN0cnVjdHVyYWwgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC4KCkZ1cnRoZXJtb3JlLCBJIG5vdGUgdGhlIGFkZGl0aW9uIHdpdGhpbiBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSgpYC4gVGhlcmUmIzM5O3Mgbm93IGEgcmVhZCBsb2NrIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYmxvY2s6IGBndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7YCBhbmQgYSBjYWxsIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgcmVhZCBsb2NrIGlzIGxpa2VseSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgdGhlIGJhbmUgb2YgcmVhbC10aW1lIHN5c3RlbXMuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9lcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIHRvIHNlZSBob3cgdGhlIGNoYW5nZXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0fVxuMTAwMTpcdFxuMTAwMjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuMTAwMzpcdHtcbjEwMDQ6XHRcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwpIFx1MDAyNiB+S1ZNX1JNQVBfTE9DS0VEO1xuMTAwNTpcdH1cbjEwMDY6XHRcbjEwMDc6XHQvKlxuMTAwODpcdCAqIElmIG1tdV9sb2NrIGlzbiYjMzk7dCBoZWxkLCBybWFwcyBjYW4gb25seSBiZSBsb2NrZWQgaW4gcmVhZC1vbmx5IG1vZGUuICBUaGVcbjEwMDk6XHQgKiBhY3R1YWwgbG9ja2luZyBpcyB0aGUgc2FtZSwgYnV0IHRoZSBjYWxsZXIgaXMgZGlzYWxsb3dlZCBmcm9tIG1vZGlmeWluZyB0aGVcbjEwMTA6XHQgKiBybWFwLCBhbmQgc28gdGhlIHVubG9jayBmbG93IGlzIGEgbm9wIGlmIHRoZSBybWFwIGlzL3dhcyBlbXB0eS5cbjEwMTE6XHQgKi9cbjEwMTI6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbjEwMTM6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4xMDE0Olx0e1xuMTAxNTpcdFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcbjEwMTY6XHRcbjEwMTc6XHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuMTAxODpcdFx0cm1hcF92YWwgPSBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcbjEwMTk6XHRcbjEwMjA6XHRcdGlmICghcm1hcF92YWwpXG4xMDIxOlx0XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4xMDIyOlx0XG4xMDIzOlx0XHRyZXR1cm4gcm1hcF92YWw7XG4xMDI0Olx0fVxuMTAyNTpcdFxuMTAyNjpcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuMTAyNzpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpXG4xMDI4Olx0e1xuMTAyOTpcdFx0aWYgKCFvbGRfdmFsKVxuMTAzMDpcdFx0XHRyZXR1cm47XG4xMDMxOlx0XG4xMDMyOlx0XHRLVk1fTU1VX1dBUk5fT04ob2xkX3ZhbCAhPSBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKSk7XG4xMDMzOlx0XG4xMDM0Olx0XHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuMTAzNTpcdFx0cHJlZW1wdF9lbmFibGUoKTtcbjEwMzY6XHR9XG4xMDM3Olx0I2Vsc2VcbjEwMzg6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbjEwMzk6XHR7XG4xMDQwOlx0XHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZybWFwX2hlYWQtXHUwMDNldmFsKTtcbjEwNDE6XHR9XG4xMDQyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4xMDQzOlx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuMTA0NDpcdHtcbjEwNDU6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbjEwNDY6XHRcdHJldHVybiBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKTtcbjEwNDc6XHR9XG4xMDQ4Olx0XG4xMDQ5Olx0c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbjEwNTA6XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbjEwNTE6XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuMTA1MjpcdHtcbjEwNTM6XHRcdGF0b21pY19sb25nX3NldF9yZWxlYXNlKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwsIG5ld192YWwpO1xuMTA1NDpcdH1cbjEwNTU6XHRcbjEwNTY6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbjEwNTc6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4xMDU4Olx0e1xuMTA1OTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4xMDYwOlx0XHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4xMDYxOlx0fVxuMTA2MjpcdFxuMTA2MzpcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuMTA2NDpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxuMTA2NTpcdCNlbmRpZlxuMTA2NjpcdFxuMTA2NzpcdC8qXG4xMDY4Olx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGluIHRoZSBybWFwIGNoYWluLCBub3QgY291bnRpbmcgdGhlIG5ldyBvbmUuXG4xMDY5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGBrdm1fcm1hcF9nZXRgIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhlIGNvZGUsIHRyYWNpbmcgdGhlIHBhdGgsIGFuZCBJJiMzOTt2ZSBoaXQgYGt2bV9ybWFwX2dldGAuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgY2VudHJhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBLVk0mIzM5O3MgcmV2ZXJzZSBtYXBwaW5nLiBCZWZvcmUgSSBnZXQgKnRvbyogaW52b2x2ZWQgaW4gZGlzc2VjdGluZyB0aGlzIHNwZWNpZmljIGNhbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gSSBjYW4mIzM5O3QganVzdCBkaXZlIGluIHdpdGhvdXQgY29udGV4dC4KClRoZXJlZm9yZSwgSSB3aWxsIGdvIGJhY2sgdG8gdGhlIHNlY3Rpb24gKnByZWNlZGluZyogdGhlIGNhbGwuIFRoZSBtb3N0IGxvZ2ljYWwgYXBwcm9hY2ggaXMgdG8gY2hlY2sgdGhlIGxpbmVzIHJpZ2h0IGJlZm9yZS4gTGluZXMgOTAwLTEwMDAgc2VlbSBsaWtlIGEgZ29vZCBjaHVuayB0byBleGFtaW5lLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIHZhcmlhYmxlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQganVzdCBiZWZvcmUsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiB1c2UsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgbGFyZ2VyIG1vZHVsZS4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB3aHkgYGt2bV9ybWFwX2dldGAgaXMgZXZlbiAqbmVlZGVkKiBhdCB0aGlzIHBvaW50LiBXaXRoIHRoaXMgYmFja2dyb3VuZCBpbiBwbGFjZSwgSSB3aWxsIGJlIGluIGEgbXVjaCBiZXR0ZXIgcG9zaXRpb24gdG8gYXBwcmVjaWF0ZSB0aGUgcm9sZSBvZiBga3ZtX3JtYXBfZ2V0YCBhbmQgaXRzIGltcGFjdC4gSSYjMzk7bGwgYmUgbW9yZSBjb25maWRlbnQgdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgdml0YWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgYW5kIHRoYXQgdGhlIGZsb3cgbWFrZXMgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0ICogcm1hcHMgYW5kIFBURSBsaXN0cyBhcmUgbW9zdGx5IHByb3RlY3RlZCBieSBtbXVfbG9jayAodGhlIHNoYWRvdyBNTVUgYWx3YXlzXG4gOTAxOlx0ICogb3BlcmF0ZXMgd2l0aCBtbXVfbG9jayBoZWxkIGZvciB3cml0ZSksIGJ1dCBybWFwcyBjYW4gYmUgd2Fsa2VkIHdpdGhvdXRcbiA5MDI6XHQgKiBob2xkaW5nIG1tdV9sb2NrIHNvIGxvbmcgYXMgdGhlIGNhbGxlciBjYW4gdG9sZXJhdGUgU1BURXMgaW4gdGhlIHJtYXAgY2hhaW5cbiA5MDM6XHQgKiBiZWluZyB6YXBwZWQvZHJvcHBlZCBfd2hpbGUgdGhlIHJtYXAgaXMgbG9ja2VkXy5cbiA5MDQ6XHQgKlxuIDkwNTpcdCAqIE90aGVyIHRoYW4gdGhlIEtWTV9STUFQX0xPQ0tFRCBmbGFnLCBtb2RpZmljYXRpb25zIHRvIHJtYXAgZW50cmllcyBtdXN0IGJlXG4gOTA2Olx0ICogZG9uZSB3aGlsZSBob2xkaW5nIG1tdV9sb2NrIGZvciB3cml0ZS4gIFRoaXMgYWxsb3dzIGEgdGFzayB3YWxraW5nIHJtYXBzXG4gOTA3Olx0ICogd2l0aG91dCBob2xkaW5nIG1tdV9sb2NrIHRvIGNvbmN1cnJlbnRseSB3YWxrIHRoZSBzYW1lIGVudHJpZXMgYXMgYSB0YXNrXG4gOTA4Olx0ICogdGhhdCBpcyBob2xkaW5nIG1tdV9sb2NrIGJ1dCBfbm90XyB0aGUgcm1hcCBsb2NrLiAgTmVpdGhlciB0YXNrIHdpbGwgbW9kaWZ5XG4gOTA5Olx0ICogdGhlIHJtYXBzLCB0aHVzIHRoZSB3YWxrcyBhcmUgc3RhYmxlLlxuIDkxMDpcdCAqXG4gOTExOlx0ICogQXMgYWxsdWRlZCB0byBhYm92ZSwgU1BURXMgaW4gcm1hcHMgYXJlIF9ub3RfIHByb3RlY3RlZCBieSBLVk1fUk1BUF9MT0NLRUQsXG4gOTEyOlx0ICogb25seSB0aGUgcm1hcCBjaGFpbnMgdGhlbXNlbHZlcyBhcmUgcHJvdGVjdGVkLiAgRS5nLiBob2xkaW5nIGFuIHJtYXAmIzM5O3MgbG9ja1xuIDkxMzpcdCAqIGVuc3VyZXMgYWxsIFwmIzM0O3N0cnVjdCBwdGVfbGlzdF9kZXNjXCYjMzQ7IGZpZWxkcyBhcmUgc3RhYmxlLlxuIDkxNDpcdCAqL1xuIDkxNTpcdCNkZWZpbmUgS1ZNX1JNQVBfTE9DS0VEXHRCSVQoMSlcbiA5MTY6XHRcbiA5MTc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2t2bV9ybWFwX2xvY2soc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiA5MTg6XHR7XG4gOTE5Olx0XHR1bnNpZ25lZCBsb25nIG9sZF92YWwsIG5ld192YWw7XG4gOTIwOlx0XG4gOTIxOlx0XHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XG4gOTIyOlx0XG4gOTIzOlx0XHQvKlxuIDkyNDpcdFx0ICogRWxpZGUgdGhlIGxvY2sgaWYgdGhlIHJtYXAgaXMgZW1wdHksIGFzIGxvY2tsZXNzIHdhbGtlcnMgKHJlYWQtb25seVxuIDkyNTpcdFx0ICogbW9kZSkgZG9uJiMzOTt0IG5lZWQgdG8gKGFuZCBjYW4mIzM5O3QpIHdhbGsgYW4gZW1wdHkgcm1hcCwgbm9yIGNhbiB0aGV5IGFkZFxuIDkyNjpcdFx0ICogZW50cmllcyB0byB0aGUgcm1hcC4gIEkuZS4gdGhlIG9ubHkgcGF0aHMgdGhhdCBwcm9jZXNzIGVtcHR5IHJtYXBzXG4gOTI3Olx0XHQgKiBkbyBzbyB3aGlsZSBob2xkaW5nIG1tdV9sb2NrIGZvciB3cml0ZSwgYW5kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4gOTI4Olx0XHQgKi9cbiA5Mjk6XHRcdG9sZF92YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwpO1xuIDkzMDpcdFx0aWYgKCFvbGRfdmFsKVxuIDkzMTpcdFx0XHRyZXR1cm4gMDtcbiA5MzI6XHRcbiA5MzM6XHRcdGRvIHtcbiA5MzQ6XHRcdFx0LypcbiA5MzU6XHRcdFx0ICogSWYgdGhlIHJtYXAgaXMgbG9ja2VkLCB3YWl0IGZvciBpdCB0byBiZSB1bmxvY2tlZCBiZWZvcmVcbiA5MzY6XHRcdFx0ICogdHJ5aW5nIGFjcXVpcmUgdGhlIGxvY2ssIGUuZy4gdG8gYXZvaWQgYm91bmNpbmcgdGhlIGNhY2hlXG4gOTM3Olx0XHRcdCAqIGxpbmUuXG4gOTM4Olx0XHRcdCAqL1xuIDkzOTpcdFx0XHR3aGlsZSAob2xkX3ZhbCBcdTAwMjYgS1ZNX1JNQVBfTE9DS0VEKSB7XG4gOTQwOlx0XHRcdFx0Y3B1X3JlbGF4KCk7XG4gOTQxOlx0XHRcdFx0b2xkX3ZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCk7XG4gOTQyOlx0XHRcdH1cbiA5NDM6XHRcbiA5NDQ6XHRcdFx0LypcbiA5NDU6XHRcdFx0ICogUmVjaGVjayBmb3IgYW4gZW1wdHkgcm1hcCwgaXQgbWF5IGhhdmUgYmVlbiBwdXJnZWQgYnkgdGhlXG4gOTQ2Olx0XHRcdCAqIHRhc2sgdGhhdCBoZWxkIHRoZSBsb2NrLlxuIDk0NzpcdFx0XHQgKi9cbiA5NDg6XHRcdFx0aWYgKCFvbGRfdmFsKVxuIDk0OTpcdFx0XHRcdHJldHVybiAwO1xuIDk1MDpcdFxuIDk1MTpcdFx0XHRuZXdfdmFsID0gb2xkX3ZhbCB8IEtWTV9STUFQX0xPQ0tFRDtcbiA5NTI6XHRcdC8qXG4gOTUzOlx0XHQgKiBVc2UgdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIHRvIHByZXZlbnQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgcm1hcFxuIDk1NDpcdFx0ICogZnJvbSBiZWluZyByZW9yZGVyZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBjcmVhdGVkIGJ5XG4gOTU1Olx0XHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cbiA5NTY6XHRcdCAqXG4gOTU3Olx0XHQgKiBQYWlycyB3aXRoIHRoZSBhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgpIGluIGt2bV9ybWFwX3VubG9jaygpLlxuIDk1ODpcdFx0ICpcbiA5NTk6XHRcdCAqIEZvciB0aGUgIW9sZF92YWwgY2FzZSwgbm8gb3JkZXJpbmcgaXMgbmVlZGVkLCBhcyB0aGVyZSBpcyBubyBybWFwXG4gOTYwOlx0XHQgKiB0byB3YWxrLlxuIDk2MTpcdFx0ICovXG4gOTYyOlx0XHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZShcdTAwMjZybWFwX2hlYWQtXHUwMDNldmFsLCBcdTAwMjZvbGRfdmFsLCBuZXdfdmFsKSk7XG4gOTYzOlx0XG4gOTY0Olx0XHQvKlxuIDk2NTpcdFx0ICogUmV0dXJuIHRoZSBvbGQgdmFsdWUsIGkuZS4gX3dpdGhvdXRfIHRoZSBMT0NLRUQgYml0IHNldC4gIEl0JiMzOTtzXG4gOTY2Olx0XHQgKiBpbXBvc3NpYmxlIGZvciB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIDAgKHNlZSBhYm92ZSksIGkuZS4gdGhlIHJlYWQtXG4gOTY3Olx0XHQgKiBvbmx5IHVubG9jayBmbG93IGNhbiYjMzk7dCBnZXQgYSBmYWxzZSBwb3NpdGl2ZSBhbmQgZmFpbCB0byB1bmxvY2suXG4gOTY4Olx0XHQgKi9cbiA5Njk6XHRcdHJldHVybiBvbGRfdmFsO1xuIDk3MDpcdH1cbiA5NzE6XHRcbiA5NzI6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbiA5NzM6XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4gOTc0Olx0e1xuIDk3NTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIDk3NjpcdFxuIDk3NzpcdFx0cmV0dXJuIF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xuIDk3ODpcdH1cbiA5Nzk6XHRcbiA5ODA6XHRzdGF0aWMgdm9pZCBfX2t2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuIDk4MTpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgdmFsKVxuIDk4MjpcdHtcbiA5ODM6XHRcdEtWTV9NTVVfV0FSTl9PTih2YWwgXHUwMDI2IEtWTV9STUFQX0xPQ0tFRCk7XG4gOTg0Olx0XHQvKlxuIDk4NTpcdFx0ICogRW5zdXJlIHRoYXQgYWxsIGFjY2Vzc2VzIHRvIHRoZSBybWFwIGhhdmUgY29tcGxldGVkIGJlZm9yZSB1bmxvY2tpbmdcbiA5ODY6XHRcdCAqIHRoZSBybWFwLlxuIDk4NzpcdFx0ICpcbiA5ODg6XHRcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cbiA5ODk6XHRcdCAqL1xuIDk5MDpcdFx0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCwgdmFsKTtcbiA5OTE6XHR9XG4gOTkyOlx0XG4gOTkzOlx0c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbiA5OTQ6XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbiA5OTU6XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuIDk5NjpcdHtcbiA5OTc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiA5OTg6XHRcbiA5OTk6XHRcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgbmV3X3ZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIEtWTSBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbiBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQgbm93LCBJIHRoaW5rIEkgbmVlZCB0byB0dXJuIG15IGF0dGVudGlvbiB0byB0aGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdCBhcm91bmQgbGluZSAxNzc2LiBUaGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZ3JvayByZXNpZGVzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgcm91dGluZSBoYW5kbGVzIGFnaW5nIG9mIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKEdGTnMpIHdpdGhpbiBhIHNwZWNpZmljIHJhbmdlLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHdpdGhpbiB0aGUgS1ZNIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjU6XHRcbjE3NjY6XHRzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbjE3Njc6XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbjE3Njg6XHRcdFx0XHRcdCAgIGJvb2wgdGVzdF9vbmx5KVxuMTc2OTpcdHtcbjE3NzA6XHRcdHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQ7XG4xNzcxOlx0XHRzdHJ1Y3Qgcm1hcF9pdGVyYXRvciBpdGVyO1xuMTc3MjpcdFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcbjE3NzM6XHRcdHU2NCBvbGRfc3B0ZSwgbmV3X3NwdGU7XG4xNzc0Olx0XHRib29sIHlvdW5nID0gZmFsc2U7XG4xNzc1Olx0XHR1NjQgKnNwdGVwO1xuMTc3NjpcdFx0Z2ZuX3QgZ2ZuO1xuMTc3NzpcdFx0aW50IGxldmVsO1xuMTc3ODpcdFxuMTc3OTpcdCNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVFxuMTc4MDpcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuMTc4MTpcdCNlbmRpZlxuMTc4MjpcdFxuMTc4MzpcdFx0Zm9yIChsZXZlbCA9IFBHX0xFVkVMXzRLOyBsZXZlbCBcdTAwM2M9IEtWTV9NQVhfSFVHRVBBR0VfTEVWRUw7IGxldmVsJiM0MzsmIzQzOykge1xuMTc4NDpcdFx0XHRmb3IgKGdmbiA9IHJhbmdlLVx1MDAzZXN0YXJ0OyBnZm4gXHUwMDNjIHJhbmdlLVx1MDAzZWVuZDtcbjE3ODU6XHRcdFx0ICAgICBnZm4gJiM0Mzs9IEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKSB7XG4xNzg2Olx0XHRcdFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBsZXZlbCwgcmFuZ2UtXHUwMDNlc2xvdCk7XG4xNzg3Olx0XHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcbjE3ODg6XHRcbjE3ODk6XHRcdFx0XHRmb3JfZWFjaF9ybWFwX3NwdGVfbG9ja2xlc3Mocm1hcF92YWwsIFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xuMTc5MDpcdFx0XHRcdFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcbjE3OTE6XHRcdFx0XHRcdFx0Y29udGludWU7XG4xNzkyOlx0XG4xNzkzOlx0XHRcdFx0XHRpZiAodGVzdF9vbmx5KSB7XG4xNzk0Olx0XHRcdFx0XHRcdGt2bV9ybWFwX3VubG9ja19yZWFkb25seShybWFwX2hlYWQsIHJtYXBfdmFsKTtcbjE3OTU6XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4xNzk2Olx0XHRcdFx0XHR9XG4xNzk3Olx0XG4xNzk4Olx0XHRcdFx0XHRpZiAoc3B0ZV9hZF9lbmFibGVkKG9sZF9zcHRlKSlcbjE3OTk6XHRcdFx0XHRcdFx0bmV3X3NwdGUgPSBvbGRfc3B0ZSBcdTAwMjYgfnNoYWRvd19hY2Nlc3NlZF9tYXNrO1xuMTgwMDpcdFx0XHRcdFx0ZWxzZVxuMTgwMTpcdFx0XHRcdFx0XHRuZXdfc3B0ZSA9IG1hcmtfc3B0ZV9mb3JfYWNjZXNzX3RyYWNrKG9sZF9zcHRlKTtcbjE4MDI6XHRcbjE4MDM6XHRcdFx0XHRcdC8qXG4xODA0Olx0XHRcdFx0XHQgKiBEb24mIzM5O3QgYm90aGVyIHJldHJ5aW5nIGlmIHRoZSBDTVBYQ0hHIGZhaWxzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYC4gUmlnaHQsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIEtWTSBNTVUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNhbGx5IGZvciB4ODYvYW1kNjQuIFRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IENhbiBJIGFjdHVhbGx5IGdldCB0byB0aGlzIHRoaW5nIHdpdGggZnV6emluZz8gQW5kIG9mIGNvdXJzZSwgS1ZNIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHZpYSBgL2Rldi9rdm1gLiBTeXprYWxsZXIgaGl0cyB0aGF0IGhhcmQsIHNvIHRoZSBhbnN3ZXIgaXMgYSBzb2xpZCAmIzM0O1llcywgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSYjMzQ7LgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6ICpob3cqIGRvIEkgcmVhY2ggaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIHNpdGVzLiBUaW1lIHRvIHVzZSBgZ3JlcHBlcmAuIEkmIzM5O2xsIHJ1biB0aGUgc2VhcmNoIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29udGV4dCBJIG5lZWQgdG8gY3JhZnQgZWZmZWN0aXZlIGZ1enppbmcgaW5wdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE3NTg9c3RhdGljIHZvaWQgcm1hcF9hZGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc2NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc2NjpzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc2Ny1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE4MjQ9Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MzEtXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTgzMjpcdFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MzMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xODM3PWJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4NDctXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTg0ODpcdFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCB0cnVlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTg0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gTU1VIE5vdGlmaWVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgY2FsbGJhY2tzLiBUaGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBLVk0gTU1VIG5vdGlmaWVyIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBrdm1fbW11X25vdGlmaWVyX29wc2Agc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLCBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LgoKTGV0JiMzOTtzIHNlZeKApiB0aGVzZSBhcmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIE1NVSBub3RpZmllciBob29rcy4gSSYjMzk7bSB0aGlua2luZywgYHRlc3RfeW91bmdgIGFuZCBgY2xlYXJfeW91bmdgIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMsIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWdpbmcsIG9yIHBlcmhhcHMgZHVyaW5nIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgY2FsbHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgbWFkdmlzZSBhbmQgcmVjbGFpbS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcm1hcCBsb2NraW5nIHdvcmtzIGluIHJlbGF0aW9uIHRvIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAsIGFuZCBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCBhcmUgdXNlZCB0aHJvdWdob3V0IGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgaXMgcHJvdGVjdGVkIGR1cmluZyB0aGVzZSBNTVUgbm90aWZpZXIgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3JtYXBfKGxvY2t8dW5sb2NrKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz04NzQ9c3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90X2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05MTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjkxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2t2bV9ybWFwX2xvY2soc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTE4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk1NC1cdCAqIGZyb20gYmVpbmcgcmVvcmRlcmVkIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gY3JlYXRlZCBieVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5NTU6XHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU2LVx0ICpcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTU3Olx0ICogUGFpcnMgd2l0aCB0aGUgYXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoKSBpbiBrdm1fcm1hcF91bmxvY2soKS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU4LVx0ICpcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3MS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTcyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzMtXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5Nzc6XHRyZXR1cm4gX19rdm1fcm1hcF9sb2NrKHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3OC19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTgwOnN0YXRpYyB2b2lkIF9fa3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4MS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4Ny1cdCAqXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk4ODpcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTg5LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk5MzpzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTQtXHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk5OTpcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgbmV3X3ZhbCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMDAtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTEtICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMTI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTMtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxNy1cdHByZWVtcHRfZGlzYWJsZSgpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDE4Olx0cm1hcF92YWwgPSBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxOS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMjUtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMjY6c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMjctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMzMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMzQ6XHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDM1LVx0cHJlZW1wdF9lbmFibGUoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwMzg9c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDQxLX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA0MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0My1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDQ4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDQ5OnN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNTAtXHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDU1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDU2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDU3LVx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNjM6c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjQtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDcwPXN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzc6XHRvbGRfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzgtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTA4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTA5Olx0a3ZtX3JtYXBfdW5sb2NrKGt2bSwgcm1hcF9oZWFkLCBuZXdfdmFsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTExMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExNTA9c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE1Ni1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE1NzpcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNTgtXHRpZiAoS1ZNX0JVR19PTl9EQVRBX0NPUlJVUFRJT04oIXJtYXBfdmFsLCBrdm0pKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4Mi1vdXQ6XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExODM6XHRrdm1fcm1hcF91bmxvY2soa3ZtLCBybWFwX2hlYWQsIHJtYXBfdmFsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4NC19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTk0PXN0YXRpYyBib29sIGt2bV96YXBfYWxsX3JtYXBfc3B0ZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTIwMTpcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEyMDItXHRpZiAoIXJtYXBfdmFsKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIxOS1cdC8qIHJtYXBfaGVhZCBpcyBtZWFuaW5nbGVzcyBub3csIHJlbWVtYmVyIHRvIHJlc2V0IGl0ICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEyMjA6XHRrdm1fcm1hcF91bmxvY2soa3ZtLCBybWFwX2hlYWQsIDApO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjIxLVx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzY2PXN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ni1cdFx0XHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cdTAwM2VzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc4NzpcdFx0XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoa3ZtLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg4LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5My1cdFx0XHRcdGlmICh0ZXN0X29ubHkpIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc5NDpcdFx0XHRcdFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzk1LVx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4MTM6XHRcdFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xODE0LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogS1ZNIHg4NiBNTVUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBLVk0mIzM5O3MgeDg2IE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJdCYjMzk7cyBhZGRpbmcgUFJFRU1QVF9SVCBzdXBwb3J0IGZvciBybWFwIGxvY2tpbmcsIHNvIHRoaXMgaXMgYWJvdXQgbW9yZSByb2J1c3QgbG9ja2luZyBmb3IgUlQga2VybmVscy4gSXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBpdHMgY2FsbGVycywgYW5kLCBjcml0aWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZGAgYW5kIGBsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlYCB1bmRlciBgQ09ORklHX1BSRUVNUFRfUlRgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdD8KCkZvbGxvd2luZyB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIHNlZSBpZiBpdCB0b3VjaGVzICpyZWFjaGFibGUqIGNvZGUuIFRoZSBndWlkZWxpbmVzIHNheSB0aGluZ3MgbGlrZSBNTSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcsIGFuZCBjb3JlIHZpcnR1YWxpemF0aW9uIHN1YnN5c3RlbXMgYXJlIHdvcnRoIGZ1enppbmcuIE9rYXksIEtWTSBNTVUgaXMgZGVmaW5pdGVseSBhIGNvcmUgdmlydHVhbGl6YXRpb24gc3Vic3lzdGVtIGluIHRoZSB4ODYgTGludXgga2VybmVsLiBTbywgY2hlY2suIFRoYXQgaXMgb24gdGhlIGxpc3QuCgpOb3cgZm9yIHRoZSBjb25maWd1cmF0aW9ucy4gV2hhdCBkb2VzIHRoaXMgZGVwZW5kIG9uPyBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgS1ZNYCwgd2hpY2ggbWVhbnMgYENPTkZJR19LVk1gIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX0tWTV9JTlRFTGAgb3IgYENPTkZJR19LVk1fQU1EYC4gQnV0IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgKmRvZXMgdGhpcyBjb2RlIGV4ZWN1dGUgdW5kZXIgYm90aCByZWd1bGFyIGtlcm5lbCBhbmQgcHJlZW1wdC1ydCo/IFllcyEgQW5kLCB0aGUgY29kZSBwYXRoIGlzIGRpZmZlcmVudCBmb3IgcmVndWxhciBhbmQgcmVhbC10aW1lLiBGb3IgYCFDT05GSUdfUFJFRU1QVF9SVGAsIHRoZXJlIGlzIGEgbmV3IHBhcmFtZXRlciAoYHN0cnVjdCBrdm0gKmt2bWApIGFkZGVkIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCwgY2FsbGVkIGZyb20gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAuIEZvciBgQ09ORklHX1BSRUVNUFRfUlRgLCB0aGVyZSYjMzk7cyBhIGRpZmZlcmVudCBsb2NraW5nIG1lY2hhbmlzbSB3aXRoIGByZWFkX2xvY2tgIGFuZCB0aGUgbmV3IGFzc2VydGlvbnMgbGlrZSBgbG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkYC4gU28gdGhpcyBpcyAqY29uZGl0aW9uYWxseSogcmVhY2hhYmxlIQoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgdGhlIGV4YWN0IEtWTSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHRob3JvdWdoLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqaXMqIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgcmVhY2hhYmxlIHVuZGVyIGBDT05GSUdfUFJFRU1QVF9SVGAsIGFuZCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBsb2NraW5nIGNoYW5nZXMgd2l0aCBuZXcgYXNzZXJ0aW9ucywgd2hpY2ggYXJlIGFsd2F5cyBnb29kIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBLVk0gTU1VIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBtbXUub2Agb2JqZWN0IGZpbGUgd2l0aGluIEtWTSBmb3IgeDg2IGlzIGJ1aWx0LiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBpbnRlcm5hbHMgYW5kIGJ1aWxkIHN5c3RlbXMsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGhhcHBlbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcyB0aGF0IGdvdmVybiB0aGUgY3JlYXRpb24gb2YgYG1tdS5vYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGF0ZWQgdG8gZmVhdHVyZXMsIHN1Y2ggYXMgRVBUIG9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgYmVjYXVzZSB0aG9zZSB3b3VsZCBjZXJ0YWlubHkgaW5mbHVlbmNlIGhvdyB0aGUgTU1VIGNvZGUgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkLCBlYXN5IHRvIGZvbGxvdywgYW5kIGxldmVyYWdlcyB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIGJ1aWxkIHN5c3RlbSBlZmZlY3RpdmVseS4gSWRlYWxseSwgSSYjMzk7bGwgc2VlIHNvbWUgc3RhbmRhcmQgcGF0dGVybiBydWxlcyBhbmQgdmFyaWFibGUgZGVmaW5pdGlvbnMgdGhhdCBhbGlnbiB3aXRoIGJlc3QgcHJhY3RpY2VzLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBNTVUgY29kZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cyBkdXJpbmcgdGhlIGJ1aWxkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y2NmbGFncy15ICYjNDM7PSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxuICAgNDpcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgJiM0Mzs9IC1XZXJyb3JcbiAgIDU6XHRcbiAgIDY6XHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG4gICA3Olx0XG4gICA4Olx0a3ZtLXlcdFx0XHQmIzQzOz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXG4gICA5Olx0XHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG4gIDEwOlx0XG4gIDExOlx0a3ZtLSQoQ09ORklHX1g4Nl82NCkgJiM0Mzs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cbiAgMTI6XHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgJiM0Mzs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xuICAxMzpcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSAmIzQzOz0gaHlwZXJ2Lm9cbiAgMTQ6XHRrdm0tJChDT05GSUdfS1ZNX1hFTilcdCYjNDM7PSB4ZW4ub1xuICAxNTpcdGt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG4gIDE2Olx0XG4gIDE3Olx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcbiAgMTg6XHRcdFx0XHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xuICAxOTpcdFxuICAyMDpcdGt2bS1pbnRlbC0kKENPTkZJR19YODZfU0dYX0tWTSlcdCYjNDM7PSB2bXgvc2d4Lm9cbiAgMjE6XHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG4gIDIyOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXHQmIzQzOz0gdm14L3RkeC5vXG4gIDIzOlx0XG4gIDI0Olx0a3ZtLWFtZC15XHRcdCYjNDM7PSBzdm0vc3ZtLm8gc3ZtL3ZtZW50ZXIubyBzdm0vcG11Lm8gc3ZtL25lc3RlZC5vIHN2bS9hdmljLm9cbiAgMjU6XHRcbiAgMjY6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVx0JiM0Mzs9IHN2bS9zZXYub1xuICAyNzpcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSBzdm0vaHlwZXJ2Lm9cbiAgMjg6XHRcbiAgMjk6XHRpZmRlZiBDT05GSUdfSFlQRVJWXG4gIDMwOlx0a3ZtLXlcdFx0XHQmIzQzOz0ga3ZtX29uaHlwZXJ2Lm9cbiAgMzE6XHRrdm0taW50ZWwteVx0XHQmIzQzOz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAzMjpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bV9vbmh5cGVydi5vXG4gIDMzOlx0ZW5kaWZcbiAgMzQ6XHRcbiAgMzU6XHRvYmotJChDT05GSUdfS1ZNX1g4NilcdCYjNDM7PSBrdm0ub1xuICAzNjpcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXHQmIzQzOz0ga3ZtLWludGVsLm9cbiAgMzc6XHRvYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbiAgMzg6XHRcbiAgMzk6XHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxuICA0MDpcdCQob2JqKS9zdm0vdm1lbnRlci5vOiAkKG9iaikva3ZtLWFzbS1vZmZzZXRzLmhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gTU1VIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtWTSBNTVUgcGF0Y2guIEZpcnN0LCBJIHNlZSB0aGUgbW9kdWxlIGJ1aWxkIGRpcmVjdGl2ZXM6IGBrdm0teSAmIzQzOz0gLi4uIG1tdS9tbXUub2AgYW5kIGBvYmotJChDT05GSUdfS1ZNX1g4NikgJiM0Mzs9IGt2bS5vYC4gUmlnaHQsIGFuZCBgS1ZNX1g4NmAgZGVwZW5kcyBvbiBgS1ZNYCwgd2hpY2ggaW4gdHVybiwgaXMgZGVwZW5kZW50IG9uIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgbm90IGJlaW5nIHNldCB0byAmIzM5O24mIzM5Oy4gU28sIEtWTSBpdHNlbGYgKGFuZCBlaXRoZXIgSU5URUwgb3IgQU1EKSBhcmUgcHJlcmVxdWlzaXRlcy4gQW5kIG9mIGNvdXJzZSwgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGFsc28gdHJpZ2dlcnMgdGhlIFJUIHBhdGguIEdvdCBpdC4gU3RhbmRhcmQgYnVpbGQgc3lzdGVtIHN0dWZmLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIHRvdWNoZWQgd2l0aGluIHRoaXMgcGF0Y2g6CgoxLiAgYGt2bV9ybWFwX2xvY2tgIChzdGF0aWMgaW4gbW11LmMpCjIuICBga3ZtX3JtYXBfdW5sb2NrYCAoc3RhdGljIGluIG1tdS5jKQozLiAgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgIChzdGF0aWMgaW4gbW11LmMpCjQuICBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCAoc3RhdGljIGluIG1tdS5jKQo1LiAgYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2VgIChzdGF0aWMgaW4gbW11LmMsIGNhbGxlZCBieSBga3ZtX2FnZV9nZm5gLCBga3ZtX3Rlc3RfYWdlX2dmbmApCjYuICBgcHRlX2xpc3RfYWRkYCAoc3RhdGljIGluIG1tdS5jKQo3LiAgYHB0ZV9saXN0X3JlbW92ZWAgKHN0YXRpYyBpbiBtbXUuYykKOC4gIGBrdm1femFwX2FsbF9ybWFwX3NwdGVzYCAoc3RhdGljIGluIG1tdS5jKQo5LiAgYGt2bV9hZ2VfZ2ZuYCAvIGBrdm1fdGVzdF9hZ2VfZ2ZuYCAobm9uLXN0YXRpYyBlbnRyeXBvaW50cyBpbiBtbXUuYykKCkFoYSEgYGt2bV9hZ2VfZ2ZuYCBhbmQgYGt2bV90ZXN0X2FnZV9nZm5gIGFyZSBlbnRyeXBvaW50cywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYWN0dWFsIGNoYW5nZXMgYXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIE1NVSBpbXBsZW1lbnRhdGlvbiBhbmQgbWVtb3J5IGFnaW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgyMDpcdHtcbjE4MjE6XHRcdHJldHVybiAhdGRwX21tdV9lbmFibGVkIHx8IFJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5pbmRpcmVjdF9zaGFkb3dfcGFnZXMpO1xuMTgyMjpcdH1cbjE4MjM6XHRcbjE4MjQ6XHRib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuMTgyNTpcdHtcbjE4MjY6XHRcdGJvb2wgeW91bmcgPSBmYWxzZTtcbjE4Mjc6XHRcbjE4Mjg6XHRcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG4xODI5Olx0XHRcdHlvdW5nID0ga3ZtX3RkcF9tbXVfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlKTtcbjE4MzA6XHRcbjE4MzE6XHRcdGlmIChrdm1fbWF5X2hhdmVfc2hhZG93X21tdV9zcHRlcyhrdm0pKVxuMTgzMjpcdFx0XHR5b3VuZyB8PSBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UsIGZhbHNlKTtcbjE4MzM6XHRcbjE4MzQ6XHRcdHJldHVybiB5b3VuZztcbjE4MzU6XHR9XG4xODM2Olx0XG4xODM3Olx0Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuMTgzODpcdHtcbjE4Mzk6XHRcdGJvb2wgeW91bmcgPSBmYWxzZTtcbjE4NDA6XHRcbjE4NDE6XHRcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG4xODQyOlx0XHRcdHlvdW5nID0ga3ZtX3RkcF9tbXVfdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xuMTg0MzpcdFxuMTg0NDpcdFx0aWYgKHlvdW5nKVxuMTg0NTpcdFx0XHRyZXR1cm4geW91bmc7XG4xODQ2Olx0XG4xODQ3Olx0XHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcbjE4NDg6XHRcdFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCB0cnVlKTtcbjE4NDk6XHRcbjE4NTA6XHRcdHJldHVybiB5b3VuZztcbjE4NTE6XHR9XG4xODUyOlx0XG4xODUzOlx0c3RhdGljIHZvaWQga3ZtX21tdV9jaGVja19zcHRlc19hdF9mcmVlKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuMTg1NDpcdHtcbjE4NTU6XHQjaWZkZWYgQ09ORklHX0tWTV9QUk9WRV9NTVVcbjE4NTY6XHRcdGludCBpO1xuMTg1NzpcdFxuMTg1ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgU1BURV9FTlRfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG4xODU5Olx0XHRcdGlmIChLVk1fTU1VX1dBUk5fT04oaXNfc2hhZG93X3ByZXNlbnRfcHRlKHNwLVx1MDAzZXNwdFtpXSkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcxMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNJiMzOTtzIFJtYXAgQWdpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEtWTSYjMzk7cyBSZXZlcnNlIE1hcCAocm1hcCkgYWdpbmcgbWVjaGFuaXNtLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCwgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgLCBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCwgYGt2bV9ybWFwX2xvY2tgLCBga3ZtX3JtYXBfdW5sb2NrYCwgYGt2bV9hZ2VfZ2ZuYCwgYGt2bV90ZXN0X2FnZV9nZm5gLCBgcHRlX2xpc3RfYWRkYCwgYHB0ZV9saXN0X3JlbW92ZWAsIGFuZCBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2AuIE5vdywgdGhlIGtleSBpcyB0byBwaW5wb2ludCB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIGZvciBLQ09WIGNvdmVyYWdlIGFuZCBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuCgpHaXZlbiBteSBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgJiMzNDtGb2N1c1N5bWJvbHMuJiMzNDsgIEkmIzM5O2xsIG5lZWQgdG8gYXZvaWQgZ2V0dGluZyBib2dnZWQgZG93biBpbiB1YmlxdWl0b3VzIGxpZmVjeWNsZSBwYXRocywgc28gSSBuZWVkIHRvIGF2b2lkIHZlcnkgZ2VuZXJpYyBmdW5jdGlvbnMsIGFuZCBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBmdW5jdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gdGhlIGNvcmUgbG9naWMsIG9yIGFyZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucy4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gYG1tdS5jYC4gIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbmFycm93IGRvd24gdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLgoKRmluYWxseSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcm1hcCYjMzk7cyBiZWhhdmlvciwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZvciBmdW5jdGlvbnMgbGlrZSBgcHRlX2xpc3RfYWRkYCBhbmQgYHB0ZV9saXN0X3JlbW92ZWAuICBVbmRlcnN0YW5kaW5nIHRoZWlyIGNhbGxlcnMgaXMgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBob3cgdGhlIHJtYXAgaXMgbWFuaXB1bGF0ZWQgYW5kIGhvdyBhZ2luZyBpbnRlcmFjdHMgd2l0aCB0aGUgUFRFIGxpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGVfbGlzdF8oYWRkfHJlbW92ZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA2Mz1zdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjktICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzA6c3RhdGljIGludCBwdGVfbGlzdF9hZGQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDcxLVx0XHRcdHU2NCAqc3B0ZSwgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExMTQ9c3RhdGljIHZvaWQgcHRlX2xpc3RfZGVzY19yZW1vdmVfZW50cnkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwX3ZhbCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNDktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTA6c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTUxLVx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTE4Nj1zdGF0aWMgdm9pZCBrdm1femFwX29uZV9ybWFwX3NwdGUoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4OS1cdG1tdV9zcHRlX2NsZWFyX3RyYWNrX2JpdHMoa3ZtLCBzcHRlcCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExOTA6XHRwdGVfbGlzdF9yZW1vdmUoa3ZtLCBzcHRlcCwgcm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE5MS19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMjQ3PXN0YXRpYyB2b2lkIHJtYXBfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTI2Ny1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTI2ODpcdHB0ZV9saXN0X3JlbW92ZShrdm0sIHNwdGUsIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEyNjktfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTczND1zdGF0aWMgdm9pZCBfX3JtYXBfYWRkKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NDctXHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIHNwLVx1MDAzZXJvbGUubGV2ZWwsIHNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzQ4Olx0cm1hcF9jb3VudCA9IHB0ZV9saXN0X2FkZChrdm0sIGNhY2hlLCBzcHRlLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzQ5LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTg5NT1zdGF0aWMgdm9pZCBtbXVfcGFnZV9hZGRfcGFyZW50X3B0ZShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTAxLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxOTAyOlx0cHRlX2xpc3RfYWRkKGt2bSwgY2FjaGUsIHBhcmVudF9wdGUsIFx1MDAyNnNwLVx1MDAzZXBhcmVudF9wdGVzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTkwMy19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xOTA1PXN0YXRpYyB2b2lkIG1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTA3LXtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTkwODpcdHB0ZV9saXN0X3JlbW92ZShrdm0sIHBhcmVudF9wdGUsIFx1MDAyNnNwLVx1MDAzZXBhcmVudF9wdGVzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTkwOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFnaW5nIGluIEtWTSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBtZW1vcnkgYWdpbmcgaXNzdWUgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb25zIGBrdm1fbW11X25vdGlmaWVyX29wc2AgaXMgYSBwcmltYXJ5IHN1c3BlY3QuIEl0JiMzOTtzIG9mdGVuIGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMsIHNvIHRoYXQmIzM5O3MgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhZ2luZyBpcyB0cmFja2VkIG9yIHRyaWdnZXJlZC4KCkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBMZXQmIzM5O3Mgc2VlIGhvdyBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgYXJlIGJlaW5nIHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbmFtZWQgaW4gdGhlIHByb21wdCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHQgaXMgY2FsbGluZyB0aGVzZSBhbmQgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZyB3aXRoIHRoZSBhZ2luZyBpbmZvcm1hdGlvbi4gQXJlIHRoZXkgdXNlZCBmb3IgVExCIGludmFsaWRhdGlvbj8gTW9uaXRvcmluZyBhY3Rpdml0eT8gT3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aGljaCBwYWdlcyBhcmUgY2FuZGlkYXRlcyBmb3IgcmVjbGFpbWluZz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBzaW1pbGFyIHNlYXJjaCB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlbiBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBHZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgYmUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fKGFnZXx0ZXN0X2FnZSlfZ2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9ODI5PXN0YXRpYyBib29sIGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy04MzMtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjgzNDpcdHJldHVybiBrdm1fYWdlX2h2YV9yYW5nZShtbiwgc3RhcnQsIGVuZCwga3ZtX2FnZV9nZm4sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTgzNS1cdFx0XHRcdCAhSVNfRU5BQkxFRChDT05GSUdfS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VORykpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9ODM4PXN0YXRpYyBib29sIGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfeW91bmcoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy04NTUtXHQgKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6ODU2Olx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBzdGFydCwgZW5kLCBrdm1fYWdlX2dmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg1Ny19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz04NTk9c3RhdGljIGJvb2wga3ZtX21tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtODY0LVx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IDEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg2NTpcdFx0XHRcdFx0ICBrdm1fdGVzdF9hZ2VfZ2ZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtODY2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNzYKCQkJCQkJCW91dHB1dDogMjUwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIGZvciBGdXp6aW5nIEtWTSBSZWFsLVRpbWUgTG9ja2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQuIEkmIzM5O2xsIG5lZWQgYEtWTWAgZW5hYmxlZCwgbmF0dXJhbGx5LCBmb3IgS1ZNIHZpcnR1YWxpemF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGZvciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB4ODYgS1ZNIG1vZHVsZXMuIEZpbmFsbHksIGdpdmVuIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVhbC10aW1lIGxvY2tpbmcgdmFyaWFudCwgSeKAmWxsIG5lZWQgYFBSRUVNUFRfUlRgLiBJIHdhbnQgdG8gc3RyZXNzIHRlc3QgdGhlIFJUIGxvY2tpbmcgcGF0aHMgc28gaXQgc2hvdWxkIGJlIGVuYWJsZWQ7IGhvd2V2ZXIsIGJvdGggdGhlIG5vbi1SVCBhbmQgUlQgcGF0aHMgYXJlIGFmZmVjdGVkLiBTbywgdGhvc2UgZm91ciBjb25maWd1cmF0aW9ucyBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50OiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBQUkVFTVBUX1JUYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlICpmdXp6YWJsZSo/IElzIGl0IHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBrZXJuZWwgY29kZT8gQWJzb2x1dGVseS4gS1ZNIGlzIGFjY2Vzc2libGUgdmlhIGAvZGV2L2t2bWAgaW9jdGxzIGFuZCBtbXVfbm90aWZpZXJzLiBUaGlzIHBhdGNoIGFkZHMgbG9ja2luZyBhc3NlcnRpb25zIChgbG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkYCwgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGVgKSwgUlQgcGF0aHMgZm9yIHJtYXAgbG9ja2luZywgYW5kIHJlZmFjdG9yZWQgZnVuY3Rpb24gc2lnbmF0dXJlcywgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCBoYXMgdGhlIHJpZ2h0IGZlYXR1cmVzIHRvIGJlIHdvcnRoIGZ1enppbmcuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcm1hcCBtYW5hZ2VtZW50LCBNTVUgcGFnZSB0cmFja2luZywgYW5kIGFnaW5nIGZ1bmN0aW9ucy4gU28sIEkgbmVlZCB0byBzZWxlY3QgZnVuY3Rpb25zIHJlbGF0aW5nIHRvIHJtYXAgYWdlL2xvY2tpbmc6CiogICBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWAKKiAgIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YAoqICAgYGt2bV9ybWFwX3VubG9ja19yZWFkb25seWAKKiAgIGBrdm1fcm1hcF9sb2NrYAoqICAgYGt2bV9ybWFwX3VubG9ja2AKKiAgIGBrdm1fYWdlX2dmbmAKKiAgIGBrdm1fdGVzdF9hZ2VfZ2ZuYAoqICAgYHB0ZV9saXN0X2FkZGAKKiAgIGBwdGVfbGlzdF9yZW1vdmVgCiogICBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2AKClRoZXNlIHNob3VsZCBiZSBhbGwgb2YgdGhlIHJlbGV2YW50IEtWTSBybWFwIG1hbmFnZW1lbnQgLyBNTVUgcGFnZSB0cmFja2luZyAvIGFnaW5nIGZ1bmN0aW9ucy4KCkZpbmFsbHksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFBSRUVNUFRfUlRgLgoKV2l0aCBhbGwgb2YgdGhpcyBjaGVja2VkIGFuZCBkb3VibGUtY2hlY2tlZCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9ybWFwX2FnZV9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9jayYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2smIzM0OywKICAgICYjMzQ7a3ZtX2FnZV9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3Rlc3RfYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cHRlX2xpc3RfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2t2bV96YXBfYWxsX3JtYXBfc3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcmV2ZXJzZS1tYXBwaW5nIChybWFwKSBsb2NraW5nIGxvZ2ljLCBhZGRpbmcgQ09ORklHX1BSRUVNUFRfUlQgc3VwcG9ydCB3aXRoIGxvY2tkZXAgYXNzZXJ0aW9ucyAobG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkL2xvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUpIGFuZCBtb2RpZnlpbmcgdGhlIHJtYXAgYWdpbmcgYW5kIGxvY2tpbmcgcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTVUgbm90aWZpZXJzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBpbnZhcmlhbnQgY2hlY2tzIGFuZCBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrX3JlYWRvbmx5JiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrJiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9jayYjMzQ7LAogICAgJiMzNDtrdm1fYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fdGVzdF9hZ2VfZ2ZuJiMzNDssCiAgICAmIzM0O3B0ZV9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9yZW1vdmUmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9hbGxfcm1hcF9zcHRlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByZXZlcnNlLW1hcHBpbmcgKHJtYXApIGxvY2tpbmcgbG9naWMsIGFkZGluZyBDT05GSUdfUFJFRU1QVF9SVCBzdXBwb3J0IHdpdGggbG9ja2RlcCBhc3NlcnRpb25zIChsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQvbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSkgYW5kIG1vZGlmeWluZyB0aGUgcm1hcCBhZ2luZyBhbmQgbG9ja2luZyBwYXRocy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NVSBub3RpZmllcnMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IGludmFyaWFudCBjaGVja3MgYW5kIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyN2Y0ZDY1NGQ2ZGM5NTdmODZjMTk3MWFiNTVkZTlmODYyYTNkZDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMDoyNjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdQogICovCiAjZGVmaW5lIEtWTV9STUFQX01BTlkJQklUKDApCiAKJiM0MzsjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUCiAvKgogICogcm1hcHMgYW5kIFBURSBsaXN0cyBhcmUgbW9zdGx5IHByb3RlY3RlZCBieSBtbXVfbG9jayAodGhlIHNoYWRvdyBNTVUgYWx3YXlzCiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dApAQCAtMTAwOCw3ICYjNDM7MTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQogICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlCiAgKiBybWFwLCBhbmQgc28gdGhlIHVubG9jayBmbG93IGlzIGEgbm9wIGlmIHRoZSBybWFwIGlzL3dhcyBlbXB0eS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpCiB7CiAJdW5zaWduZWQgbG9uZyBybWFwX3ZhbDsKIApAQCAtMTAzMiw2ICYjNDM7MTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCwKIAlfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7cm1hcF9oZWFkLSZndDt2YWwpOwomIzQzO30KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJcmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCSAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCSAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgmYW1wO3JtYXBfaGVhZC0mZ3Q7dmFsLCBuZXdfdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZCgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS4KQEAgLTE3NDUsMTEgJiM0MzsxNzc2LDE1IEBAIHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAogCWdmbl90IGdmbjsKIAlpbnQgbGV2ZWw7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlQKJiM0MzsJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOyNlbmRpZgomIzQzOwogCWZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgJmx0Oz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwmIzQzOyYjNDM7KSB7CiAJCWZvciAoZ2ZuID0gcmFuZ2UtJmd0O3N0YXJ0OyBnZm4gJmx0OyByYW5nZS0mZ3Q7ZW5kOwogCQkgICAgIGdmbiAmIzQzOz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHsKIAkJCXJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLSZndDtzbG90KTsKLQkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShybWFwX2hlYWQpOwomIzQzOwkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7CiAKIAkJCWZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgJmFtcDtpdGVyLCBzcHRlcCwgb2xkX3NwdGUpIHsKIAkJCQlpZiAoIWlzX2FjY2Vzc2VkX3NwdGUob2xkX3NwdGUpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gTU1VIExvY2tpbmcgTG9naWMgZm9yIENPTkZJR19QUkVFTVBUX1JUKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0d2Vha2luZyB0aGUgS1ZNIE1NVSBsb2NraW5nIGZvciBgQ09ORklHX1BSRUVNUFRfUlRgLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhlIGNvZGUgaXMgY2xlYXJseSBjaGFuZ2luZyBkZXBlbmRpbmcgb24gd2hldGhlciBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHN0YW5kYXJkIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCBpcyBvbmx5IGRlZmluZWQgaWYgd2UgKmRvbiYjMzk7dCogaGF2ZSBgQ09ORklHX1BSRUVNUFRfUlRgLiBJZiBgQ09ORklHX1BSRUVNUFRfUlRgICppcyogZW5hYmxlZCwgd2UgZ2V0IGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucyBmb3IgYGt2bV9ybWFwX2dldGAsIGBrdm1fcm1hcF9sb2NrYCwgYGt2bV9ybWFwX3VubG9ja2AsIGFuZCB0aGUgcmVhZC1vbmx5IHZlcnNpb25zLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuCgpMb29raW5nIGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBJIHNlZSBhIGBndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7YCB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUYC4gVGhpcyBpbXBsaWVzIHNvbWUgUlQtc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc20gaXMgYmVpbmcgdXNlZCwgYW5kIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIE1NVSBsb2NrIGRpcmVjdGx5LiBBZGRpdGlvbmFsbHksIGl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIHVwZGF0aW5nIGEgY2FsbCB0byBga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZClgLgoKTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZSByZXN0IG9mIGBtbXUuY2AuIEkgbmVlZCB0byBzZWUgaWYgYW55IG90aGVyIGNhbGxzIHRvIHRoZXNlIHJtYXAgbG9ja2luZyBmdW5jdGlvbnMsIHJlYWQtb25seSBvciBvdGhlcndpc2UsIGhhdmUgYmVlbiBtb2RpZmllZCwgcmVtb3ZlZCwgb3IgYWRkZWQuIFdlIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGNoYW5nZXMgdGhlIGxvY2tpbmcgc2VtYW50aWNzIHRocm91Z2hvdXQgdGhlIE1NVSBjb2RlLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gYW55IHN1YnRsZSBjaGFuZ2VzIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcm1hcF9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTg3ND1zdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTkxNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTE3OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05MTgte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU0LVx0ICogZnJvbSBiZWluZyByZW9yZGVyZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBjcmVhdGVkIGJ5XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk1NTpcdCAqIF9fa3ZtX3JtYXBfbG9jaygpLlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NTYtXHQgKlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTcxLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5NzI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3My1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk3NzpcdHJldHVybiBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTk4MD1zdGF0aWMgdm9pZCBfX2t2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTg3LVx0ICpcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTg4Olx0ICogUGFpcnMgd2l0aCB0aGUgYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIGluIF9fa3ZtX3JtYXBfbG9jaygpLlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05ODktXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwMDI9c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDExLSAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDEyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDEzLVx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTctXHRwcmVlbXB0X2Rpc2FibGUoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTAxODpcdHJtYXBfdmFsID0gX19rdm1fcm1hcF9sb2NrKHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTktXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDM4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0MS19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNDI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNDMtXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA1NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDcwPXN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzc6XHRvbGRfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzgtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTUwPXN0YXRpYyB2b2lkIHB0ZV9saXN0X3JlbW92ZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqc3B0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTc6XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTU4LVx0aWYgKEtWTV9CVUdfT05fREFUQV9DT1JSVVBUSU9OKCFybWFwX3ZhbCwga3ZtKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExOTQ9c3RhdGljIGJvb2wga3ZtX3phcF9hbGxfcm1hcF9zcHRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjAwLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMjAxOlx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrKGt2bSwgcm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMi1cdGlmICghcm1hcF92YWwpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzY2PXN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ni1cdFx0XHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cdTAwM2VzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc4NzpcdFx0XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoa3ZtLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzcyCgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSB4ODYgTU1VIFBhdGNoIGZvciBSVCBLZXJuZWxzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIHJtYXAgbG9ja2luZyBtZWNoYW5pc20gc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBNTVUgZm9yIFJUIGtlcm5lbHMsIHdoaWNoIGlzIGltcG9ydGFudC4gV2l0aCBgQ09ORklHX1BSRUVNUFRfUlRgIGVuYWJsZWQsIHdlIGNhbiYjMzk7dCB1c2UgdGhlIHN0YW5kYXJkIHNwaW4td2FpdGluZyBhcHByb2FjaCB3aXRoIGRpc2FibGVkIHByZWVtcHRpb24gaW4gYF9fa3ZtX3JtYXBfbG9ja2AuIFRoYXQmIzM5O3MgYmVjYXVzZSBSVCBrZXJuZWxzIGFyZSB2ZXJ5IHN0cmljdCBhYm91dCBsb25nIHByZWVtcHRpb24gZGlzYWJsZXMgYW5kIHNwaW5uaW5nIHdoZW4gc2xlZXBpbmcgbG9ja3MgYXJlIGluIHBsYXkuIEl0IGp1c3QgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmsuCgpTbywgdGhlIHBhdGNoIGlzIHN3YXBwaW5nIG91dCB0aGF0IGJpdGxvY2sgb24gYHJtYXBfaGVhZC0mZ3Q7dmFsYCBmb3IgdGhlIGBrdm0tJmd0O21tdV9sb2NrYCByZWFkL3dyaXRlIGxvY2tpbmcgbWVjaGFuaXNtLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCBvbiBQUkVFTVBUX1JULiBOb3cgaW4gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAsIHdlIHNlZSB0aGF0IHdlIGFyZSBjYWxsaW5nIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAgdXNpbmcgYHJlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spYC4KCkFscmlnaHQsIGxldCYjMzk7cyBub3cgZXZhbHVhdGUgdGhpcyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCiogICBEb2VzIHRoaXMgbGVhZCB0byBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2U/IE5vcGUsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2VybiBoZXJlLgoqICAgSXMgdGhlcmUgYW55IGFsbG9jYXRpb24gb3IgcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBsaWtlIHRoYXQgaGFwcGVuaW5nLgoqICAgQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBwYWRkaW5nLCBvciB2YXJpYWJsZXM/IE5vLiBFdmVyeXRoaW5nIGxvb2tzIHByb3Blcmx5IGluaXRpYWxpemVkLgoqICAgV291bGQgS01TQU4gZmxhZyBhbnkgYnVncyBoZXJlPyBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBLTVNBTi1kZXRlY3RhYmxlIGJ1Z3MuIFRoZSBjb25jZXJucyBsaWtlIGxvY2tpbmcgaXNzdWVzLCBjb25jdXJyZW5jeSwgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLCBvciBsb2dpYyBlcnJvcnMgd2lsbCBiZSBkZXRlY3RlZCBieSBMT0NLREVQLCBLQVNBTiwgb3IgdGhyZWFkIHNhbml0aXplciwgbm90IEtNU0FOLgoKU28sIGdpdmVuIHRoaXMgY2FyZWZ1bCBhbmFseXNpcywgJiMzNDtOZWVkc0tNU0FOJiMzNDsgY2FuIHNhZmVseSBiZSBzZXQgdG8gJiMzNDtmYWxzZSYjMzQ7LiBUaGUgcGF0Y2ggbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBybWFwIGxvY2tpbmcgaGVscGVycyB0byBzdXBwb3J0IENPTkZJR19QUkVFTVBUX1JUIGJ5IHJlbHlpbmcgb24gcndsb2NrLWJhc2VkIG1tdV9sb2NrIGluc3RlYWQgb2YgY3VzdG9tIGJpdC1zcGlubmluZyBsb2Nrcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIHNlbWFudGljczsgdGhleSBkbyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBzaXplcyBvciBleHBvc2UgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gYXJlIGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjI2LjQ1ODA3MzE4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzU2MzI1MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBybWFwIGxvY2tpbmcgaGVscGVycyB0byBzdXBwb3J0IENPTkZJR19QUkVFTVBUX1JUIGJ5IHJlbHlpbmcgb24gcndsb2NrLWJhc2VkIG1tdV9sb2NrIGluc3RlYWQgb2YgY3VzdG9tIGJpdC1zcGlubmluZyBsb2Nrcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIHNlbWFudGljczsgdGhleSBkbyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBzaXplcyBvciBleHBvc2UgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gYXJlIGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByZXZlcnNlLW1hcHBpbmcgKHJtYXApIGxvY2tpbmcgbG9naWMsIGFkZGluZyBDT05GSUdfUFJFRU1QVF9SVCBzdXBwb3J0IHdpdGggbG9ja2RlcCBhc3NlcnRpb25zIChsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQvbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSkgYW5kIG1vZGlmeWluZyB0aGUgcm1hcCBhZ2luZyBhbmQgbG9ja2luZyBwYXRocy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NVSBub3RpZmllcnMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IGludmFyaWFudCBjaGVja3MgYW5kIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjYuNDU4MDgzODQxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTc2ODQwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2Y0ZDY1NGQ2ZGM5NTdmODZjMTk3MWFiNTVkZTlmODYyYTNkZDA1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjY6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCAwNjRlY2MzM2I5MjY3Li41YmY4MzM1NTBmODRkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdVxcbiAgKi9cXG4gI2RlZmluZSBLVk1fUk1BUF9NQU5ZXFx0QklUKDApXFxuIFxcbisjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuIC8qXFxuICAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xcbiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dFxcbkBAIC0xMDA4LDcgKzEwMDksOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4gICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlXFxuICAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcXG4gXFxuQEAgLTEwMzIsNiArMTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4gXFx0X19rdm1fcm1hcF91bmxvY2socm1hcF9oZWFkLCBvbGRfdmFsKTtcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4re1xcbitcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2cm1hcF9oZWFkLVxcdTAwM2V2YWwpO1xcbit9XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxcbit7XFxuK1xcdGF0b21pY19sb25nX3NldF9yZWxlYXNlKFxcdTAwMjZybWFwX2hlYWQtXFx1MDAzZXZhbCwgbmV3X3ZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9XFxuKyNlbmRpZlxcbiBcXG4gLypcXG4gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGluIHRoZSBybWFwIGNoYWluLCBub3QgY291bnRpbmcgdGhlIG5ldyBvbmUuXFxuQEAgLTE3NDUsMTEgKzE3NzYsMTUgQEAgc3RhdGljIGJvb2wga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGdmbl90IGdmbjtcXG4gXFx0aW50IGxldmVsO1xcbiBcXG4rI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuK1xcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbisjZW5kaWZcXG4rXFxuIFxcdGZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgXFx1MDAzYz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwrKykge1xcbiBcXHRcXHRmb3IgKGdmbiA9IHJhbmdlLVxcdTAwM2VzdGFydDsgZ2ZuIFxcdTAwM2MgcmFuZ2UtXFx1MDAzZWVuZDtcXG4gXFx0XFx0ICAgICBnZm4gKz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHtcXG4gXFx0XFx0XFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBsZXZlbCwgcmFuZ2UtXFx1MDAzZXNsb3QpO1xcbi1cXHRcXHRcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkocm1hcF9oZWFkKTtcXG4rXFx0XFx0XFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcXG4gXFxuIFxcdFxcdFxcdGZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgXFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xcbiBcXHRcXHRcXHRcXHRpZiAoIWlzX2FjY2Vzc2VkX3NwdGUob2xkX3NwdGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyNy4wNzY3ODAzMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMzgxNTE4NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3ZjRkNjU0ZDZkYzk1N2Y4NmMxOTcxYWI1NWRlOWY4NjJhM2RkMDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI2OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtODk1LDYgKzg5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpnZm5fdG9fbWVtc2xvdF9kaXJ0eV9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1XG4gICovXG4gI2RlZmluZSBLVk1fUk1BUF9NQU5ZXHRCSVQoMClcbiBcbisjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUXG4gLypcbiAgKiBybWFwcyBhbmQgUFRFIGxpc3RzIGFyZSBtb3N0bHkgcHJvdGVjdGVkIGJ5IG1tdV9sb2NrICh0aGUgc2hhZG93IE1NVSBhbHdheXNcbiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dFxuQEAgLTEwMDgsNyArMTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuICAqIGFjdHVhbCBsb2NraW5nIGlzIHRoZSBzYW1lLCBidXQgdGhlIGNhbGxlciBpcyBkaXNhbGxvd2VkIGZyb20gbW9kaWZ5aW5nIHRoZVxuICAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcbiBcbkBAIC0xMDMyLDYgKzEwMzQsMzUgQEAgc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4gXHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiB9XG4rI2Vsc2VcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbit7XG4rXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZybWFwX2hlYWQtXHUwMDNldmFsKTtcbit9XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdHJldHVybiBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuK3tcbitcdGF0b21pY19sb25nX3NldF9yZWxlYXNlKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwsIG5ld192YWwpO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxuKyNlbmRpZlxuIFxuIC8qXG4gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGluIHRoZSBybWFwIGNoYWluLCBub3QgY291bnRpbmcgdGhlIG5ldyBvbmUuXG5AQCAtMTc0NSwxMSArMTc3NiwxNSBAQCBzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGdmbl90IGdmbjtcbiBcdGludCBsZXZlbDtcbiBcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbitcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbisjZW5kaWZcbitcbiBcdGZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgXHUwMDNjPSBLVk1fTUFYX0hVR0VQQUdFX0xFVkVMOyBsZXZlbCsrKSB7XG4gXHRcdGZvciAoZ2ZuID0gcmFuZ2UtXHUwMDNlc3RhcnQ7IGdmbiBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kO1xuIFx0XHQgICAgIGdmbiArPSBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSkge1xuIFx0XHRcdHJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLVx1MDAzZXNsb3QpO1xuLVx0XHRcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShybWFwX2hlYWQpO1xuK1x0XHRcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcm1hcF9zcHRlX2xvY2tsZXNzKHJtYXBfdmFsLCBcdTAwMjZpdGVyLCBzcHRlcCwgb2xkX3NwdGUpIHtcbiBcdFx0XHRcdGlmICghaXNfYWNjZXNzZWRfc3B0ZShvbGRfc3B0ZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyNy4wNzY3ODI5OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjgxNzA0ODczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgUHJlZW1wdF9SVCBDb21wYXRpYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSByZWxldmFudCB0b29scy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBpbnRlcmVzdCDigJMgYW55dGhpbmcgdG91Y2hpbmcgdGhlIE1NVSBpbiBLVk0gaXMgdXN1YWxseSB3b3J0aCBhIGNhcmVmdWwgbG9vay5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1c2luZyBgI2lmbmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYW5kIGAjZWxzZWAvYCNlbmRpZmAgYmxvY2tzIGFyb3VuZCBzZXZlcmFsIGZ1bmN0aW9ucywgbmFtZWx5IGBrdm1fcm1hcF9nZXRgLCBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBhbmQgdGhlIHJlYWQtb25seSB2YXJpYW50cy4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBSZWFsLVRpbWUgUHJlZW1wdGlvbiAoQ09ORklHX1BSRUVNUFRfUlQpIGNvbmZpZ3VyYXRpb24uIEl0IGFsc28gYXBwZWFycyB0aGF0IGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYSBga3ZtYCBhcmd1bWVudC4gVGhhdCdzIGEgc3RydWN0dXJhbCBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLlxuXG5GdXJ0aGVybW9yZSwgSSBub3RlIHRoZSBhZGRpdGlvbiB3aXRoaW4gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAuIFRoZXJlJ3Mgbm93IGEgcmVhZCBsb2NrIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYmxvY2s6IGBndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7YCBhbmQgYSBjYWxsIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgcmVhZCBsb2NrIGlzIGxpa2VseSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgdGhlIGJhbmUgb2YgcmVhbC10aW1lIHN5c3RlbXMuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9lcy4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgdG8gc2VlIGhvdyB0aGUgY2hhbmdlcyBmaXQgaW4gdGhlIG92ZXJhbGwgcGljdHVyZS4gVGhpcyBzaG91bGQgc2hvdyBtZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gbW9yZSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cyB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjM5Ljg5MzgzOTM1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0fVxcbjEwMDE6XFx0XFxuMTAwMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZybWFwX2hlYWQtXFx1MDAzZXZhbCkgXFx1MDAyNiB+S1ZNX1JNQVBfTE9DS0VEO1xcbjEwMDU6XFx0fVxcbjEwMDY6XFx0XFxuMTAwNzpcXHQvKlxcbjEwMDg6XFx0ICogSWYgbW11X2xvY2sgaXNuJ3QgaGVsZCwgcm1hcHMgY2FuIG9ubHkgYmUgbG9ja2VkIGluIHJlYWQtb25seSBtb2RlLiAgVGhlXFxuMTAwOTpcXHQgKiBhY3R1YWwgbG9ja2luZyBpcyB0aGUgc2FtZSwgYnV0IHRoZSBjYWxsZXIgaXMgZGlzYWxsb3dlZCBmcm9tIG1vZGlmeWluZyB0aGVcXG4xMDEwOlxcdCAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxcbjEwMTE6XFx0ICovXFxuMTAxMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcXG4xMDEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbjEwMTQ6XFx0e1xcbjEwMTU6XFx0XFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuMTAxODpcXHRcXHRybWFwX3ZhbCA9IF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRpZiAoIXJtYXBfdmFsKVxcbjEwMjE6XFx0XFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4xMDIyOlxcdFxcbjEwMjM6XFx0XFx0cmV0dXJuIHJtYXBfdmFsO1xcbjEwMjQ6XFx0fVxcbjEwMjU6XFx0XFxuMTAyNjpcXHRzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4xMDI3OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvbGRfdmFsKVxcbjEwMjg6XFx0e1xcbjEwMjk6XFx0XFx0aWYgKCFvbGRfdmFsKVxcbjEwMzA6XFx0XFx0XFx0cmV0dXJuO1xcbjEwMzE6XFx0XFxuMTAzMjpcXHRcXHRLVk1fTU1VX1dBUk5fT04ob2xkX3ZhbCAhPSBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKSk7XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgb2xkX3ZhbCk7XFxuMTAzNTpcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbjEwMzY6XFx0fVxcbjEwMzc6XFx0I2Vsc2VcXG4xMDM4OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbjEwMzk6XFx0e1xcbjEwNDA6XFx0XFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsKTtcXG4xMDQxOlxcdH1cXG4xMDQyOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbjEwNDM6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4xMDQ0OlxcdHtcXG4xMDQ1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbjEwNDY6XFx0XFx0cmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpO1xcbjEwNDc6XFx0fVxcbjEwNDg6XFx0XFxuMTA0OTpcXHRzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxcbjEwNTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuMTA1MTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxcbjEwNTI6XFx0e1xcbjEwNTM6XFx0XFx0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsLCBuZXdfdmFsKTtcXG4xMDU0OlxcdH1cXG4xMDU1OlxcdFxcbjEwNTY6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXFxuMTA1NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4xMDU4OlxcdHtcXG4xMDU5OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuMTA2MDpcXHRcXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XFxuMTA2MTpcXHR9XFxuMTA2MjpcXHRcXG4xMDYzOlxcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbjEwNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxcbjEwNjU6XFx0I2VuZGlmXFxuMTA2NjpcXHRcXG4xMDY3OlxcdC8qXFxuMTA2ODpcXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS5cXG4xMDY5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjozOS44OTQ0NTc1MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA2ODQ0MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBga3ZtX3JtYXBfZ2V0YCBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgY29kZSwgdHJhY2luZyB0aGUgcGF0aCwgYW5kIEkndmUgaGl0IGBrdm1fcm1hcF9nZXRgLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IGNlbnRyYWwgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gS1ZNJ3MgcmV2ZXJzZSBtYXBwaW5nLiBCZWZvcmUgSSBnZXQgKnRvbyogaW52b2x2ZWQgaW4gZGlzc2VjdGluZyB0aGlzIHNwZWNpZmljIGNhbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gSSBjYW4ndCBqdXN0IGRpdmUgaW4gd2l0aG91dCBjb250ZXh0LlxuXG5UaGVyZWZvcmUsIEkgd2lsbCBnbyBiYWNrIHRvIHRoZSBzZWN0aW9uICpwcmVjZWRpbmcqIHRoZSBjYWxsLiBUaGUgbW9zdCBsb2dpY2FsIGFwcHJvYWNoIGlzIHRvIGNoZWNrIHRoZSBsaW5lcyByaWdodCBiZWZvcmUuIExpbmVzIDkwMC0xMDAwIHNlZW0gbGlrZSBhIGdvb2QgY2h1bmsgdG8gZXhhbWluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIHZhcmlhYmxlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQganVzdCBiZWZvcmUsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiB1c2UsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgbGFyZ2VyIG1vZHVsZS4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB3aHkgYGt2bV9ybWFwX2dldGAgaXMgZXZlbiAqbmVlZGVkKiBhdCB0aGlzIHBvaW50LiBXaXRoIHRoaXMgYmFja2dyb3VuZCBpbiBwbGFjZSwgSSB3aWxsIGJlIGluIGEgbXVjaCBiZXR0ZXIgcG9zaXRpb24gdG8gYXBwcmVjaWF0ZSB0aGUgcm9sZSBvZiBga3ZtX3JtYXBfZ2V0YCBhbmQgaXRzIGltcGFjdC4gSSdsbCBiZSBtb3JlIGNvbmZpZGVudCB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55IHZpdGFsIHBpZWNlcyBvZiB0aGUgcHV6emxlIGFuZCB0aGF0IHRoZSBmbG93IG1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo0Mi44MDEzMDQ0NTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdCAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xcbiA5MDE6XFx0ICogb3BlcmF0ZXMgd2l0aCBtbXVfbG9jayBoZWxkIGZvciB3cml0ZSksIGJ1dCBybWFwcyBjYW4gYmUgd2Fsa2VkIHdpdGhvdXRcXG4gOTAyOlxcdCAqIGhvbGRpbmcgbW11X2xvY2sgc28gbG9uZyBhcyB0aGUgY2FsbGVyIGNhbiB0b2xlcmF0ZSBTUFRFcyBpbiB0aGUgcm1hcCBjaGFpblxcbiA5MDM6XFx0ICogYmVpbmcgemFwcGVkL2Ryb3BwZWQgX3doaWxlIHRoZSBybWFwIGlzIGxvY2tlZF8uXFxuIDkwNDpcXHQgKlxcbiA5MDU6XFx0ICogT3RoZXIgdGhhbiB0aGUgS1ZNX1JNQVBfTE9DS0VEIGZsYWcsIG1vZGlmaWNhdGlvbnMgdG8gcm1hcCBlbnRyaWVzIG11c3QgYmVcXG4gOTA2OlxcdCAqIGRvbmUgd2hpbGUgaG9sZGluZyBtbXVfbG9jayBmb3Igd3JpdGUuICBUaGlzIGFsbG93cyBhIHRhc2sgd2Fsa2luZyBybWFwc1xcbiA5MDc6XFx0ICogd2l0aG91dCBob2xkaW5nIG1tdV9sb2NrIHRvIGNvbmN1cnJlbnRseSB3YWxrIHRoZSBzYW1lIGVudHJpZXMgYXMgYSB0YXNrXFxuIDkwODpcXHQgKiB0aGF0IGlzIGhvbGRpbmcgbW11X2xvY2sgYnV0IF9ub3RfIHRoZSBybWFwIGxvY2suICBOZWl0aGVyIHRhc2sgd2lsbCBtb2RpZnlcXG4gOTA5OlxcdCAqIHRoZSBybWFwcywgdGh1cyB0aGUgd2Fsa3MgYXJlIHN0YWJsZS5cXG4gOTEwOlxcdCAqXFxuIDkxMTpcXHQgKiBBcyBhbGx1ZGVkIHRvIGFib3ZlLCBTUFRFcyBpbiBybWFwcyBhcmUgX25vdF8gcHJvdGVjdGVkIGJ5IEtWTV9STUFQX0xPQ0tFRCxcXG4gOTEyOlxcdCAqIG9ubHkgdGhlIHJtYXAgY2hhaW5zIHRoZW1zZWx2ZXMgYXJlIHByb3RlY3RlZC4gIEUuZy4gaG9sZGluZyBhbiBybWFwJ3MgbG9ja1xcbiA5MTM6XFx0ICogZW5zdXJlcyBhbGwgXFxcInN0cnVjdCBwdGVfbGlzdF9kZXNjXFxcIiBmaWVsZHMgYXJlIHN0YWJsZS5cXG4gOTE0OlxcdCAqL1xcbiA5MTU6XFx0I2RlZmluZSBLVk1fUk1BUF9MT0NLRURcXHRCSVQoMSlcXG4gOTE2OlxcdFxcbiA5MTc6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19rdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuIDkxODpcXHR7XFxuIDkxOTpcXHRcXHR1bnNpZ25lZCBsb25nIG9sZF92YWwsIG5ld192YWw7XFxuIDkyMDpcXHRcXG4gOTIxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0LypcXG4gOTI0OlxcdFxcdCAqIEVsaWRlIHRoZSBsb2NrIGlmIHRoZSBybWFwIGlzIGVtcHR5LCBhcyBsb2NrbGVzcyB3YWxrZXJzIChyZWFkLW9ubHlcXG4gOTI1OlxcdFxcdCAqIG1vZGUpIGRvbid0IG5lZWQgdG8gKGFuZCBjYW4ndCkgd2FsayBhbiBlbXB0eSBybWFwLCBub3IgY2FuIHRoZXkgYWRkXFxuIDkyNjpcXHRcXHQgKiBlbnRyaWVzIHRvIHRoZSBybWFwLiAgSS5lLiB0aGUgb25seSBwYXRocyB0aGF0IHByb2Nlc3MgZW1wdHkgcm1hcHNcXG4gOTI3OlxcdFxcdCAqIGRvIHNvIHdoaWxlIGhvbGRpbmcgbW11X2xvY2sgZm9yIHdyaXRlLCBhbmQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cXG4gOTI4OlxcdFxcdCAqL1xcbiA5Mjk6XFx0XFx0b2xkX3ZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsKTtcXG4gOTMwOlxcdFxcdGlmICghb2xkX3ZhbClcXG4gOTMxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MzI6XFx0XFxuIDkzMzpcXHRcXHRkbyB7XFxuIDkzNDpcXHRcXHRcXHQvKlxcbiA5MzU6XFx0XFx0XFx0ICogSWYgdGhlIHJtYXAgaXMgbG9ja2VkLCB3YWl0IGZvciBpdCB0byBiZSB1bmxvY2tlZCBiZWZvcmVcXG4gOTM2OlxcdFxcdFxcdCAqIHRyeWluZyBhY3F1aXJlIHRoZSBsb2NrLCBlLmcuIHRvIGF2b2lkIGJvdW5jaW5nIHRoZSBjYWNoZVxcbiA5Mzc6XFx0XFx0XFx0ICogbGluZS5cXG4gOTM4OlxcdFxcdFxcdCAqL1xcbiA5Mzk6XFx0XFx0XFx0d2hpbGUgKG9sZF92YWwgXFx1MDAyNiBLVk1fUk1BUF9MT0NLRUQpIHtcXG4gOTQwOlxcdFxcdFxcdFxcdGNwdV9yZWxheCgpO1xcbiA5NDE6XFx0XFx0XFx0XFx0b2xkX3ZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsKTtcXG4gOTQyOlxcdFxcdFxcdH1cXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0XFx0LypcXG4gOTQ1OlxcdFxcdFxcdCAqIFJlY2hlY2sgZm9yIGFuIGVtcHR5IHJtYXAsIGl0IG1heSBoYXZlIGJlZW4gcHVyZ2VkIGJ5IHRoZVxcbiA5NDY6XFx0XFx0XFx0ICogdGFzayB0aGF0IGhlbGQgdGhlIGxvY2suXFxuIDk0NzpcXHRcXHRcXHQgKi9cXG4gOTQ4OlxcdFxcdFxcdGlmICghb2xkX3ZhbClcXG4gOTQ5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA5NTA6XFx0XFxuIDk1MTpcXHRcXHRcXHRuZXdfdmFsID0gb2xkX3ZhbCB8IEtWTV9STUFQX0xPQ0tFRDtcXG4gOTUyOlxcdFxcdC8qXFxuIDk1MzpcXHRcXHQgKiBVc2UgdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIHRvIHByZXZlbnQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgcm1hcFxcbiA5NTQ6XFx0XFx0ICogZnJvbSBiZWluZyByZW9yZGVyZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBjcmVhdGVkIGJ5XFxuIDk1NTpcXHRcXHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cXG4gOTU2OlxcdFxcdCAqXFxuIDk1NzpcXHRcXHQgKiBQYWlycyB3aXRoIHRoZSBhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgpIGluIGt2bV9ybWFwX3VubG9jaygpLlxcbiA5NTg6XFx0XFx0ICpcXG4gOTU5OlxcdFxcdCAqIEZvciB0aGUgIW9sZF92YWwgY2FzZSwgbm8gb3JkZXJpbmcgaXMgbmVlZGVkLCBhcyB0aGVyZSBpcyBubyBybWFwXFxuIDk2MDpcXHRcXHQgKiB0byB3YWxrLlxcbiA5NjE6XFx0XFx0ICovXFxuIDk2MjpcXHRcXHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZShcXHUwMDI2cm1hcF9oZWFkLVxcdTAwM2V2YWwsIFxcdTAwMjZvbGRfdmFsLCBuZXdfdmFsKSk7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdC8qXFxuIDk2NTpcXHRcXHQgKiBSZXR1cm4gdGhlIG9sZCB2YWx1ZSwgaS5lLiBfd2l0aG91dF8gdGhlIExPQ0tFRCBiaXQgc2V0LiAgSXQnc1xcbiA5NjY6XFx0XFx0ICogaW1wb3NzaWJsZSBmb3IgdGhlIHJldHVybiB2YWx1ZSB0byBiZSAwIChzZWUgYWJvdmUpLCBpLmUuIHRoZSByZWFkLVxcbiA5Njc6XFx0XFx0ICogb25seSB1bmxvY2sgZmxvdyBjYW4ndCBnZXQgYSBmYWxzZSBwb3NpdGl2ZSBhbmQgZmFpbCB0byB1bmxvY2suXFxuIDk2ODpcXHRcXHQgKi9cXG4gOTY5OlxcdFxcdHJldHVybiBvbGRfdmFsO1xcbiA5NzA6XFx0fVxcbiA5NzE6XFx0XFxuIDk3MjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcXG4gOTczOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuIDk3NDpcXHR7XFxuIDk3NTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gOTc2OlxcdFxcbiA5Nzc6XFx0XFx0cmV0dXJuIF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbiA5Nzg6XFx0fVxcbiA5Nzk6XFx0XFxuIDk4MDpcXHRzdGF0aWMgdm9pZCBfX2t2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbiA5ODE6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyB2YWwpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHRLVk1fTU1VX1dBUk5fT04odmFsIFxcdTAwMjYgS1ZNX1JNQVBfTE9DS0VEKTtcXG4gOTg0OlxcdFxcdC8qXFxuIDk4NTpcXHRcXHQgKiBFbnN1cmUgdGhhdCBhbGwgYWNjZXNzZXMgdG8gdGhlIHJtYXAgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIHVubG9ja2luZ1xcbiA5ODY6XFx0XFx0ICogdGhlIHJtYXAuXFxuIDk4NzpcXHRcXHQgKlxcbiA5ODg6XFx0XFx0ICogUGFpcnMgd2l0aCB0aGUgYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIGluIF9fa3ZtX3JtYXBfbG9jaygpLlxcbiA5ODk6XFx0XFx0ICovXFxuIDk5MDpcXHRcXHRhdG9taWNfbG9uZ19zZXRfcmVsZWFzZShcXHUwMDI2cm1hcF9oZWFkLVxcdTAwM2V2YWwsIHZhbCk7XFxuIDk5MTpcXHR9XFxuIDk5MjpcXHRcXG4gOTkzOlxcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuIDk5NDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4gOTk1OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpXFxuIDk5NjpcXHR7XFxuIDk5NzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0X19rdm1fcm1hcF91bmxvY2socm1hcF9oZWFkLCBuZXdfdmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NDIuODAxNzc0MzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUxMDQ4NDI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gS1ZNIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBSaWdodCBub3csIEkgdGhpbmsgSSBuZWVkIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIHRoYXQgYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgaXQgYXJvdW5kIGxpbmUgMTc3Ni4gVGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgSSdtIHRyeWluZyB0byBncm9rIHJlc2lkZXMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHJvdXRpbmUgaGFuZGxlcyBhZ2luZyBvZiBndWVzdCBwaHlzaWNhbCBmcmFtZSBudW1iZXJzIChHRk5zKSB3aXRoaW4gYSBzcGVjaWZpYyByYW5nZS4gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHdpdGhpbiB0aGUgS1ZNIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NDYuMzEyMjYxNzU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc2NTpcXHRcXG4xNzY2OlxcdHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbjE3Njc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbjE3Njg6XFx0XFx0XFx0XFx0XFx0ICAgYm9vbCB0ZXN0X29ubHkpXFxuMTc2OTpcXHR7XFxuMTc3MDpcXHRcXHRzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkO1xcbjE3NzE6XFx0XFx0c3RydWN0IHJtYXBfaXRlcmF0b3IgaXRlcjtcXG4xNzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgcm1hcF92YWw7XFxuMTc3MzpcXHRcXHR1NjQgb2xkX3NwdGUsIG5ld19zcHRlO1xcbjE3NzQ6XFx0XFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbjE3NzU6XFx0XFx0dTY0ICpzcHRlcDtcXG4xNzc2OlxcdFxcdGdmbl90IGdmbjtcXG4xNzc3OlxcdFxcdGludCBsZXZlbDtcXG4xNzc4OlxcdFxcbjE3Nzk6XFx0I2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuMTc4MDpcXHRcXHRndWFyZChyZWFkX2xvY2spKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4xNzgxOlxcdCNlbmRpZlxcbjE3ODI6XFx0XFxuMTc4MzpcXHRcXHRmb3IgKGxldmVsID0gUEdfTEVWRUxfNEs7IGxldmVsIFxcdTAwM2M9IEtWTV9NQVhfSFVHRVBBR0VfTEVWRUw7IGxldmVsKyspIHtcXG4xNzg0OlxcdFxcdFxcdGZvciAoZ2ZuID0gcmFuZ2UtXFx1MDAzZXN0YXJ0OyBnZm4gXFx1MDAzYyByYW5nZS1cXHUwMDNlZW5kO1xcbjE3ODU6XFx0XFx0XFx0ICAgICBnZm4gKz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHtcXG4xNzg2OlxcdFxcdFxcdFxcdHJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLVxcdTAwM2VzbG90KTtcXG4xNzg3OlxcdFxcdFxcdFxcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7XFxuMTc4ODpcXHRcXG4xNzg5OlxcdFxcdFxcdFxcdGZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgXFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xcbjE3OTA6XFx0XFx0XFx0XFx0XFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcXG4xNzkxOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE3OTI6XFx0XFxuMTc5MzpcXHRcXHRcXHRcXHRcXHRpZiAodGVzdF9vbmx5KSB7XFxuMTc5NDpcXHRcXHRcXHRcXHRcXHRcXHRrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkocm1hcF9oZWFkLCBybWFwX3ZhbCk7XFxuMTc5NTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNzk2OlxcdFxcdFxcdFxcdFxcdH1cXG4xNzk3OlxcdFxcbjE3OTg6XFx0XFx0XFx0XFx0XFx0aWYgKHNwdGVfYWRfZW5hYmxlZChvbGRfc3B0ZSkpXFxuMTc5OTpcXHRcXHRcXHRcXHRcXHRcXHRuZXdfc3B0ZSA9IG9sZF9zcHRlIFxcdTAwMjYgfnNoYWRvd19hY2Nlc3NlZF9tYXNrO1xcbjE4MDA6XFx0XFx0XFx0XFx0XFx0ZWxzZVxcbjE4MDE6XFx0XFx0XFx0XFx0XFx0XFx0bmV3X3NwdGUgPSBtYXJrX3NwdGVfZm9yX2FjY2Vzc190cmFjayhvbGRfc3B0ZSk7XFxuMTgwMjpcXHRcXG4xODAzOlxcdFxcdFxcdFxcdFxcdC8qXFxuMTgwNDpcXHRcXHRcXHRcXHRcXHQgKiBEb24ndCBib3RoZXIgcmV0cnlpbmcgaWYgdGhlIENNUFhDSEcgZmFpbHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ2LjMxMjczMDU1NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjY4NDExMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWAuIFJpZ2h0LCBpdCdzIHBhcnQgb2YgdGhlIEtWTSBNTVUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNhbGx5IGZvciB4ODYvYW1kNjQuIFRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IENhbiBJIGFjdHVhbGx5IGdldCB0byB0aGlzIHRoaW5nIHdpdGggZnV6emluZz8gQW5kIG9mIGNvdXJzZSwgS1ZNIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHZpYSBgL2Rldi9rdm1gLiBTeXprYWxsZXIgaGl0cyB0aGF0IGhhcmQsIHNvIHRoZSBhbnN3ZXIgaXMgYSBzb2xpZCBcIlllcywgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZVwiLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogKmhvdyogZG8gSSByZWFjaCBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMuIFRpbWUgdG8gdXNlIGBncmVwcGVyYC4gSSdsbCBydW4gdGhlIHNlYXJjaCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGNyYWZ0IGVmZmVjdGl2ZSBmdXp6aW5nIGlucHV0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ5LjA3OTU3NTQ3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxNzY0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTc1OD1zdGF0aWMgdm9pZCBybWFwX2FkZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NjUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzY2OnN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc2Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE4MjQ9Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgzMS1cXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4MzI6XFx0XFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xODMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xODM3PWJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTg0Ny1cXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4NDg6XFx0XFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ5LjE2NDc2NDUzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTIzNzQwNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBNTVUgTm90aWZpZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGVzZSBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgY2FsbGJhY2tzLiBUaGV5J3JlIHBhcnQgb2YgdGhlIEtWTSBNTVUgbm90aWZpZXIgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGt2bV9tbXVfbm90aWZpZXJfb3BzYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiBleGVjdXRpb24sIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuXG5cbkxldCdzIHNlZeKApiB0aGVzZSBhcmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIE1NVSBub3RpZmllciBob29rcy4gSSdtIHRoaW5raW5nLCBgdGVzdF95b3VuZ2AgYW5kIGBjbGVhcl95b3VuZ2AgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgZGVhbGluZyB3aXRoIG1lbW9yeSBhZ2luZywgb3IgcGVyaGFwcyBkdXJpbmcgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBjYWxscy4gSSBzaG91bGQgYWxzbyBjaGVjayBtYWR2aXNlIGFuZCByZWNsYWltLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJtYXAgbG9ja2luZyB3b3JrcyBpbiByZWxhdGlvbiB0byB0aGlzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAsIGFuZCBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCBhcmUgdXNlZCB0aHJvdWdob3V0IGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgaXMgcHJvdGVjdGVkIGR1cmluZyB0aGVzZSBNTVUgbm90aWZpZXIgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo1My42ODg1MDkwNjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzkxOTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcm1hcF8obG9ja3x1bmxvY2spXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz04NzQ9c3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90X2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTkxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjkxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2t2bV9ybWFwX2xvY2soc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTkxOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk1NC1cXHQgKiBmcm9tIGJlaW5nIHJlb3JkZXJlZCBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIGNyZWF0ZWQgYnlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk1NTpcXHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk1Ni1cXHQgKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTU3OlxcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3NldF9yZWxlYXNlKCkgaW4ga3ZtX3JtYXBfdW5sb2NrKCkuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NTgtXFx0ICpcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTcxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTcyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTczLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk3NzpcXHRyZXR1cm4gX19rdm1fcm1hcF9sb2NrKHJtYXBfaGVhZCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzgtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTgwOnN0YXRpYyB2b2lkIF9fa3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05ODEtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4Ny1cXHQgKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTg4OlxcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4OS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTkyLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTkzOnN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk5OC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk5OTpcXHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG5ld192YWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAwMC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwMDI9c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTEtICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDEyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxMy1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxNy1cXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMTg6XFx0cm1hcF92YWwgPSBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMjUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDI2OnN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAyNy1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAzMy1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMzQ6XFx0X19rdm1fcm1hcF91bmxvY2socm1hcF9oZWFkLCBvbGRfdmFsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMzUtXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0MS19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDQyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDQ4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA0OTpzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1MC1cXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1NS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNTY6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDU3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDYyLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA2MzpzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDcwPXN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA3Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzc6XFx0b2xkX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA3OC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTEwOC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExMDk6XFx0a3ZtX3JtYXBfdW5sb2NrKGt2bSwgcm1hcF9oZWFkLCBuZXdfdmFsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExMTAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExNTA9c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTU2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE1NzpcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE1OC1cXHRpZiAoS1ZNX0JVR19PTl9EQVRBX0NPUlJVUFRJT04oIXJtYXBfdmFsLCBrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTgyLW91dDpcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExODM6XFx0a3ZtX3JtYXBfdW5sb2NrKGt2bSwgcm1hcF9oZWFkLCBybWFwX3ZhbCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTg0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTE5ND1zdGF0aWMgYm9vbCBrdm1femFwX2FsbF9ybWFwX3NwdGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEyMDE6XFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrKGt2bSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEyMDItXFx0aWYgKCFybWFwX3ZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIxOS1cXHQvKiBybWFwX2hlYWQgaXMgbWVhbmluZ2xlc3Mgbm93LCByZW1lbWJlciB0byByZXNldCBpdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTIyMDpcXHRrdm1fcm1hcF91bmxvY2soa3ZtLCBybWFwX2hlYWQsIDApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIyMS1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTc2Nj1zdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ni1cXHRcXHRcXHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cXHUwMDNlc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzg3OlxcdFxcdFxcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg4LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzkzLVxcdFxcdFxcdFxcdGlmICh0ZXN0X29ubHkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3OTQ6XFx0XFx0XFx0XFx0XFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5NS1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgxMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4MTM6XFx0XFx0XFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgxNC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjUzLjc5NjQzNzg3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTYwNzgyNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogS1ZNIHg4NiBNTVUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgS1ZNJ3MgeDg2IE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJdCdzIGFkZGluZyBQUkVFTVBUX1JUIHN1cHBvcnQgZm9yIHJtYXAgbG9ja2luZywgc28gdGhpcyBpcyBhYm91dCBtb3JlIHJvYnVzdCBsb2NraW5nIGZvciBSVCBrZXJuZWxzLiBJdCdzIG1vZGlmeWluZyB0aGUgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgaXRzIGNhbGxlcnMsIGFuZCwgY3JpdGljYWxseSwgaXQncyBhZGRpbmcgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZGAgYW5kIGBsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlYCB1bmRlciBgQ09ORklHX1BSRUVNUFRfUlRgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdD9cblxuRm9sbG93aW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gc2VlIGlmIGl0IHRvdWNoZXMgKnJlYWNoYWJsZSogY29kZS4gVGhlIGd1aWRlbGluZXMgc2F5IHRoaW5ncyBsaWtlIE1NLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgYW5kIGNvcmUgdmlydHVhbGl6YXRpb24gc3Vic3lzdGVtcyBhcmUgd29ydGggZnV6emluZy4gT2theSwgS1ZNIE1NVSBpcyBkZWZpbml0ZWx5IGEgY29yZSB2aXJ0dWFsaXphdGlvbiBzdWJzeXN0ZW0gaW4gdGhlIHg4NiBMaW51eCBrZXJuZWwuIFNvLCBjaGVjay4gVGhhdCBpcyBvbiB0aGUgbGlzdC5cblxuTm93IGZvciB0aGUgY29uZmlndXJhdGlvbnMuIFdoYXQgZG9lcyB0aGlzIGRlcGVuZCBvbj8gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgS1ZNYCwgd2hpY2ggbWVhbnMgYENPTkZJR19LVk1gIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX0tWTV9JTlRFTGAgb3IgYENPTkZJR19LVk1fQU1EYC4gQnV0IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgKmRvZXMgdGhpcyBjb2RlIGV4ZWN1dGUgdW5kZXIgYm90aCByZWd1bGFyIGtlcm5lbCBhbmQgcHJlZW1wdC1ydCo/IFllcyEgQW5kLCB0aGUgY29kZSBwYXRoIGlzIGRpZmZlcmVudCBmb3IgcmVndWxhciBhbmQgcmVhbC10aW1lLiBGb3IgYCFDT05GSUdfUFJFRU1QVF9SVGAsIHRoZXJlIGlzIGEgbmV3IHBhcmFtZXRlciAoYHN0cnVjdCBrdm0gKmt2bWApIGFkZGVkIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCwgY2FsbGVkIGZyb20gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAuIEZvciBgQ09ORklHX1BSRUVNUFRfUlRgLCB0aGVyZSdzIGEgZGlmZmVyZW50IGxvY2tpbmcgbWVjaGFuaXNtIHdpdGggYHJlYWRfbG9ja2AgYW5kIHRoZSBuZXcgYXNzZXJ0aW9ucyBsaWtlIGBsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWRgLiBTbyB0aGlzIGlzICpjb25kaXRpb25hbGx5KiByZWFjaGFibGUhXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgdGhlIGV4YWN0IEtWTSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICppcyogd29ydGggZnV6emluZy4gSXQncyB0b3VjaGluZyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5LCBpdCdzIGNvbmRpdGlvbmFsbHkgcmVhY2hhYmxlIHVuZGVyIGBDT05GSUdfUFJFRU1QVF9SVGAsIGFuZCBpdCdzIGludHJvZHVjaW5nIGxvY2tpbmcgY2hhbmdlcyB3aXRoIG5ldyBhc3NlcnRpb25zLCB3aGljaCBhcmUgYWx3YXlzIGdvb2QgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NTkuOTU3MjI1MDA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTUxNTM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDAuMDMyNzUzNDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODYzODU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBLVk0gTU1VIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYG1tdS5vYCBvYmplY3QgZmlsZSB3aXRoaW4gS1ZNIGZvciB4ODYgaXMgYnVpbHQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscyBhbmQgYnVpbGQgc3lzdGVtcywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcyB0aGF0IGdvdmVybiB0aGUgY3JlYXRpb24gb2YgYG1tdS5vYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgcmVsYXRlZCB0byBmZWF0dXJlcywgc3VjaCBhcyBFUFQgb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBiZWNhdXNlIHRob3NlIHdvdWxkIGNlcnRhaW5seSBpbmZsdWVuY2UgaG93IHRoZSBNTVUgY29kZSBpcyBjb21waWxlZCBhbmQgbGlua2VkLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1zdHJ1Y3R1cmVkLCBlYXN5IHRvIGZvbGxvdywgYW5kIGxldmVyYWdlcyB0aGUga2VybmVsJ3MgYnVpbHQtaW4gYnVpbGQgc3lzdGVtIGVmZmVjdGl2ZWx5LiBJZGVhbGx5LCBJJ2xsIHNlZSBzb21lIHN0YW5kYXJkIHBhdHRlcm4gcnVsZXMgYW5kIHZhcmlhYmxlIGRlZmluaXRpb25zIHRoYXQgYWxpZ24gd2l0aCBiZXN0IHByYWN0aWNlcy4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTU1VIGNvZGUgaW50ZXJhY3RzIHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDIuODE5MTQyOTU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxcbiAgIDQ6XFx0Y2NmbGFncy0kKENPTkZJR19LVk1fV0VSUk9SKSArPSAtV2Vycm9yXFxuICAgNTpcXHRcXG4gICA2OlxcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0a3ZtLXlcXHRcXHRcXHQrPSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcXFxcbiAgIDk6XFx0XFx0XFx0XFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXFxuICAxMDpcXHRcXG4gIDExOlxcdGt2bS0kKENPTkZJR19YODZfNjQpICs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cXG4gIDEyOlxcdGt2bS0kKENPTkZJR19LVk1fSU9BUElDKSArPSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cXG4gIDEzOlxcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbiAgMTQ6XFx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXFx0Kz0geGVuLm9cXG4gIDE1OlxcdGt2bS0kKENPTkZJR19LVk1fU01NKVxcdCs9IHNtbS5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xcbiAgMTk6XFx0XFxuICAyMDpcXHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXFx0Kz0gdm14L3NneC5vXFxuICAyMTpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuICAyMjpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuICAyNTpcXHRcXG4gIDI2OlxcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXFx0Kz0gc3ZtL3Nldi5vXFxuICAyNzpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gc3ZtL2h5cGVydi5vXFxuICAyODpcXHRcXG4gIDI5OlxcdGlmZGVmIENPTkZJR19IWVBFUlZcXG4gIDMwOlxcdGt2bS15XFx0XFx0XFx0Kz0ga3ZtX29uaHlwZXJ2Lm9cXG4gIDMxOlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMzI6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bV9vbmh5cGVydi5vXFxuICAzMzpcXHRlbmRpZlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRvYmotJChDT05GSUdfS1ZNX1g4NilcXHQrPSBrdm0ub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0tWTV9JTlRFTClcXHQrPSBrdm0taW50ZWwub1xcbiAgMzc6XFx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuICAzODpcXHRcXG4gIDM5OlxcdEFGTEFHU19zdm0vdm1lbnRlci5vICAgIDo9IC1pcXVvdGUgJChvYmopXFxuICA0MDpcXHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjAyLjgxOTI1MjExNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDc5NDAzNDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE1NVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIE1NVSBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBtb2R1bGUgYnVpbGQgZGlyZWN0aXZlczogYGt2bS15ICs9IC4uLiBtbXUvbW11Lm9gIGFuZCBgb2JqLSQoQ09ORklHX0tWTV9YODYpICs9IGt2bS5vYC4gUmlnaHQsIGFuZCBgS1ZNX1g4NmAgZGVwZW5kcyBvbiBgS1ZNYCwgd2hpY2ggaW4gdHVybiwgaXMgZGVwZW5kZW50IG9uIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgbm90IGJlaW5nIHNldCB0byAnbicuIFNvLCBLVk0gaXRzZWxmIChhbmQgZWl0aGVyIElOVEVMIG9yIEFNRCkgYXJlIHByZXJlcXVpc2l0ZXMuIEFuZCBvZiBjb3Vyc2UsIGVuYWJsaW5nIGBQUkVFTVBUX1JUYCBhbHNvIHRyaWdnZXJzIHRoZSBSVCBwYXRoLiBHb3QgaXQuIFN0YW5kYXJkIGJ1aWxkIHN5c3RlbSBzdHVmZi5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciB0b3VjaGVkIHdpdGhpbiB0aGlzIHBhdGNoOlxuXG4xLiAgYGt2bV9ybWFwX2xvY2tgIChzdGF0aWMgaW4gbW11LmMpXG4yLiAgYGt2bV9ybWFwX3VubG9ja2AgKHN0YXRpYyBpbiBtbXUuYylcbjMuICBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAgKHN0YXRpYyBpbiBtbXUuYylcbjQuICBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCAoc3RhdGljIGluIG1tdS5jKVxuNS4gIGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCAoc3RhdGljIGluIG1tdS5jLCBjYWxsZWQgYnkgYGt2bV9hZ2VfZ2ZuYCwgYGt2bV90ZXN0X2FnZV9nZm5gKVxuNi4gIGBwdGVfbGlzdF9hZGRgIChzdGF0aWMgaW4gbW11LmMpXG43LiAgYHB0ZV9saXN0X3JlbW92ZWAgKHN0YXRpYyBpbiBtbXUuYylcbjguICBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2AgKHN0YXRpYyBpbiBtbXUuYylcbjkuICBga3ZtX2FnZV9nZm5gIC8gYGt2bV90ZXN0X2FnZV9nZm5gIChub24tc3RhdGljIGVudHJ5cG9pbnRzIGluIG1tdS5jKVxuXG5BaGEhIGBrdm1fYWdlX2dmbmAgYW5kIGBrdm1fdGVzdF9hZ2VfZ2ZuYCBhcmUgZW50cnlwb2ludHMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBhY3R1YWwgY2hhbmdlcyBhcmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgTU1VIGltcGxlbWVudGF0aW9uIGFuZCBtZW1vcnkgYWdpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNzowNi44OTg2NTkwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODIwOlxcdHtcXG4xODIxOlxcdFxcdHJldHVybiAhdGRwX21tdV9lbmFibGVkIHx8IFJFQURfT05DRShrdm0tXFx1MDAzZWFyY2guaW5kaXJlY3Rfc2hhZG93X3BhZ2VzKTtcXG4xODIyOlxcdH1cXG4xODIzOlxcdFxcbjE4MjQ6XFx0Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4xODI1OlxcdHtcXG4xODI2OlxcdFxcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4xODI3OlxcdFxcbjE4Mjg6XFx0XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG4xODI5OlxcdFxcdFxcdHlvdW5nID0ga3ZtX3RkcF9tbXVfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlKTtcXG4xODMwOlxcdFxcbjE4MzE6XFx0XFx0aWYgKGt2bV9tYXlfaGF2ZV9zaGFkb3dfbW11X3NwdGVzKGt2bSkpXFxuMTgzMjpcXHRcXHRcXHR5b3VuZyB8PSBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UsIGZhbHNlKTtcXG4xODMzOlxcdFxcbjE4MzQ6XFx0XFx0cmV0dXJuIHlvdW5nO1xcbjE4MzU6XFx0fVxcbjE4MzY6XFx0XFxuMTgzNzpcXHRib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuMTgzODpcXHR7XFxuMTgzOTpcXHRcXHRib29sIHlvdW5nID0gZmFsc2U7XFxuMTg0MDpcXHRcXG4xODQxOlxcdFxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuMTg0MjpcXHRcXHRcXHR5b3VuZyA9IGt2bV90ZHBfbW11X3Rlc3RfYWdlX2dmbihrdm0sIHJhbmdlKTtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0aWYgKHlvdW5nKVxcbjE4NDU6XFx0XFx0XFx0cmV0dXJuIHlvdW5nO1xcbjE4NDY6XFx0XFxuMTg0NzpcXHRcXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcXG4xODQ4OlxcdFxcdFxcdHlvdW5nIHw9IGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoa3ZtLCByYW5nZSwgdHJ1ZSk7XFxuMTg0OTpcXHRcXG4xODUwOlxcdFxcdHJldHVybiB5b3VuZztcXG4xODUxOlxcdH1cXG4xODUyOlxcdFxcbjE4NTM6XFx0c3RhdGljIHZvaWQga3ZtX21tdV9jaGVja19zcHRlc19hdF9mcmVlKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbjE4NTQ6XFx0e1xcbjE4NTU6XFx0I2lmZGVmIENPTkZJR19LVk1fUFJPVkVfTU1VXFxuMTg1NjpcXHRcXHRpbnQgaTtcXG4xODU3OlxcdFxcbjE4NTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNQVEVfRU5UX1BFUl9QQUdFOyBpKyspIHtcXG4xODU5OlxcdFxcdFxcdGlmIChLVk1fTU1VX1dBUk5fT04oaXNfc2hhZG93X3ByZXNlbnRfcHRlKHNwLVxcdTAwM2VzcHRbaV0pKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDYuODk4OTkzNzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5MzU5MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNJ3MgUm1hcCBBZ2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEtWTSdzIFJldmVyc2UgTWFwIChybWFwKSBhZ2luZyBtZWNoYW5pc20uIEkndmUgZ290IGEgbGlzdCBoZXJlOiBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWAsIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCwgYGt2bV9ybWFwX3VubG9ja19yZWFkb25seWAsIGBrdm1fcm1hcF9sb2NrYCwgYGt2bV9ybWFwX3VubG9ja2AsIGBrdm1fYWdlX2dmbmAsIGBrdm1fdGVzdF9hZ2VfZ2ZuYCwgYHB0ZV9saXN0X2FkZGAsIGBwdGVfbGlzdF9yZW1vdmVgLCBhbmQgYGt2bV96YXBfYWxsX3JtYXBfc3B0ZXNgLiBOb3csIHRoZSBrZXkgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyBmb3IgS0NPViBjb3ZlcmFnZSBhbmQgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLlxuXG5HaXZlbiBteSBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgXCJGb2N1c1N5bWJvbHMuXCIgIEknbGwgbmVlZCB0byBhdm9pZCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHBhdGhzLCBzbyBJIG5lZWQgdG8gYXZvaWQgdmVyeSBnZW5lcmljIGZ1bmN0aW9ucywgYW5kIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGZ1bmN0aW9ucy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSB0aGUgY29yZSBsb2dpYywgb3IgYXJlIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgd2l0aGluIGBtbXUuY2AuICBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG5hcnJvdyBkb3duIHRoZSBzY29wZSBvZiB0aGUgaW52ZXN0aWdhdGlvbi5cblxuRmluYWxseSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcm1hcCdzIGJlaGF2aW9yLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZm9yIGZ1bmN0aW9ucyBsaWtlIGBwdGVfbGlzdF9hZGRgIGFuZCBgcHRlX2xpc3RfcmVtb3ZlYC4gIFVuZGVyc3RhbmRpbmcgdGhlaXIgY2FsbGVycyBpcyBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIGhvdyB0aGUgcm1hcCBpcyBtYW5pcHVsYXRlZCBhbmQgaG93IGFnaW5nIGludGVyYWN0cyB3aXRoIHRoZSBQVEUgbGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTAuNTkyNTkwOTMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEyMjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGVfbGlzdF8oYWRkfHJlbW92ZSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwNjM9c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjktICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDcwOnN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzEtXFx0XFx0XFx0dTY0ICpzcHRlLCBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTE0PXN0YXRpYyB2b2lkIHB0ZV9saXN0X2Rlc2NfcmVtb3ZlX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcF92YWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNDktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTUwOnN0YXRpYyB2b2lkIHB0ZV9saXN0X3JlbW92ZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqc3B0ZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExODY9c3RhdGljIHZvaWQga3ZtX3phcF9vbmVfcm1hcF9zcHRlKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4OS1cXHRtbXVfc3B0ZV9jbGVhcl90cmFja19iaXRzKGt2bSwgc3B0ZXApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE5MDpcXHRwdGVfbGlzdF9yZW1vdmUoa3ZtLCBzcHRlcCwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExOTEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMjQ3PXN0YXRpYyB2b2lkIHJtYXBfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjY3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTI2ODpcXHRwdGVfbGlzdF9yZW1vdmUoa3ZtLCBzcHRlLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTI2OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE3MzQ9c3RhdGljIHZvaWQgX19ybWFwX2FkZChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NDctXFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBzcC1cXHUwMDNlcm9sZS5sZXZlbCwgc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzQ4OlxcdHJtYXBfY291bnQgPSBwdGVfbGlzdF9hZGQoa3ZtLCBjYWNoZSwgc3B0ZSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NDktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE4OTU9c3RhdGljIHZvaWQgbW11X3BhZ2VfYWRkX3BhcmVudF9wdGUoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTAxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTkwMjpcXHRwdGVfbGlzdF9hZGQoa3ZtLCBjYWNoZSwgcGFyZW50X3B0ZSwgXFx1MDAyNnNwLVxcdTAwM2VwYXJlbnRfcHRlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTAzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTkwNT1zdGF0aWMgdm9pZCBtbXVfcGFnZV9yZW1vdmVfcGFyZW50X3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTA3LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE5MDg6XFx0cHRlX2xpc3RfcmVtb3ZlKGt2bSwgcGFyZW50X3B0ZSwgXFx1MDAyNnNwLVxcdTAwM2VwYXJlbnRfcHRlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTA5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTAuNjc0NzI3NzA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTg5OTI1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWdpbmcgaW4gS1ZNKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgbWVtb3J5IGFnaW5nIGlzc3VlIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIGZ1bmN0aW9ucyBga3ZtX21tdV9ub3RpZmllcl9vcHNgIGlzIGEgcHJpbWFyeSBzdXNwZWN0LiBJdCdzIG9mdGVuIGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMsIHNvIHRoYXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGFnaW5nIGlzIHRyYWNrZWQgb3IgdHJpZ2dlcmVkLlxuXG5JIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gTGV0J3Mgc2VlIGhvdyBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgYXJlIGJlaW5nIHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbmFtZWQgaW4gdGhlIHByb21wdCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHQgaXMgY2FsbGluZyB0aGVzZSBhbmQgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZyB3aXRoIHRoZSBhZ2luZyBpbmZvcm1hdGlvbi4gQXJlIHRoZXkgdXNlZCBmb3IgVExCIGludmFsaWRhdGlvbj8gTW9uaXRvcmluZyBhY3Rpdml0eT8gT3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aGljaCBwYWdlcyBhcmUgY2FuZGlkYXRlcyBmb3IgcmVjbGFpbWluZz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIHRvIGZpbmQgYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGVuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjYWxsaW5nIGNvbnRleHQgd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTMuMTczNzI2MTM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI5MTYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtXyhhZ2V8dGVzdF9hZ2UpX2dmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz04Mjk9c3RhdGljIGJvb2wga3ZtX21tdV9ub3RpZmllcl9jbGVhcl9mbHVzaF95b3VuZyhzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODMzLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODM0OlxcdHJldHVybiBrdm1fYWdlX2h2YV9yYW5nZShtbiwgc3RhcnQsIGVuZCwga3ZtX2FnZV9nZm4sXFxudmlydC9rdm0va3ZtX21haW4uYy04MzUtXFx0XFx0XFx0XFx0ICFJU19FTkFCTEVEKENPTkZJR19LVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HKSk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTgzOD1zdGF0aWMgYm9vbCBrdm1fbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy04NTUtXFx0ICovXFxudmlydC9rdm0va3ZtX21haW4uYzo4NTY6XFx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBzdGFydCwgZW5kLCBrdm1fYWdlX2dmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy04NTctfVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz04NTk9c3RhdGljIGJvb2wga3ZtX21tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy04NjQtXFx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBhZGRyZXNzLCBhZGRyZXNzICsgMSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg2NTpcXHRcXHRcXHRcXHRcXHQgIGt2bV90ZXN0X2FnZV9nZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtODY2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTMuNTA2NjQ4NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc5Nzg4NDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBmb3IgRnV6emluZyBLVk0gUmVhbC1UaW1lIExvY2tpbmcqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2FyeSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4gSSdsbCBuZWVkIGBLVk1gIGVuYWJsZWQsIG5hdHVyYWxseSwgZm9yIEtWTSB2aXJ0dWFsaXphdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgeDg2IEtWTSBtb2R1bGVzLiBGaW5hbGx5LCBnaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWwtdGltZSBsb2NraW5nIHZhcmlhbnQsIEnigJlsbCBuZWVkIGBQUkVFTVBUX1JUYC4gSSB3YW50IHRvIHN0cmVzcyB0ZXN0IHRoZSBSVCBsb2NraW5nIHBhdGhzIHNvIGl0IHNob3VsZCBiZSBlbmFibGVkOyBob3dldmVyLCBib3RoIHRoZSBub24tUlQgYW5kIFJUIHBhdGhzIGFyZSBhZmZlY3RlZC4gU28sIHRob3NlIGZvdXIgY29uZmlndXJhdGlvbnMgYXJlIHRoZSBzdGFydGluZyBwb2ludDogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgUFJFRU1QVF9SVGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlICpmdXp6YWJsZSo/IElzIGl0IHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBrZXJuZWwgY29kZT8gQWJzb2x1dGVseS4gS1ZNIGlzIGFjY2Vzc2libGUgdmlhIGAvZGV2L2t2bWAgaW9jdGxzIGFuZCBtbXVfbm90aWZpZXJzLiBUaGlzIHBhdGNoIGFkZHMgbG9ja2luZyBhc3NlcnRpb25zIChgbG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkYCwgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGVgKSwgUlQgcGF0aHMgZm9yIHJtYXAgbG9ja2luZywgYW5kIHJlZmFjdG9yZWQgZnVuY3Rpb24gc2lnbmF0dXJlcywgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCBoYXMgdGhlIHJpZ2h0IGZlYXR1cmVzIHRvIGJlIHdvcnRoIGZ1enppbmcuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgZm9yIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBybWFwIG1hbmFnZW1lbnQsIE1NVSBwYWdlIHRyYWNraW5nLCBhbmQgYWdpbmcgZnVuY3Rpb25zLiBTbywgSSBuZWVkIHRvIHNlbGVjdCBmdW5jdGlvbnMgcmVsYXRpbmcgdG8gcm1hcCBhZ2UvbG9ja2luZzpcbiogICBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWBcbiogICBga3ZtX3JtYXBfbG9ja19yZWFkb25seWBcbiogICBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YFxuKiAgIGBrdm1fcm1hcF9sb2NrYFxuKiAgIGBrdm1fcm1hcF91bmxvY2tgXG4qICAgYGt2bV9hZ2VfZ2ZuYFxuKiAgIGBrdm1fdGVzdF9hZ2VfZ2ZuYFxuKiAgIGBwdGVfbGlzdF9hZGRgXG4qICAgYHB0ZV9saXN0X3JlbW92ZWBcbiogICBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2BcblxuVGhlc2Ugc2hvdWxkIGJlIGFsbCBvZiB0aGUgcmVsZXZhbnQgS1ZNIHJtYXAgbWFuYWdlbWVudCAvIE1NVSBwYWdlIHRyYWNraW5nIC8gYWdpbmcgZnVuY3Rpb25zLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBjb25maXJtIHRoYXQgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFBSRUVNUFRfUlRgLlxuXG5XaXRoIGFsbCBvZiB0aGlzIGNoZWNrZWQgYW5kIGRvdWJsZS1jaGVja2VkLCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI3NiwiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTguMzA0NTM2NjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3NTUxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNzoxOC40NTgzMDY1MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU2MDc1NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTguNDU5NDc2NzQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTAzNTQ4OTg4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjdmNGQ2NTRkNmRjOTU3Zjg2YzE5NzFhYjU1ZGU5Zjg2MmEzZGQwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjY6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uNWJmODMzNTUwZjg0ZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC04OTUsNiArODk1LDcgQEAgc3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90X2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVcbiAgKi9cbiAjZGVmaW5lIEtWTV9STUFQX01BTllcdEJJVCgwKVxuIFxuKyNpZm5kZWYgQ09ORklHX1BSRUVNUFRfUlRcbiAvKlxuICAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xuICAqIG9wZXJhdGVzIHdpdGggbW11X2xvY2sgaGVsZCBmb3Igd3JpdGUpLCBidXQgcm1hcHMgY2FuIGJlIHdhbGtlZCB3aXRob3V0XG5AQCAtMTAwOCw3ICsxMDA5LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4gICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlXG4gICogcm1hcCwgYW5kIHNvIHRoZSB1bmxvY2sgZmxvdyBpcyBhIG5vcCBpZiB0aGUgcm1hcCBpcy93YXMgZW1wdHkuXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJtYXBfdmFsO1xuIFxuQEAgLTEwMzIsNiArMTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbiBcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgb2xkX3ZhbCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbisjZWxzZVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuK3tcbitcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwpO1xuK31cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0cmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuK1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpXG4re1xuK1x0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCwgbmV3X3ZhbCk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdHJldHVybiBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9XG4rI2VuZGlmXG4gXG4gLypcbiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS5cbkBAIC0xNzQ1LDExICsxNzc2LDE1IEBAIHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuIFx0Z2ZuX3QgZ2ZuO1xuIFx0aW50IGxldmVsO1xuIFxuKyNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVFxuK1x0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuKyNlbmRpZlxuK1xuIFx0Zm9yIChsZXZlbCA9IFBHX0xFVkVMXzRLOyBsZXZlbCBcdTAwM2M9IEtWTV9NQVhfSFVHRVBBR0VfTEVWRUw7IGxldmVsKyspIHtcbiBcdFx0Zm9yIChnZm4gPSByYW5nZS1cdTAwM2VzdGFydDsgZ2ZuIFx1MDAzYyByYW5nZS1cdTAwM2VlbmQ7XG4gXHRcdCAgICAgZ2ZuICs9IEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKSB7XG4gXHRcdFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBsZXZlbCwgcmFuZ2UtXHUwMDNlc2xvdCk7XG4tXHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCk7XG4rXHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcbiBcbiBcdFx0XHRmb3JfZWFjaF9ybWFwX3NwdGVfbG9ja2xlc3Mocm1hcF92YWwsIFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xuIFx0XHRcdFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjE4LjQ1OTQ4OTgyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODk0NTQzMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBNTVUgTG9ja2luZyBMb2dpYyBmb3IgQ09ORklHX1BSRUVNUFRfUlQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdHdlYWtpbmcgdGhlIEtWTSBNTVUgbG9ja2luZyBmb3IgYENPTkZJR19QUkVFTVBUX1JUYC4gTGV0J3MgZGlnIGluLiBGaXJzdCwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gUmlnaHQgYXdheSwgSSBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGUgY29kZSBpcyBjbGVhcmx5IGNoYW5naW5nIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgZW5hYmxlZC4gSXQgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgIGlzIG9ubHkgZGVmaW5lZCBpZiB3ZSAqZG9uJ3QqIGhhdmUgYENPTkZJR19QUkVFTVBUX1JUYC4gSWYgYENPTkZJR19QUkVFTVBUX1JUYCAqaXMqIGVuYWJsZWQsIHdlIGdldCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGBrdm1fcm1hcF9nZXRgLCBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBhbmQgdGhlIHJlYWQtb25seSB2ZXJzaW9ucy4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLlxuXG5Mb29raW5nIGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBJIHNlZSBhIGBndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7YCB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUYC4gVGhpcyBpbXBsaWVzIHNvbWUgUlQtc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc20gaXMgYmVpbmcgdXNlZCwgYW5kIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTU1VIGxvY2sgZGlyZWN0bHkuIEFkZGl0aW9uYWxseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgdXBkYXRpbmcgYSBjYWxsIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAuXG5cbk5vdywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgcmVzdCBvZiBgbW11LmNgLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBjYWxscyB0byB0aGVzZSBybWFwIGxvY2tpbmcgZnVuY3Rpb25zLCByZWFkLW9ubHkgb3Igb3RoZXJ3aXNlLCBoYXZlIGJlZW4gbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGFkZGVkLiBXZSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgdGhpcyBjaGFuZ2VzIHRoZSBsb2NraW5nIHNlbWFudGljcyB0aHJvdWdob3V0IHRoZSBNTVUgY29kZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIHNvIGFueSBzdWJ0bGUgY2hhbmdlcyBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjIzLjM1NDAzODc3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTMxMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ybWFwX2xvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTg3ND1zdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTE2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTE3OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTE4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU0LVxcdCAqIGZyb20gYmVpbmcgcmVvcmRlcmVkIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gY3JlYXRlZCBieVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTU1OlxcdCAqIF9fa3ZtX3JtYXBfbG9jaygpLlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU2LVxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3MS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk3MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5Nzc6XFx0cmV0dXJuIF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9OTgwPXN0YXRpYyB2b2lkIF9fa3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4Ny1cXHQgKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTg4OlxcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4OS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxMS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMTI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDEzLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDE3LVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTAxODpcXHRybWFwX3ZhbCA9IF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxOS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0MS19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDQyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDQ5PXN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNTUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDU2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1Ny1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA3MD1zdGF0aWMgaW50IHB0ZV9saXN0X2FkZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDc3OlxcdG9sZF92YWwgPSBrdm1fcm1hcF9sb2NrKGt2bSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExNTA9c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTU2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE1NzpcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE1OC1cXHRpZiAoS1ZNX0JVR19PTl9EQVRBX0NPUlJVUFRJT04oIXJtYXBfdmFsLCBrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTk0PXN0YXRpYyBib29sIGt2bV96YXBfYWxsX3JtYXBfc3B0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjAwLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTIwMTpcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMi1cXHRpZiAoIXJtYXBfdmFsKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzY2PXN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg2LVxcdFxcdFxcdHJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLVxcdTAwM2VzbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3ODc6XFx0XFx0XFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjIzLjgxNjk4MTg2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTk3MzYxNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBNTVUgUGF0Y2ggZm9yIFJUIEtlcm5lbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIHJtYXAgbG9ja2luZyBtZWNoYW5pc20gc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBNTVUgZm9yIFJUIGtlcm5lbHMsIHdoaWNoIGlzIGltcG9ydGFudC4gV2l0aCBgQ09ORklHX1BSRUVNUFRfUlRgIGVuYWJsZWQsIHdlIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQgc3Bpbi13YWl0aW5nIGFwcHJvYWNoIHdpdGggZGlzYWJsZWQgcHJlZW1wdGlvbiBpbiBgX19rdm1fcm1hcF9sb2NrYC4gVGhhdCdzIGJlY2F1c2UgUlQga2VybmVscyBhcmUgdmVyeSBzdHJpY3QgYWJvdXQgbG9uZyBwcmVlbXB0aW9uIGRpc2FibGVzIGFuZCBzcGlubmluZyB3aGVuIHNsZWVwaW5nIGxvY2tzIGFyZSBpbiBwbGF5LiBJdCBqdXN0IGlzbid0IGdvaW5nIHRvIHdvcmsuXG5cblNvLCB0aGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IHRoYXQgYml0bG9jayBvbiBgcm1hcF9oZWFkLVx1MDAzZXZhbGAgZm9yIHRoZSBga3ZtLVx1MDAzZW1tdV9sb2NrYCByZWFkL3dyaXRlIGxvY2tpbmcgbWVjaGFuaXNtLiBUaGF0J3MgYSBnb29kIGFwcHJvYWNoIG9uIFBSRUVNUFRfUlQuIE5vdyBpbiBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSgpYCwgd2Ugc2VlIHRoYXQgd2UgYXJlIGNhbGxpbmcgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoa3ZtLCBybWFwX2hlYWQpYCB1c2luZyBgcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaylgLlxuXG5BbHJpZ2h0LCBsZXQncyBub3cgZXZhbHVhdGUgdGhpcyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG4qICAgRG9lcyB0aGlzIGxlYWQgdG8gY29weWluZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBOb3BlLCB0aGF0J3Mgbm90IGEgY29uY2VybiBoZXJlLlxuKiAgIElzIHRoZXJlIGFueSBhbGxvY2F0aW9uIG9yIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBJIGRvbid0IHNlZSBhbnl0aGluZyBsaWtlIHRoYXQgaGFwcGVuaW5nLlxuKiAgIEFyZSB3ZSBkZWFsaW5nIHdpdGggYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgcGFkZGluZywgb3IgdmFyaWFibGVzPyBOby4gRXZlcnl0aGluZyBsb29rcyBwcm9wZXJseSBpbml0aWFsaXplZC5cbiogICBXb3VsZCBLTVNBTiBmbGFnIGFueSBidWdzIGhlcmU/IE5vLCBJIGRvbid0IHNlZSBhbnkgS01TQU4tZGV0ZWN0YWJsZSBidWdzLiBUaGUgY29uY2VybnMgbGlrZSBsb2NraW5nIGlzc3VlcywgY29uY3VycmVuY3ksIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcywgb3IgbG9naWMgZXJyb3JzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgS0FTQU4sIG9yIHRocmVhZCBzYW5pdGl6ZXIsIG5vdCBLTVNBTi5cblxuU28sIGdpdmVuIHRoaXMgY2FyZWZ1bCBhbmFseXNpcywgXCJOZWVkc0tNU0FOXCIgY2FuIHNhZmVseSBiZSBzZXQgdG8gXCJmYWxzZVwiLiBUaGUgcGF0Y2ggbG9va3MgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM3MiwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MjguODE0MzQ4MjQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHJtYXAgbG9ja2luZyBoZWxwZXJzIHRvIHN1cHBvcnQgQ09ORklHX1BSRUVNUFRfUlQgYnkgcmVseWluZyBvbiByd2xvY2stYmFzZWQgbW11X2xvY2sgaW5zdGVhZCBvZiBjdXN0b20gYml0LXNwaW5uaW5nIGxvY2tzLiBUaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgc2VtYW50aWNzOyB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBjb3B5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIHNpemVzIG9yIGV4cG9zZSBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiBhcmUgaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 20:23:44 +0000 UTC FinishedAt: 2026-09-03 20:27:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "PREEMPT_RT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "PREEMPT_RT" ], "series_id": "4e6cab48-8b04-4107-bacd-d2bfc8bf94eb" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_rmap_age_gfn_range", "kvm_rmap_lock_readonly", "kvm_rmap_unlock_readonly", "kvm_rmap_lock", "kvm_rmap_unlock", "kvm_age_gfn", "kvm_test_age_gfn", "pte_list_add", "pte_list_remove", "kvm_zap_all_rmap_sptes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrX3JlYWRvbmx5JiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrJiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9jayYjMzQ7LAogICAgJiMzNDtrdm1fYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fdGVzdF9hZ2VfZ2ZuJiMzNDssCiAgICAmIzM0O3B0ZV9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9yZW1vdmUmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9hbGxfcm1hcF9zcHRlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdmNGQ2NTRkNmRjOTU3Zjg2YzE5NzFhYjU1ZGU5Zjg2MmEzZGQwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjY6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdVxuICAqL1xuICNkZWZpbmUgS1ZNX1JNQVBfTUFOWVx0QklUKDApXG4gXG4mIzQzOyNpZm5kZWYgQ09ORklHX1BSRUVNUFRfUlRcbiAvKlxuICAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xuICAqIG9wZXJhdGVzIHdpdGggbW11X2xvY2sgaGVsZCBmb3Igd3JpdGUpLCBidXQgcm1hcHMgY2FuIGJlIHdhbGtlZCB3aXRob3V0XG5AQCAtMTAwOCw3ICYjNDM7MTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuICAqIGFjdHVhbCBsb2NraW5nIGlzIHRoZSBzYW1lLCBidXQgdGhlIGNhbGxlciBpcyBkaXNhbGxvd2VkIGZyb20gbW9kaWZ5aW5nIHRoZVxuICAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJtYXBfdmFsO1xuIFxuQEAgLTEwMzIsNiAmIzQzOzEwMzQsMzUgQEAgc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4gXHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCk7XG4mIzQzO31cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuJiM0Mzt7XG4mIzQzO1x0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCwgbmV3X3ZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvbGRfdmFsKSB7IH1cbiYjNDM7I2VuZGlmXG4gXG4gLypcbiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS5cbkBAIC0xNzQ1LDExICYjNDM7MTc3NiwxNSBAQCBzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGdmbl90IGdmbjtcbiBcdGludCBsZXZlbDtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXG4mIzQzO1x0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKGxldmVsID0gUEdfTEVWRUxfNEs7IGxldmVsIFx1MDAzYz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwmIzQzOyYjNDM7KSB7XG4gXHRcdGZvciAoZ2ZuID0gcmFuZ2UtXHUwMDNlc3RhcnQ7IGdmbiBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kO1xuIFx0XHQgICAgIGdmbiAmIzQzOz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHtcbiBcdFx0XHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cdTAwM2VzbG90KTtcbi1cdFx0XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkocm1hcF9oZWFkKTtcbiYjNDM7XHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcbiBcbiBcdFx0XHRmb3JfZWFjaF9ybWFwX3NwdGVfbG9ja2xlc3Mocm1hcF92YWwsIFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xuIFx0XHRcdFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9ybWFwX2FnZV9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9jayYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2smIzM0OywKICAgICYjMzQ7a3ZtX2FnZV9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3Rlc3RfYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cHRlX2xpc3RfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2t2bV96YXBfYWxsX3JtYXBfc3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcmV2ZXJzZS1tYXBwaW5nIChybWFwKSBsb2NraW5nIGxvZ2ljLCBhZGRpbmcgQ09ORklHX1BSRUVNUFRfUlQgc3VwcG9ydCB3aXRoIGxvY2tkZXAgYXNzZXJ0aW9ucyAobG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkL2xvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUpIGFuZCBtb2RpZnlpbmcgdGhlIHJtYXAgYWdpbmcgYW5kIGxvY2tpbmcgcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTVUgbm90aWZpZXJzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBpbnZhcmlhbnQgY2hlY2tzIGFuZCBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyN2Y0ZDY1NGQ2ZGM5NTdmODZjMTk3MWFiNTVkZTlmODYyYTNkZDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMDoyNjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdQogICovCiAjZGVmaW5lIEtWTV9STUFQX01BTlkJQklUKDApCiAKJiM0MzsjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUCiAvKgogICogcm1hcHMgYW5kIFBURSBsaXN0cyBhcmUgbW9zdGx5IHByb3RlY3RlZCBieSBtbXVfbG9jayAodGhlIHNoYWRvdyBNTVUgYWx3YXlzCiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dApAQCAtMTAwOCw3ICYjNDM7MTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQogICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlCiAgKiBybWFwLCBhbmQgc28gdGhlIHVubG9jayBmbG93IGlzIGEgbm9wIGlmIHRoZSBybWFwIGlzL3dhcyBlbXB0eS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpCiB7CiAJdW5zaWduZWQgbG9uZyBybWFwX3ZhbDsKIApAQCAtMTAzMiw2ICYjNDM7MTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCwKIAlfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7cm1hcF9oZWFkLSZndDt2YWwpOwomIzQzO30KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJcmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCSAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCSAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgmYW1wO3JtYXBfaGVhZC0mZ3Q7dmFsLCBuZXdfdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZCgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS4KQEAgLTE3NDUsMTEgJiM0MzsxNzc2LDE1IEBAIHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAogCWdmbl90IGdmbjsKIAlpbnQgbGV2ZWw7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlQKJiM0MzsJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOyNlbmRpZgomIzQzOwogCWZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgJmx0Oz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwmIzQzOyYjNDM7KSB7CiAJCWZvciAoZ2ZuID0gcmFuZ2UtJmd0O3N0YXJ0OyBnZm4gJmx0OyByYW5nZS0mZ3Q7ZW5kOwogCQkgICAgIGdmbiAmIzQzOz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHsKIAkJCXJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLSZndDtzbG90KTsKLQkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShybWFwX2hlYWQpOwomIzQzOwkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7CiAKIAkJCWZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgJmFtcDtpdGVyLCBzcHRlcCwgb2xkX3NwdGUpIHsKIAkJCQlpZiAoIWlzX2FjY2Vzc2VkX3NwdGUob2xkX3NwdGUpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzM2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBQcmVlbXB0X1JUIENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB0aGUgcmVsZXZhbnQgdG9vbHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEkgc2VlIHRoZSBwYXRjaCBmb2N1c2VzIG9uIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGludGVyZXN0IOKAkyBhbnl0aGluZyB0b3VjaGluZyB0aGUgTU1VIGluIEtWTSBpcyB1c3VhbGx5IHdvcnRoIGEgY2FyZWZ1bCBsb29rLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1c2luZyBgI2lmbmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYW5kIGAjZWxzZWAvYCNlbmRpZmAgYmxvY2tzIGFyb3VuZCBzZXZlcmFsIGZ1bmN0aW9ucywgbmFtZWx5IGBrdm1fcm1hcF9nZXRgLCBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBhbmQgdGhlIHJlYWQtb25seSB2YXJpYW50cy4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBSZWFsLVRpbWUgUHJlZW1wdGlvbiAoQ09ORklHX1BSRUVNUFRfUlQpIGNvbmZpZ3VyYXRpb24uIEl0IGFsc28gYXBwZWFycyB0aGF0IGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYSBga3ZtYCBhcmd1bWVudC4gVGhhdCYjMzk7cyBhIHN0cnVjdHVyYWwgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC4KCkZ1cnRoZXJtb3JlLCBJIG5vdGUgdGhlIGFkZGl0aW9uIHdpdGhpbiBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSgpYC4gVGhlcmUmIzM5O3Mgbm93IGEgcmVhZCBsb2NrIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYmxvY2s6IGBndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7YCBhbmQgYSBjYWxsIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgcmVhZCBsb2NrIGlzIGxpa2VseSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgdGhlIGJhbmUgb2YgcmVhbC10aW1lIHN5c3RlbXMuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9lcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIHRvIHNlZSBob3cgdGhlIGNoYW5nZXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0fVxuMTAwMTpcdFxuMTAwMjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuMTAwMzpcdHtcbjEwMDQ6XHRcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwpIFx1MDAyNiB+S1ZNX1JNQVBfTE9DS0VEO1xuMTAwNTpcdH1cbjEwMDY6XHRcbjEwMDc6XHQvKlxuMTAwODpcdCAqIElmIG1tdV9sb2NrIGlzbiYjMzk7dCBoZWxkLCBybWFwcyBjYW4gb25seSBiZSBsb2NrZWQgaW4gcmVhZC1vbmx5IG1vZGUuICBUaGVcbjEwMDk6XHQgKiBhY3R1YWwgbG9ja2luZyBpcyB0aGUgc2FtZSwgYnV0IHRoZSBjYWxsZXIgaXMgZGlzYWxsb3dlZCBmcm9tIG1vZGlmeWluZyB0aGVcbjEwMTA6XHQgKiBybWFwLCBhbmQgc28gdGhlIHVubG9jayBmbG93IGlzIGEgbm9wIGlmIHRoZSBybWFwIGlzL3dhcyBlbXB0eS5cbjEwMTE6XHQgKi9cbjEwMTI6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbjEwMTM6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4xMDE0Olx0e1xuMTAxNTpcdFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcbjEwMTY6XHRcbjEwMTc6XHRcdHByZWVtcHRfZGlzYWJsZSgpO1xuMTAxODpcdFx0cm1hcF92YWwgPSBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcbjEwMTk6XHRcbjEwMjA6XHRcdGlmICghcm1hcF92YWwpXG4xMDIxOlx0XHRcdHByZWVtcHRfZW5hYmxlKCk7XG4xMDIyOlx0XG4xMDIzOlx0XHRyZXR1cm4gcm1hcF92YWw7XG4xMDI0Olx0fVxuMTAyNTpcdFxuMTAyNjpcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuMTAyNzpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpXG4xMDI4Olx0e1xuMTAyOTpcdFx0aWYgKCFvbGRfdmFsKVxuMTAzMDpcdFx0XHRyZXR1cm47XG4xMDMxOlx0XG4xMDMyOlx0XHRLVk1fTU1VX1dBUk5fT04ob2xkX3ZhbCAhPSBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKSk7XG4xMDMzOlx0XG4xMDM0Olx0XHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuMTAzNTpcdFx0cHJlZW1wdF9lbmFibGUoKTtcbjEwMzY6XHR9XG4xMDM3Olx0I2Vsc2VcbjEwMzg6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbjEwMzk6XHR7XG4xMDQwOlx0XHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZybWFwX2hlYWQtXHUwMDNldmFsKTtcbjEwNDE6XHR9XG4xMDQyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4xMDQzOlx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuMTA0NDpcdHtcbjEwNDU6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbjEwNDY6XHRcdHJldHVybiBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKTtcbjEwNDc6XHR9XG4xMDQ4Olx0XG4xMDQ5Olx0c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbjEwNTA6XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbjEwNTE6XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuMTA1MjpcdHtcbjEwNTM6XHRcdGF0b21pY19sb25nX3NldF9yZWxlYXNlKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwsIG5ld192YWwpO1xuMTA1NDpcdH1cbjEwNTU6XHRcbjEwNTY6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbjEwNTc6XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4xMDU4Olx0e1xuMTA1OTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4xMDYwOlx0XHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4xMDYxOlx0fVxuMTA2MjpcdFxuMTA2MzpcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuMTA2NDpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxuMTA2NTpcdCNlbmRpZlxuMTA2NjpcdFxuMTA2NzpcdC8qXG4xMDY4Olx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGluIHRoZSBybWFwIGNoYWluLCBub3QgY291bnRpbmcgdGhlIG5ldyBvbmUuXG4xMDY5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGBrdm1fcm1hcF9nZXRgIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhlIGNvZGUsIHRyYWNpbmcgdGhlIHBhdGgsIGFuZCBJJiMzOTt2ZSBoaXQgYGt2bV9ybWFwX2dldGAuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgY2VudHJhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBLVk0mIzM5O3MgcmV2ZXJzZSBtYXBwaW5nLiBCZWZvcmUgSSBnZXQgKnRvbyogaW52b2x2ZWQgaW4gZGlzc2VjdGluZyB0aGlzIHNwZWNpZmljIGNhbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gSSBjYW4mIzM5O3QganVzdCBkaXZlIGluIHdpdGhvdXQgY29udGV4dC4KClRoZXJlZm9yZSwgSSB3aWxsIGdvIGJhY2sgdG8gdGhlIHNlY3Rpb24gKnByZWNlZGluZyogdGhlIGNhbGwuIFRoZSBtb3N0IGxvZ2ljYWwgYXBwcm9hY2ggaXMgdG8gY2hlY2sgdGhlIGxpbmVzIHJpZ2h0IGJlZm9yZS4gTGluZXMgOTAwLTEwMDAgc2VlbSBsaWtlIGEgZ29vZCBjaHVuayB0byBleGFtaW5lLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIHZhcmlhYmxlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQganVzdCBiZWZvcmUsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiB1c2UsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgbGFyZ2VyIG1vZHVsZS4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB3aHkgYGt2bV9ybWFwX2dldGAgaXMgZXZlbiAqbmVlZGVkKiBhdCB0aGlzIHBvaW50LiBXaXRoIHRoaXMgYmFja2dyb3VuZCBpbiBwbGFjZSwgSSB3aWxsIGJlIGluIGEgbXVjaCBiZXR0ZXIgcG9zaXRpb24gdG8gYXBwcmVjaWF0ZSB0aGUgcm9sZSBvZiBga3ZtX3JtYXBfZ2V0YCBhbmQgaXRzIGltcGFjdC4gSSYjMzk7bGwgYmUgbW9yZSBjb25maWRlbnQgdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgdml0YWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgYW5kIHRoYXQgdGhlIGZsb3cgbWFrZXMgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0ICogcm1hcHMgYW5kIFBURSBsaXN0cyBhcmUgbW9zdGx5IHByb3RlY3RlZCBieSBtbXVfbG9jayAodGhlIHNoYWRvdyBNTVUgYWx3YXlzXG4gOTAxOlx0ICogb3BlcmF0ZXMgd2l0aCBtbXVfbG9jayBoZWxkIGZvciB3cml0ZSksIGJ1dCBybWFwcyBjYW4gYmUgd2Fsa2VkIHdpdGhvdXRcbiA5MDI6XHQgKiBob2xkaW5nIG1tdV9sb2NrIHNvIGxvbmcgYXMgdGhlIGNhbGxlciBjYW4gdG9sZXJhdGUgU1BURXMgaW4gdGhlIHJtYXAgY2hhaW5cbiA5MDM6XHQgKiBiZWluZyB6YXBwZWQvZHJvcHBlZCBfd2hpbGUgdGhlIHJtYXAgaXMgbG9ja2VkXy5cbiA5MDQ6XHQgKlxuIDkwNTpcdCAqIE90aGVyIHRoYW4gdGhlIEtWTV9STUFQX0xPQ0tFRCBmbGFnLCBtb2RpZmljYXRpb25zIHRvIHJtYXAgZW50cmllcyBtdXN0IGJlXG4gOTA2Olx0ICogZG9uZSB3aGlsZSBob2xkaW5nIG1tdV9sb2NrIGZvciB3cml0ZS4gIFRoaXMgYWxsb3dzIGEgdGFzayB3YWxraW5nIHJtYXBzXG4gOTA3Olx0ICogd2l0aG91dCBob2xkaW5nIG1tdV9sb2NrIHRvIGNvbmN1cnJlbnRseSB3YWxrIHRoZSBzYW1lIGVudHJpZXMgYXMgYSB0YXNrXG4gOTA4Olx0ICogdGhhdCBpcyBob2xkaW5nIG1tdV9sb2NrIGJ1dCBfbm90XyB0aGUgcm1hcCBsb2NrLiAgTmVpdGhlciB0YXNrIHdpbGwgbW9kaWZ5XG4gOTA5Olx0ICogdGhlIHJtYXBzLCB0aHVzIHRoZSB3YWxrcyBhcmUgc3RhYmxlLlxuIDkxMDpcdCAqXG4gOTExOlx0ICogQXMgYWxsdWRlZCB0byBhYm92ZSwgU1BURXMgaW4gcm1hcHMgYXJlIF9ub3RfIHByb3RlY3RlZCBieSBLVk1fUk1BUF9MT0NLRUQsXG4gOTEyOlx0ICogb25seSB0aGUgcm1hcCBjaGFpbnMgdGhlbXNlbHZlcyBhcmUgcHJvdGVjdGVkLiAgRS5nLiBob2xkaW5nIGFuIHJtYXAmIzM5O3MgbG9ja1xuIDkxMzpcdCAqIGVuc3VyZXMgYWxsIFwmIzM0O3N0cnVjdCBwdGVfbGlzdF9kZXNjXCYjMzQ7IGZpZWxkcyBhcmUgc3RhYmxlLlxuIDkxNDpcdCAqL1xuIDkxNTpcdCNkZWZpbmUgS1ZNX1JNQVBfTE9DS0VEXHRCSVQoMSlcbiA5MTY6XHRcbiA5MTc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2t2bV9ybWFwX2xvY2soc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiA5MTg6XHR7XG4gOTE5Olx0XHR1bnNpZ25lZCBsb25nIG9sZF92YWwsIG5ld192YWw7XG4gOTIwOlx0XG4gOTIxOlx0XHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XG4gOTIyOlx0XG4gOTIzOlx0XHQvKlxuIDkyNDpcdFx0ICogRWxpZGUgdGhlIGxvY2sgaWYgdGhlIHJtYXAgaXMgZW1wdHksIGFzIGxvY2tsZXNzIHdhbGtlcnMgKHJlYWQtb25seVxuIDkyNTpcdFx0ICogbW9kZSkgZG9uJiMzOTt0IG5lZWQgdG8gKGFuZCBjYW4mIzM5O3QpIHdhbGsgYW4gZW1wdHkgcm1hcCwgbm9yIGNhbiB0aGV5IGFkZFxuIDkyNjpcdFx0ICogZW50cmllcyB0byB0aGUgcm1hcC4gIEkuZS4gdGhlIG9ubHkgcGF0aHMgdGhhdCBwcm9jZXNzIGVtcHR5IHJtYXBzXG4gOTI3Olx0XHQgKiBkbyBzbyB3aGlsZSBob2xkaW5nIG1tdV9sb2NrIGZvciB3cml0ZSwgYW5kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4gOTI4Olx0XHQgKi9cbiA5Mjk6XHRcdG9sZF92YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwpO1xuIDkzMDpcdFx0aWYgKCFvbGRfdmFsKVxuIDkzMTpcdFx0XHRyZXR1cm4gMDtcbiA5MzI6XHRcbiA5MzM6XHRcdGRvIHtcbiA5MzQ6XHRcdFx0LypcbiA5MzU6XHRcdFx0ICogSWYgdGhlIHJtYXAgaXMgbG9ja2VkLCB3YWl0IGZvciBpdCB0byBiZSB1bmxvY2tlZCBiZWZvcmVcbiA5MzY6XHRcdFx0ICogdHJ5aW5nIGFjcXVpcmUgdGhlIGxvY2ssIGUuZy4gdG8gYXZvaWQgYm91bmNpbmcgdGhlIGNhY2hlXG4gOTM3Olx0XHRcdCAqIGxpbmUuXG4gOTM4Olx0XHRcdCAqL1xuIDkzOTpcdFx0XHR3aGlsZSAob2xkX3ZhbCBcdTAwMjYgS1ZNX1JNQVBfTE9DS0VEKSB7XG4gOTQwOlx0XHRcdFx0Y3B1X3JlbGF4KCk7XG4gOTQxOlx0XHRcdFx0b2xkX3ZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCk7XG4gOTQyOlx0XHRcdH1cbiA5NDM6XHRcbiA5NDQ6XHRcdFx0LypcbiA5NDU6XHRcdFx0ICogUmVjaGVjayBmb3IgYW4gZW1wdHkgcm1hcCwgaXQgbWF5IGhhdmUgYmVlbiBwdXJnZWQgYnkgdGhlXG4gOTQ2Olx0XHRcdCAqIHRhc2sgdGhhdCBoZWxkIHRoZSBsb2NrLlxuIDk0NzpcdFx0XHQgKi9cbiA5NDg6XHRcdFx0aWYgKCFvbGRfdmFsKVxuIDk0OTpcdFx0XHRcdHJldHVybiAwO1xuIDk1MDpcdFxuIDk1MTpcdFx0XHRuZXdfdmFsID0gb2xkX3ZhbCB8IEtWTV9STUFQX0xPQ0tFRDtcbiA5NTI6XHRcdC8qXG4gOTUzOlx0XHQgKiBVc2UgdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIHRvIHByZXZlbnQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgcm1hcFxuIDk1NDpcdFx0ICogZnJvbSBiZWluZyByZW9yZGVyZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBjcmVhdGVkIGJ5XG4gOTU1Olx0XHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cbiA5NTY6XHRcdCAqXG4gOTU3Olx0XHQgKiBQYWlycyB3aXRoIHRoZSBhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgpIGluIGt2bV9ybWFwX3VubG9jaygpLlxuIDk1ODpcdFx0ICpcbiA5NTk6XHRcdCAqIEZvciB0aGUgIW9sZF92YWwgY2FzZSwgbm8gb3JkZXJpbmcgaXMgbmVlZGVkLCBhcyB0aGVyZSBpcyBubyBybWFwXG4gOTYwOlx0XHQgKiB0byB3YWxrLlxuIDk2MTpcdFx0ICovXG4gOTYyOlx0XHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZShcdTAwMjZybWFwX2hlYWQtXHUwMDNldmFsLCBcdTAwMjZvbGRfdmFsLCBuZXdfdmFsKSk7XG4gOTYzOlx0XG4gOTY0Olx0XHQvKlxuIDk2NTpcdFx0ICogUmV0dXJuIHRoZSBvbGQgdmFsdWUsIGkuZS4gX3dpdGhvdXRfIHRoZSBMT0NLRUQgYml0IHNldC4gIEl0JiMzOTtzXG4gOTY2Olx0XHQgKiBpbXBvc3NpYmxlIGZvciB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIDAgKHNlZSBhYm92ZSksIGkuZS4gdGhlIHJlYWQtXG4gOTY3Olx0XHQgKiBvbmx5IHVubG9jayBmbG93IGNhbiYjMzk7dCBnZXQgYSBmYWxzZSBwb3NpdGl2ZSBhbmQgZmFpbCB0byB1bmxvY2suXG4gOTY4Olx0XHQgKi9cbiA5Njk6XHRcdHJldHVybiBvbGRfdmFsO1xuIDk3MDpcdH1cbiA5NzE6XHRcbiA5NzI6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbiA5NzM6XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4gOTc0Olx0e1xuIDk3NTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIDk3NjpcdFxuIDk3NzpcdFx0cmV0dXJuIF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xuIDk3ODpcdH1cbiA5Nzk6XHRcbiA5ODA6XHRzdGF0aWMgdm9pZCBfX2t2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuIDk4MTpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgdmFsKVxuIDk4MjpcdHtcbiA5ODM6XHRcdEtWTV9NTVVfV0FSTl9PTih2YWwgXHUwMDI2IEtWTV9STUFQX0xPQ0tFRCk7XG4gOTg0Olx0XHQvKlxuIDk4NTpcdFx0ICogRW5zdXJlIHRoYXQgYWxsIGFjY2Vzc2VzIHRvIHRoZSBybWFwIGhhdmUgY29tcGxldGVkIGJlZm9yZSB1bmxvY2tpbmdcbiA5ODY6XHRcdCAqIHRoZSBybWFwLlxuIDk4NzpcdFx0ICpcbiA5ODg6XHRcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cbiA5ODk6XHRcdCAqL1xuIDk5MDpcdFx0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCwgdmFsKTtcbiA5OTE6XHR9XG4gOTkyOlx0XG4gOTkzOlx0c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbiA5OTQ6XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbiA5OTU6XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuIDk5NjpcdHtcbiA5OTc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiA5OTg6XHRcbiA5OTk6XHRcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgbmV3X3ZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIEtWTSBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbiBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQgbm93LCBJIHRoaW5rIEkgbmVlZCB0byB0dXJuIG15IGF0dGVudGlvbiB0byB0aGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdCBhcm91bmQgbGluZSAxNzc2LiBUaGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZ3JvayByZXNpZGVzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgcm91dGluZSBoYW5kbGVzIGFnaW5nIG9mIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKEdGTnMpIHdpdGhpbiBhIHNwZWNpZmljIHJhbmdlLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHdpdGhpbiB0aGUgS1ZNIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjU6XHRcbjE3NjY6XHRzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbjE3Njc6XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbjE3Njg6XHRcdFx0XHRcdCAgIGJvb2wgdGVzdF9vbmx5KVxuMTc2OTpcdHtcbjE3NzA6XHRcdHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQ7XG4xNzcxOlx0XHRzdHJ1Y3Qgcm1hcF9pdGVyYXRvciBpdGVyO1xuMTc3MjpcdFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcbjE3NzM6XHRcdHU2NCBvbGRfc3B0ZSwgbmV3X3NwdGU7XG4xNzc0Olx0XHRib29sIHlvdW5nID0gZmFsc2U7XG4xNzc1Olx0XHR1NjQgKnNwdGVwO1xuMTc3NjpcdFx0Z2ZuX3QgZ2ZuO1xuMTc3NzpcdFx0aW50IGxldmVsO1xuMTc3ODpcdFxuMTc3OTpcdCNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVFxuMTc4MDpcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuMTc4MTpcdCNlbmRpZlxuMTc4MjpcdFxuMTc4MzpcdFx0Zm9yIChsZXZlbCA9IFBHX0xFVkVMXzRLOyBsZXZlbCBcdTAwM2M9IEtWTV9NQVhfSFVHRVBBR0VfTEVWRUw7IGxldmVsJiM0MzsmIzQzOykge1xuMTc4NDpcdFx0XHRmb3IgKGdmbiA9IHJhbmdlLVx1MDAzZXN0YXJ0OyBnZm4gXHUwMDNjIHJhbmdlLVx1MDAzZWVuZDtcbjE3ODU6XHRcdFx0ICAgICBnZm4gJiM0Mzs9IEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKSB7XG4xNzg2Olx0XHRcdFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBsZXZlbCwgcmFuZ2UtXHUwMDNlc2xvdCk7XG4xNzg3Olx0XHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcbjE3ODg6XHRcbjE3ODk6XHRcdFx0XHRmb3JfZWFjaF9ybWFwX3NwdGVfbG9ja2xlc3Mocm1hcF92YWwsIFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xuMTc5MDpcdFx0XHRcdFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcbjE3OTE6XHRcdFx0XHRcdFx0Y29udGludWU7XG4xNzkyOlx0XG4xNzkzOlx0XHRcdFx0XHRpZiAodGVzdF9vbmx5KSB7XG4xNzk0Olx0XHRcdFx0XHRcdGt2bV9ybWFwX3VubG9ja19yZWFkb25seShybWFwX2hlYWQsIHJtYXBfdmFsKTtcbjE3OTU6XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4xNzk2Olx0XHRcdFx0XHR9XG4xNzk3Olx0XG4xNzk4Olx0XHRcdFx0XHRpZiAoc3B0ZV9hZF9lbmFibGVkKG9sZF9zcHRlKSlcbjE3OTk6XHRcdFx0XHRcdFx0bmV3X3NwdGUgPSBvbGRfc3B0ZSBcdTAwMjYgfnNoYWRvd19hY2Nlc3NlZF9tYXNrO1xuMTgwMDpcdFx0XHRcdFx0ZWxzZVxuMTgwMTpcdFx0XHRcdFx0XHRuZXdfc3B0ZSA9IG1hcmtfc3B0ZV9mb3JfYWNjZXNzX3RyYWNrKG9sZF9zcHRlKTtcbjE4MDI6XHRcbjE4MDM6XHRcdFx0XHRcdC8qXG4xODA0Olx0XHRcdFx0XHQgKiBEb24mIzM5O3QgYm90aGVyIHJldHJ5aW5nIGlmIHRoZSBDTVBYQ0hHIGZhaWxzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYC4gUmlnaHQsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIEtWTSBNTVUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNhbGx5IGZvciB4ODYvYW1kNjQuIFRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IENhbiBJIGFjdHVhbGx5IGdldCB0byB0aGlzIHRoaW5nIHdpdGggZnV6emluZz8gQW5kIG9mIGNvdXJzZSwgS1ZNIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHZpYSBgL2Rldi9rdm1gLiBTeXprYWxsZXIgaGl0cyB0aGF0IGhhcmQsIHNvIHRoZSBhbnN3ZXIgaXMgYSBzb2xpZCAmIzM0O1llcywgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSYjMzQ7LgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6ICpob3cqIGRvIEkgcmVhY2ggaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIHNpdGVzLiBUaW1lIHRvIHVzZSBgZ3JlcHBlcmAuIEkmIzM5O2xsIHJ1biB0aGUgc2VhcmNoIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29udGV4dCBJIG5lZWQgdG8gY3JhZnQgZWZmZWN0aXZlIGZ1enppbmcgaW5wdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE3NTg9c3RhdGljIHZvaWQgcm1hcF9hZGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc2NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc2NjpzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc2Ny1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE4MjQ9Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MzEtXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTgzMjpcdFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MzMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xODM3PWJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4NDctXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTg0ODpcdFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCB0cnVlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTg0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gTU1VIE5vdGlmaWVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgY2FsbGJhY2tzLiBUaGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBLVk0gTU1VIG5vdGlmaWVyIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBrdm1fbW11X25vdGlmaWVyX29wc2Agc3RydWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLCBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LgoKTGV0JiMzOTtzIHNlZeKApiB0aGVzZSBhcmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIE1NVSBub3RpZmllciBob29rcy4gSSYjMzk7bSB0aGlua2luZywgYHRlc3RfeW91bmdgIGFuZCBgY2xlYXJfeW91bmdgIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMsIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWdpbmcsIG9yIHBlcmhhcHMgZHVyaW5nIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgY2FsbHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgbWFkdmlzZSBhbmQgcmVjbGFpbS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcm1hcCBsb2NraW5nIHdvcmtzIGluIHJlbGF0aW9uIHRvIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAsIGFuZCBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCBhcmUgdXNlZCB0aHJvdWdob3V0IGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgaXMgcHJvdGVjdGVkIGR1cmluZyB0aGVzZSBNTVUgbm90aWZpZXIgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3JtYXBfKGxvY2t8dW5sb2NrKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz04NzQ9c3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90X2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05MTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjkxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2t2bV9ybWFwX2xvY2soc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTE4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk1NC1cdCAqIGZyb20gYmVpbmcgcmVvcmRlcmVkIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gY3JlYXRlZCBieVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5NTU6XHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU2LVx0ICpcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTU3Olx0ICogUGFpcnMgd2l0aCB0aGUgYXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoKSBpbiBrdm1fcm1hcF91bmxvY2soKS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU4LVx0ICpcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3MS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTcyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzMtXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5Nzc6XHRyZXR1cm4gX19rdm1fcm1hcF9sb2NrKHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3OC19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTgwOnN0YXRpYyB2b2lkIF9fa3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4MS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4Ny1cdCAqXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk4ODpcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTg5LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk5MzpzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTQtXHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk5OTpcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgbmV3X3ZhbCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMDAtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTEtICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMTI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTMtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxNy1cdHByZWVtcHRfZGlzYWJsZSgpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDE4Olx0cm1hcF92YWwgPSBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxOS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMjUtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMjY6c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMjctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMzMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMzQ6XHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDM1LVx0cHJlZW1wdF9lbmFibGUoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwMzg9c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDQxLX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA0MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0My1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDQ4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDQ5OnN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNTAtXHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDU1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDU2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDU3LVx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNjM6c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjQtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDcwPXN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzc6XHRvbGRfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzgtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTA4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTA5Olx0a3ZtX3JtYXBfdW5sb2NrKGt2bSwgcm1hcF9oZWFkLCBuZXdfdmFsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTExMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExNTA9c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE1Ni1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE1NzpcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNTgtXHRpZiAoS1ZNX0JVR19PTl9EQVRBX0NPUlJVUFRJT04oIXJtYXBfdmFsLCBrdm0pKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4Mi1vdXQ6XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExODM6XHRrdm1fcm1hcF91bmxvY2soa3ZtLCBybWFwX2hlYWQsIHJtYXBfdmFsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4NC19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTk0PXN0YXRpYyBib29sIGt2bV96YXBfYWxsX3JtYXBfc3B0ZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTIwMTpcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEyMDItXHRpZiAoIXJtYXBfdmFsKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIxOS1cdC8qIHJtYXBfaGVhZCBpcyBtZWFuaW5nbGVzcyBub3csIHJlbWVtYmVyIHRvIHJlc2V0IGl0ICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEyMjA6XHRrdm1fcm1hcF91bmxvY2soa3ZtLCBybWFwX2hlYWQsIDApO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjIxLVx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzY2PXN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ni1cdFx0XHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cdTAwM2VzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc4NzpcdFx0XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoa3ZtLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg4LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5My1cdFx0XHRcdGlmICh0ZXN0X29ubHkpIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc5NDpcdFx0XHRcdFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzk1LVx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4MTM6XHRcdFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xODE0LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogS1ZNIHg4NiBNTVUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBLVk0mIzM5O3MgeDg2IE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJdCYjMzk7cyBhZGRpbmcgUFJFRU1QVF9SVCBzdXBwb3J0IGZvciBybWFwIGxvY2tpbmcsIHNvIHRoaXMgaXMgYWJvdXQgbW9yZSByb2J1c3QgbG9ja2luZyBmb3IgUlQga2VybmVscy4gSXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBpdHMgY2FsbGVycywgYW5kLCBjcml0aWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZGAgYW5kIGBsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlYCB1bmRlciBgQ09ORklHX1BSRUVNUFRfUlRgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdD8KCkZvbGxvd2luZyB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIHNlZSBpZiBpdCB0b3VjaGVzICpyZWFjaGFibGUqIGNvZGUuIFRoZSBndWlkZWxpbmVzIHNheSB0aGluZ3MgbGlrZSBNTSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcsIGFuZCBjb3JlIHZpcnR1YWxpemF0aW9uIHN1YnN5c3RlbXMgYXJlIHdvcnRoIGZ1enppbmcuIE9rYXksIEtWTSBNTVUgaXMgZGVmaW5pdGVseSBhIGNvcmUgdmlydHVhbGl6YXRpb24gc3Vic3lzdGVtIGluIHRoZSB4ODYgTGludXgga2VybmVsLiBTbywgY2hlY2suIFRoYXQgaXMgb24gdGhlIGxpc3QuCgpOb3cgZm9yIHRoZSBjb25maWd1cmF0aW9ucy4gV2hhdCBkb2VzIHRoaXMgZGVwZW5kIG9uPyBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgS1ZNYCwgd2hpY2ggbWVhbnMgYENPTkZJR19LVk1gIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX0tWTV9JTlRFTGAgb3IgYENPTkZJR19LVk1fQU1EYC4gQnV0IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgKmRvZXMgdGhpcyBjb2RlIGV4ZWN1dGUgdW5kZXIgYm90aCByZWd1bGFyIGtlcm5lbCBhbmQgcHJlZW1wdC1ydCo/IFllcyEgQW5kLCB0aGUgY29kZSBwYXRoIGlzIGRpZmZlcmVudCBmb3IgcmVndWxhciBhbmQgcmVhbC10aW1lLiBGb3IgYCFDT05GSUdfUFJFRU1QVF9SVGAsIHRoZXJlIGlzIGEgbmV3IHBhcmFtZXRlciAoYHN0cnVjdCBrdm0gKmt2bWApIGFkZGVkIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCwgY2FsbGVkIGZyb20gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAuIEZvciBgQ09ORklHX1BSRUVNUFRfUlRgLCB0aGVyZSYjMzk7cyBhIGRpZmZlcmVudCBsb2NraW5nIG1lY2hhbmlzbSB3aXRoIGByZWFkX2xvY2tgIGFuZCB0aGUgbmV3IGFzc2VydGlvbnMgbGlrZSBgbG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkYC4gU28gdGhpcyBpcyAqY29uZGl0aW9uYWxseSogcmVhY2hhYmxlIQoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgdGhlIGV4YWN0IEtWTSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHRob3JvdWdoLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqaXMqIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgcmVhY2hhYmxlIHVuZGVyIGBDT05GSUdfUFJFRU1QVF9SVGAsIGFuZCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBsb2NraW5nIGNoYW5nZXMgd2l0aCBuZXcgYXNzZXJ0aW9ucywgd2hpY2ggYXJlIGFsd2F5cyBnb29kIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBLVk0gTU1VIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBtbXUub2Agb2JqZWN0IGZpbGUgd2l0aGluIEtWTSBmb3IgeDg2IGlzIGJ1aWx0LiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBpbnRlcm5hbHMgYW5kIGJ1aWxkIHN5c3RlbXMsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGhhcHBlbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcyB0aGF0IGdvdmVybiB0aGUgY3JlYXRpb24gb2YgYG1tdS5vYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGF0ZWQgdG8gZmVhdHVyZXMsIHN1Y2ggYXMgRVBUIG9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgYmVjYXVzZSB0aG9zZSB3b3VsZCBjZXJ0YWlubHkgaW5mbHVlbmNlIGhvdyB0aGUgTU1VIGNvZGUgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkLCBlYXN5IHRvIGZvbGxvdywgYW5kIGxldmVyYWdlcyB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIGJ1aWxkIHN5c3RlbSBlZmZlY3RpdmVseS4gSWRlYWxseSwgSSYjMzk7bGwgc2VlIHNvbWUgc3RhbmRhcmQgcGF0dGVybiBydWxlcyBhbmQgdmFyaWFibGUgZGVmaW5pdGlvbnMgdGhhdCBhbGlnbiB3aXRoIGJlc3QgcHJhY3RpY2VzLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBNTVUgY29kZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cyBkdXJpbmcgdGhlIGJ1aWxkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y2NmbGFncy15ICYjNDM7PSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxuICAgNDpcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgJiM0Mzs9IC1XZXJyb3JcbiAgIDU6XHRcbiAgIDY6XHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG4gICA3Olx0XG4gICA4Olx0a3ZtLXlcdFx0XHQmIzQzOz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXG4gICA5Olx0XHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG4gIDEwOlx0XG4gIDExOlx0a3ZtLSQoQ09ORklHX1g4Nl82NCkgJiM0Mzs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cbiAgMTI6XHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgJiM0Mzs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xuICAxMzpcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSAmIzQzOz0gaHlwZXJ2Lm9cbiAgMTQ6XHRrdm0tJChDT05GSUdfS1ZNX1hFTilcdCYjNDM7PSB4ZW4ub1xuICAxNTpcdGt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG4gIDE2Olx0XG4gIDE3Olx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcbiAgMTg6XHRcdFx0XHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xuICAxOTpcdFxuICAyMDpcdGt2bS1pbnRlbC0kKENPTkZJR19YODZfU0dYX0tWTSlcdCYjNDM7PSB2bXgvc2d4Lm9cbiAgMjE6XHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG4gIDIyOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXHQmIzQzOz0gdm14L3RkeC5vXG4gIDIzOlx0XG4gIDI0Olx0a3ZtLWFtZC15XHRcdCYjNDM7PSBzdm0vc3ZtLm8gc3ZtL3ZtZW50ZXIubyBzdm0vcG11Lm8gc3ZtL25lc3RlZC5vIHN2bS9hdmljLm9cbiAgMjU6XHRcbiAgMjY6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVx0JiM0Mzs9IHN2bS9zZXYub1xuICAyNzpcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSBzdm0vaHlwZXJ2Lm9cbiAgMjg6XHRcbiAgMjk6XHRpZmRlZiBDT05GSUdfSFlQRVJWXG4gIDMwOlx0a3ZtLXlcdFx0XHQmIzQzOz0ga3ZtX29uaHlwZXJ2Lm9cbiAgMzE6XHRrdm0taW50ZWwteVx0XHQmIzQzOz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAzMjpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bV9vbmh5cGVydi5vXG4gIDMzOlx0ZW5kaWZcbiAgMzQ6XHRcbiAgMzU6XHRvYmotJChDT05GSUdfS1ZNX1g4NilcdCYjNDM7PSBrdm0ub1xuICAzNjpcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXHQmIzQzOz0ga3ZtLWludGVsLm9cbiAgMzc6XHRvYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbiAgMzg6XHRcbiAgMzk6XHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxuICA0MDpcdCQob2JqKS9zdm0vdm1lbnRlci5vOiAkKG9iaikva3ZtLWFzbS1vZmZzZXRzLmhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gTU1VIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtWTSBNTVUgcGF0Y2guIEZpcnN0LCBJIHNlZSB0aGUgbW9kdWxlIGJ1aWxkIGRpcmVjdGl2ZXM6IGBrdm0teSAmIzQzOz0gLi4uIG1tdS9tbXUub2AgYW5kIGBvYmotJChDT05GSUdfS1ZNX1g4NikgJiM0Mzs9IGt2bS5vYC4gUmlnaHQsIGFuZCBgS1ZNX1g4NmAgZGVwZW5kcyBvbiBgS1ZNYCwgd2hpY2ggaW4gdHVybiwgaXMgZGVwZW5kZW50IG9uIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgbm90IGJlaW5nIHNldCB0byAmIzM5O24mIzM5Oy4gU28sIEtWTSBpdHNlbGYgKGFuZCBlaXRoZXIgSU5URUwgb3IgQU1EKSBhcmUgcHJlcmVxdWlzaXRlcy4gQW5kIG9mIGNvdXJzZSwgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGFsc28gdHJpZ2dlcnMgdGhlIFJUIHBhdGguIEdvdCBpdC4gU3RhbmRhcmQgYnVpbGQgc3lzdGVtIHN0dWZmLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIHRvdWNoZWQgd2l0aGluIHRoaXMgcGF0Y2g6CgoxLiAgYGt2bV9ybWFwX2xvY2tgIChzdGF0aWMgaW4gbW11LmMpCjIuICBga3ZtX3JtYXBfdW5sb2NrYCAoc3RhdGljIGluIG1tdS5jKQozLiAgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgIChzdGF0aWMgaW4gbW11LmMpCjQuICBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCAoc3RhdGljIGluIG1tdS5jKQo1LiAgYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2VgIChzdGF0aWMgaW4gbW11LmMsIGNhbGxlZCBieSBga3ZtX2FnZV9nZm5gLCBga3ZtX3Rlc3RfYWdlX2dmbmApCjYuICBgcHRlX2xpc3RfYWRkYCAoc3RhdGljIGluIG1tdS5jKQo3LiAgYHB0ZV9saXN0X3JlbW92ZWAgKHN0YXRpYyBpbiBtbXUuYykKOC4gIGBrdm1femFwX2FsbF9ybWFwX3NwdGVzYCAoc3RhdGljIGluIG1tdS5jKQo5LiAgYGt2bV9hZ2VfZ2ZuYCAvIGBrdm1fdGVzdF9hZ2VfZ2ZuYCAobm9uLXN0YXRpYyBlbnRyeXBvaW50cyBpbiBtbXUuYykKCkFoYSEgYGt2bV9hZ2VfZ2ZuYCBhbmQgYGt2bV90ZXN0X2FnZV9nZm5gIGFyZSBlbnRyeXBvaW50cywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYWN0dWFsIGNoYW5nZXMgYXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIE1NVSBpbXBsZW1lbnRhdGlvbiBhbmQgbWVtb3J5IGFnaW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgyMDpcdHtcbjE4MjE6XHRcdHJldHVybiAhdGRwX21tdV9lbmFibGVkIHx8IFJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5pbmRpcmVjdF9zaGFkb3dfcGFnZXMpO1xuMTgyMjpcdH1cbjE4MjM6XHRcbjE4MjQ6XHRib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuMTgyNTpcdHtcbjE4MjY6XHRcdGJvb2wgeW91bmcgPSBmYWxzZTtcbjE4Mjc6XHRcbjE4Mjg6XHRcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG4xODI5Olx0XHRcdHlvdW5nID0ga3ZtX3RkcF9tbXVfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlKTtcbjE4MzA6XHRcbjE4MzE6XHRcdGlmIChrdm1fbWF5X2hhdmVfc2hhZG93X21tdV9zcHRlcyhrdm0pKVxuMTgzMjpcdFx0XHR5b3VuZyB8PSBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UsIGZhbHNlKTtcbjE4MzM6XHRcbjE4MzQ6XHRcdHJldHVybiB5b3VuZztcbjE4MzU6XHR9XG4xODM2Olx0XG4xODM3Olx0Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuMTgzODpcdHtcbjE4Mzk6XHRcdGJvb2wgeW91bmcgPSBmYWxzZTtcbjE4NDA6XHRcbjE4NDE6XHRcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG4xODQyOlx0XHRcdHlvdW5nID0ga3ZtX3RkcF9tbXVfdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xuMTg0MzpcdFxuMTg0NDpcdFx0aWYgKHlvdW5nKVxuMTg0NTpcdFx0XHRyZXR1cm4geW91bmc7XG4xODQ2Olx0XG4xODQ3Olx0XHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcbjE4NDg6XHRcdFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCB0cnVlKTtcbjE4NDk6XHRcbjE4NTA6XHRcdHJldHVybiB5b3VuZztcbjE4NTE6XHR9XG4xODUyOlx0XG4xODUzOlx0c3RhdGljIHZvaWQga3ZtX21tdV9jaGVja19zcHRlc19hdF9mcmVlKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuMTg1NDpcdHtcbjE4NTU6XHQjaWZkZWYgQ09ORklHX0tWTV9QUk9WRV9NTVVcbjE4NTY6XHRcdGludCBpO1xuMTg1NzpcdFxuMTg1ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgU1BURV9FTlRfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG4xODU5Olx0XHRcdGlmIChLVk1fTU1VX1dBUk5fT04oaXNfc2hhZG93X3ByZXNlbnRfcHRlKHNwLVx1MDAzZXNwdFtpXSkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcxMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNJiMzOTtzIFJtYXAgQWdpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEtWTSYjMzk7cyBSZXZlcnNlIE1hcCAocm1hcCkgYWdpbmcgbWVjaGFuaXNtLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCwgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgLCBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCwgYGt2bV9ybWFwX2xvY2tgLCBga3ZtX3JtYXBfdW5sb2NrYCwgYGt2bV9hZ2VfZ2ZuYCwgYGt2bV90ZXN0X2FnZV9nZm5gLCBgcHRlX2xpc3RfYWRkYCwgYHB0ZV9saXN0X3JlbW92ZWAsIGFuZCBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2AuIE5vdywgdGhlIGtleSBpcyB0byBwaW5wb2ludCB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIGZvciBLQ09WIGNvdmVyYWdlIGFuZCBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuCgpHaXZlbiBteSBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgJiMzNDtGb2N1c1N5bWJvbHMuJiMzNDsgIEkmIzM5O2xsIG5lZWQgdG8gYXZvaWQgZ2V0dGluZyBib2dnZWQgZG93biBpbiB1YmlxdWl0b3VzIGxpZmVjeWNsZSBwYXRocywgc28gSSBuZWVkIHRvIGF2b2lkIHZlcnkgZ2VuZXJpYyBmdW5jdGlvbnMsIGFuZCBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBmdW5jdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gdGhlIGNvcmUgbG9naWMsIG9yIGFyZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucy4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gYG1tdS5jYC4gIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbmFycm93IGRvd24gdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLgoKRmluYWxseSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcm1hcCYjMzk7cyBiZWhhdmlvciwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZvciBmdW5jdGlvbnMgbGlrZSBgcHRlX2xpc3RfYWRkYCBhbmQgYHB0ZV9saXN0X3JlbW92ZWAuICBVbmRlcnN0YW5kaW5nIHRoZWlyIGNhbGxlcnMgaXMgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBob3cgdGhlIHJtYXAgaXMgbWFuaXB1bGF0ZWQgYW5kIGhvdyBhZ2luZyBpbnRlcmFjdHMgd2l0aCB0aGUgUFRFIGxpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGVfbGlzdF8oYWRkfHJlbW92ZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA2Mz1zdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjktICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzA6c3RhdGljIGludCBwdGVfbGlzdF9hZGQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDcxLVx0XHRcdHU2NCAqc3B0ZSwgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExMTQ9c3RhdGljIHZvaWQgcHRlX2xpc3RfZGVzY19yZW1vdmVfZW50cnkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwX3ZhbCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNDktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTA6c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTUxLVx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTE4Nj1zdGF0aWMgdm9pZCBrdm1femFwX29uZV9ybWFwX3NwdGUoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4OS1cdG1tdV9zcHRlX2NsZWFyX3RyYWNrX2JpdHMoa3ZtLCBzcHRlcCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExOTA6XHRwdGVfbGlzdF9yZW1vdmUoa3ZtLCBzcHRlcCwgcm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE5MS19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMjQ3PXN0YXRpYyB2b2lkIHJtYXBfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTI2Ny1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTI2ODpcdHB0ZV9saXN0X3JlbW92ZShrdm0sIHNwdGUsIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEyNjktfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTczND1zdGF0aWMgdm9pZCBfX3JtYXBfYWRkKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NDctXHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIHNwLVx1MDAzZXJvbGUubGV2ZWwsIHNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzQ4Olx0cm1hcF9jb3VudCA9IHB0ZV9saXN0X2FkZChrdm0sIGNhY2hlLCBzcHRlLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzQ5LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTg5NT1zdGF0aWMgdm9pZCBtbXVfcGFnZV9hZGRfcGFyZW50X3B0ZShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTAxLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxOTAyOlx0cHRlX2xpc3RfYWRkKGt2bSwgY2FjaGUsIHBhcmVudF9wdGUsIFx1MDAyNnNwLVx1MDAzZXBhcmVudF9wdGVzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTkwMy19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xOTA1PXN0YXRpYyB2b2lkIG1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTA3LXtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTkwODpcdHB0ZV9saXN0X3JlbW92ZShrdm0sIHBhcmVudF9wdGUsIFx1MDAyNnNwLVx1MDAzZXBhcmVudF9wdGVzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTkwOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFnaW5nIGluIEtWTSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBtZW1vcnkgYWdpbmcgaXNzdWUgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb25zIGBrdm1fbW11X25vdGlmaWVyX29wc2AgaXMgYSBwcmltYXJ5IHN1c3BlY3QuIEl0JiMzOTtzIG9mdGVuIGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMsIHNvIHRoYXQmIzM5O3MgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhZ2luZyBpcyB0cmFja2VkIG9yIHRyaWdnZXJlZC4KCkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBMZXQmIzM5O3Mgc2VlIGhvdyBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgYXJlIGJlaW5nIHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbmFtZWQgaW4gdGhlIHByb21wdCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHQgaXMgY2FsbGluZyB0aGVzZSBhbmQgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZyB3aXRoIHRoZSBhZ2luZyBpbmZvcm1hdGlvbi4gQXJlIHRoZXkgdXNlZCBmb3IgVExCIGludmFsaWRhdGlvbj8gTW9uaXRvcmluZyBhY3Rpdml0eT8gT3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aGljaCBwYWdlcyBhcmUgY2FuZGlkYXRlcyBmb3IgcmVjbGFpbWluZz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBzaW1pbGFyIHNlYXJjaCB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlbiBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBHZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgYmUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fKGFnZXx0ZXN0X2FnZSlfZ2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9ODI5PXN0YXRpYyBib29sIGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy04MzMtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjgzNDpcdHJldHVybiBrdm1fYWdlX2h2YV9yYW5nZShtbiwgc3RhcnQsIGVuZCwga3ZtX2FnZV9nZm4sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTgzNS1cdFx0XHRcdCAhSVNfRU5BQkxFRChDT05GSUdfS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VORykpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9ODM4PXN0YXRpYyBib29sIGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfeW91bmcoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy04NTUtXHQgKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6ODU2Olx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBzdGFydCwgZW5kLCBrdm1fYWdlX2dmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg1Ny19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz04NTk9c3RhdGljIGJvb2wga3ZtX21tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtODY0LVx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IDEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg2NTpcdFx0XHRcdFx0ICBrdm1fdGVzdF9hZ2VfZ2ZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtODY2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNzYKCQkJCQkJCW91dHB1dDogMjUwCgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIGZvciBGdXp6aW5nIEtWTSBSZWFsLVRpbWUgTG9ja2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucyBuZWNlc3NhcnkgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQuIEkmIzM5O2xsIG5lZWQgYEtWTWAgZW5hYmxlZCwgbmF0dXJhbGx5LCBmb3IgS1ZNIHZpcnR1YWxpemF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGZvciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB4ODYgS1ZNIG1vZHVsZXMuIEZpbmFsbHksIGdpdmVuIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVhbC10aW1lIGxvY2tpbmcgdmFyaWFudCwgSeKAmWxsIG5lZWQgYFBSRUVNUFRfUlRgLiBJIHdhbnQgdG8gc3RyZXNzIHRlc3QgdGhlIFJUIGxvY2tpbmcgcGF0aHMgc28gaXQgc2hvdWxkIGJlIGVuYWJsZWQ7IGhvd2V2ZXIsIGJvdGggdGhlIG5vbi1SVCBhbmQgUlQgcGF0aHMgYXJlIGFmZmVjdGVkLiBTbywgdGhvc2UgZm91ciBjb25maWd1cmF0aW9ucyBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50OiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBQUkVFTVBUX1JUYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlICpmdXp6YWJsZSo/IElzIGl0IHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBrZXJuZWwgY29kZT8gQWJzb2x1dGVseS4gS1ZNIGlzIGFjY2Vzc2libGUgdmlhIGAvZGV2L2t2bWAgaW9jdGxzIGFuZCBtbXVfbm90aWZpZXJzLiBUaGlzIHBhdGNoIGFkZHMgbG9ja2luZyBhc3NlcnRpb25zIChgbG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkYCwgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGVgKSwgUlQgcGF0aHMgZm9yIHJtYXAgbG9ja2luZywgYW5kIHJlZmFjdG9yZWQgZnVuY3Rpb24gc2lnbmF0dXJlcywgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCBoYXMgdGhlIHJpZ2h0IGZlYXR1cmVzIHRvIGJlIHdvcnRoIGZ1enppbmcuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcm1hcCBtYW5hZ2VtZW50LCBNTVUgcGFnZSB0cmFja2luZywgYW5kIGFnaW5nIGZ1bmN0aW9ucy4gU28sIEkgbmVlZCB0byBzZWxlY3QgZnVuY3Rpb25zIHJlbGF0aW5nIHRvIHJtYXAgYWdlL2xvY2tpbmc6CiogICBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWAKKiAgIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YAoqICAgYGt2bV9ybWFwX3VubG9ja19yZWFkb25seWAKKiAgIGBrdm1fcm1hcF9sb2NrYAoqICAgYGt2bV9ybWFwX3VubG9ja2AKKiAgIGBrdm1fYWdlX2dmbmAKKiAgIGBrdm1fdGVzdF9hZ2VfZ2ZuYAoqICAgYHB0ZV9saXN0X2FkZGAKKiAgIGBwdGVfbGlzdF9yZW1vdmVgCiogICBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2AKClRoZXNlIHNob3VsZCBiZSBhbGwgb2YgdGhlIHJlbGV2YW50IEtWTSBybWFwIG1hbmFnZW1lbnQgLyBNTVUgcGFnZSB0cmFja2luZyAvIGFnaW5nIGZ1bmN0aW9ucy4KCkZpbmFsbHksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFBSRUVNUFRfUlRgLgoKV2l0aCBhbGwgb2YgdGhpcyBjaGVja2VkIGFuZCBkb3VibGUtY2hlY2tlZCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9ybWFwX2FnZV9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkmIzM0OywKICAgICYjMzQ7a3ZtX3JtYXBfbG9jayYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF91bmxvY2smIzM0OywKICAgICYjMzQ7a3ZtX2FnZV9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3Rlc3RfYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cHRlX2xpc3RfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2t2bV96YXBfYWxsX3JtYXBfc3B0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcmV2ZXJzZS1tYXBwaW5nIChybWFwKSBsb2NraW5nIGxvZ2ljLCBhZGRpbmcgQ09ORklHX1BSRUVNUFRfUlQgc3VwcG9ydCB3aXRoIGxvY2tkZXAgYXNzZXJ0aW9ucyAobG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkL2xvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUpIGFuZCBtb2RpZnlpbmcgdGhlIHJtYXAgYWdpbmcgYW5kIGxvY2tpbmcgcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTVUgbm90aWZpZXJzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIHZlcmlmeSBpbnZhcmlhbnQgY2hlY2tzIGFuZCBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrX3JlYWRvbmx5JiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9ja19yZWFkb25seSYjMzQ7LAogICAgJiMzNDtrdm1fcm1hcF9sb2NrJiMzNDssCiAgICAmIzM0O2t2bV9ybWFwX3VubG9jayYjMzQ7LAogICAgJiMzNDtrdm1fYWdlX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fdGVzdF9hZ2VfZ2ZuJiMzNDssCiAgICAmIzM0O3B0ZV9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtwdGVfbGlzdF9yZW1vdmUmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9hbGxfcm1hcF9zcHRlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByZXZlcnNlLW1hcHBpbmcgKHJtYXApIGxvY2tpbmcgbG9naWMsIGFkZGluZyBDT05GSUdfUFJFRU1QVF9SVCBzdXBwb3J0IHdpdGggbG9ja2RlcCBhc3NlcnRpb25zIChsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQvbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSkgYW5kIG1vZGlmeWluZyB0aGUgcm1hcCBhZ2luZyBhbmQgbG9ja2luZyBwYXRocy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NVSBub3RpZmllcnMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IGludmFyaWFudCBjaGVja3MgYW5kIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyN2Y0ZDY1NGQ2ZGM5NTdmODZjMTk3MWFiNTVkZTlmODYyYTNkZDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMDoyNjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdQogICovCiAjZGVmaW5lIEtWTV9STUFQX01BTlkJQklUKDApCiAKJiM0MzsjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUCiAvKgogICogcm1hcHMgYW5kIFBURSBsaXN0cyBhcmUgbW9zdGx5IHByb3RlY3RlZCBieSBtbXVfbG9jayAodGhlIHNoYWRvdyBNTVUgYWx3YXlzCiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dApAQCAtMTAwOCw3ICYjNDM7MTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQogICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlCiAgKiBybWFwLCBhbmQgc28gdGhlIHVubG9jayBmbG93IGlzIGEgbm9wIGlmIHRoZSBybWFwIGlzL3dhcyBlbXB0eS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpCiB7CiAJdW5zaWduZWQgbG9uZyBybWFwX3ZhbDsKIApAQCAtMTAzMiw2ICYjNDM7MTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCwKIAlfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7cm1hcF9oZWFkLSZndDt2YWwpOwomIzQzO30KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJcmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCSAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCSAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgmYW1wO3JtYXBfaGVhZC0mZ3Q7dmFsLCBuZXdfdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZCgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS4KQEAgLTE3NDUsMTEgJiM0MzsxNzc2LDE1IEBAIHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAogCWdmbl90IGdmbjsKIAlpbnQgbGV2ZWw7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlQKJiM0MzsJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOyNlbmRpZgomIzQzOwogCWZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgJmx0Oz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwmIzQzOyYjNDM7KSB7CiAJCWZvciAoZ2ZuID0gcmFuZ2UtJmd0O3N0YXJ0OyBnZm4gJmx0OyByYW5nZS0mZ3Q7ZW5kOwogCQkgICAgIGdmbiAmIzQzOz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHsKIAkJCXJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLSZndDtzbG90KTsKLQkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShybWFwX2hlYWQpOwomIzQzOwkJCXJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7CiAKIAkJCWZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgJmFtcDtpdGVyLCBzcHRlcCwgb2xkX3NwdGUpIHsKIAkJCQlpZiAoIWlzX2FjY2Vzc2VkX3NwdGUob2xkX3NwdGUpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gTU1VIExvY2tpbmcgTG9naWMgZm9yIENPTkZJR19QUkVFTVBUX1JUKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0d2Vha2luZyB0aGUgS1ZNIE1NVSBsb2NraW5nIGZvciBgQ09ORklHX1BSRUVNUFRfUlRgLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhlIGNvZGUgaXMgY2xlYXJseSBjaGFuZ2luZyBkZXBlbmRpbmcgb24gd2hldGhlciBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHN0YW5kYXJkIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCBpcyBvbmx5IGRlZmluZWQgaWYgd2UgKmRvbiYjMzk7dCogaGF2ZSBgQ09ORklHX1BSRUVNUFRfUlRgLiBJZiBgQ09ORklHX1BSRUVNUFRfUlRgICppcyogZW5hYmxlZCwgd2UgZ2V0IGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucyBmb3IgYGt2bV9ybWFwX2dldGAsIGBrdm1fcm1hcF9sb2NrYCwgYGt2bV9ybWFwX3VubG9ja2AsIGFuZCB0aGUgcmVhZC1vbmx5IHZlcnNpb25zLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuCgpMb29raW5nIGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBJIHNlZSBhIGBndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7YCB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUYC4gVGhpcyBpbXBsaWVzIHNvbWUgUlQtc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc20gaXMgYmVpbmcgdXNlZCwgYW5kIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIE1NVSBsb2NrIGRpcmVjdGx5LiBBZGRpdGlvbmFsbHksIGl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIHVwZGF0aW5nIGEgY2FsbCB0byBga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZClgLgoKTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZSByZXN0IG9mIGBtbXUuY2AuIEkgbmVlZCB0byBzZWUgaWYgYW55IG90aGVyIGNhbGxzIHRvIHRoZXNlIHJtYXAgbG9ja2luZyBmdW5jdGlvbnMsIHJlYWQtb25seSBvciBvdGhlcndpc2UsIGhhdmUgYmVlbiBtb2RpZmllZCwgcmVtb3ZlZCwgb3IgYWRkZWQuIFdlIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGNoYW5nZXMgdGhlIGxvY2tpbmcgc2VtYW50aWNzIHRocm91Z2hvdXQgdGhlIE1NVSBjb2RlLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gYW55IHN1YnRsZSBjaGFuZ2VzIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcm1hcF9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTg3ND1zdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTkxNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTE3OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05MTgte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU0LVx0ICogZnJvbSBiZWluZyByZW9yZGVyZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBjcmVhdGVkIGJ5XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk1NTpcdCAqIF9fa3ZtX3JtYXBfbG9jaygpLlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NTYtXHQgKlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTcxLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5NzI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3My1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk3NzpcdHJldHVybiBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTk4MD1zdGF0aWMgdm9pZCBfX2t2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTg3LVx0ICpcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTg4Olx0ICogUGFpcnMgd2l0aCB0aGUgYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIGluIF9fa3ZtX3JtYXBfbG9jaygpLlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05ODktXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwMDI9c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDExLSAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDEyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDEzLVx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTctXHRwcmVlbXB0X2Rpc2FibGUoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTAxODpcdHJtYXBfdmFsID0gX19rdm1fcm1hcF9sb2NrKHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTktXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDM4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0MS19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNDI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNDMtXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA1NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDcwPXN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzc6XHRvbGRfdmFsID0ga3ZtX3JtYXBfbG9jayhrdm0sIHJtYXBfaGVhZCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzgtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTUwPXN0YXRpYyB2b2lkIHB0ZV9saXN0X3JlbW92ZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqc3B0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTc6XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTU4LVx0aWYgKEtWTV9CVUdfT05fREFUQV9DT1JSVVBUSU9OKCFybWFwX3ZhbCwga3ZtKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExOTQ9c3RhdGljIGJvb2wga3ZtX3phcF9hbGxfcm1hcF9zcHRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjAwLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMjAxOlx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrKGt2bSwgcm1hcF9oZWFkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMi1cdGlmICghcm1hcF92YWwpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzY2PXN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ni1cdFx0XHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cdTAwM2VzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc4NzpcdFx0XHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoa3ZtLCBybWFwX2hlYWQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzcyCgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSB4ODYgTU1VIFBhdGNoIGZvciBSVCBLZXJuZWxzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIHJtYXAgbG9ja2luZyBtZWNoYW5pc20gc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBNTVUgZm9yIFJUIGtlcm5lbHMsIHdoaWNoIGlzIGltcG9ydGFudC4gV2l0aCBgQ09ORklHX1BSRUVNUFRfUlRgIGVuYWJsZWQsIHdlIGNhbiYjMzk7dCB1c2UgdGhlIHN0YW5kYXJkIHNwaW4td2FpdGluZyBhcHByb2FjaCB3aXRoIGRpc2FibGVkIHByZWVtcHRpb24gaW4gYF9fa3ZtX3JtYXBfbG9ja2AuIFRoYXQmIzM5O3MgYmVjYXVzZSBSVCBrZXJuZWxzIGFyZSB2ZXJ5IHN0cmljdCBhYm91dCBsb25nIHByZWVtcHRpb24gZGlzYWJsZXMgYW5kIHNwaW5uaW5nIHdoZW4gc2xlZXBpbmcgbG9ja3MgYXJlIGluIHBsYXkuIEl0IGp1c3QgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmsuCgpTbywgdGhlIHBhdGNoIGlzIHN3YXBwaW5nIG91dCB0aGF0IGJpdGxvY2sgb24gYHJtYXBfaGVhZC0mZ3Q7dmFsYCBmb3IgdGhlIGBrdm0tJmd0O21tdV9sb2NrYCByZWFkL3dyaXRlIGxvY2tpbmcgbWVjaGFuaXNtLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCBvbiBQUkVFTVBUX1JULiBOb3cgaW4gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAsIHdlIHNlZSB0aGF0IHdlIGFyZSBjYWxsaW5nIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAgdXNpbmcgYHJlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spYC4KCkFscmlnaHQsIGxldCYjMzk7cyBub3cgZXZhbHVhdGUgdGhpcyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCiogICBEb2VzIHRoaXMgbGVhZCB0byBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2U/IE5vcGUsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2VybiBoZXJlLgoqICAgSXMgdGhlcmUgYW55IGFsbG9jYXRpb24gb3IgcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBsaWtlIHRoYXQgaGFwcGVuaW5nLgoqICAgQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBwYWRkaW5nLCBvciB2YXJpYWJsZXM/IE5vLiBFdmVyeXRoaW5nIGxvb2tzIHByb3Blcmx5IGluaXRpYWxpemVkLgoqICAgV291bGQgS01TQU4gZmxhZyBhbnkgYnVncyBoZXJlPyBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBLTVNBTi1kZXRlY3RhYmxlIGJ1Z3MuIFRoZSBjb25jZXJucyBsaWtlIGxvY2tpbmcgaXNzdWVzLCBjb25jdXJyZW5jeSwgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLCBvciBsb2dpYyBlcnJvcnMgd2lsbCBiZSBkZXRlY3RlZCBieSBMT0NLREVQLCBLQVNBTiwgb3IgdGhyZWFkIHNhbml0aXplciwgbm90IEtNU0FOLgoKU28sIGdpdmVuIHRoaXMgY2FyZWZ1bCBhbmFseXNpcywgJiMzNDtOZWVkc0tNU0FOJiMzNDsgY2FuIHNhZmVseSBiZSBzZXQgdG8gJiMzNDtmYWxzZSYjMzQ7LiBUaGUgcGF0Y2ggbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBybWFwIGxvY2tpbmcgaGVscGVycyB0byBzdXBwb3J0IENPTkZJR19QUkVFTVBUX1JUIGJ5IHJlbHlpbmcgb24gcndsb2NrLWJhc2VkIG1tdV9sb2NrIGluc3RlYWQgb2YgY3VzdG9tIGJpdC1zcGlubmluZyBsb2Nrcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIHNlbWFudGljczsgdGhleSBkbyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBzaXplcyBvciBleHBvc2UgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gYXJlIGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjI2LjQ1ODA3MzE4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzU2MzI1MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBybWFwIGxvY2tpbmcgaGVscGVycyB0byBzdXBwb3J0IENPTkZJR19QUkVFTVBUX1JUIGJ5IHJlbHlpbmcgb24gcndsb2NrLWJhc2VkIG1tdV9sb2NrIGluc3RlYWQgb2YgY3VzdG9tIGJpdC1zcGlubmluZyBsb2Nrcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIHNlbWFudGljczsgdGhleSBkbyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBzaXplcyBvciBleHBvc2UgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gYXJlIGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgS0FTQU4sIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByZXZlcnNlLW1hcHBpbmcgKHJtYXApIGxvY2tpbmcgbG9naWMsIGFkZGluZyBDT05GSUdfUFJFRU1QVF9SVCBzdXBwb3J0IHdpdGggbG9ja2RlcCBhc3NlcnRpb25zIChsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQvbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSkgYW5kIG1vZGlmeWluZyB0aGUgcm1hcCBhZ2luZyBhbmQgbG9ja2luZyBwYXRocy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NVSBub3RpZmllcnMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gdmVyaWZ5IGludmFyaWFudCBjaGVja3MgYW5kIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MjYuNDU4MDgzODQxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTc2ODQwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2Y0ZDY1NGQ2ZGM5NTdmODZjMTk3MWFiNTVkZTlmODYyYTNkZDA1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjY6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCAwNjRlY2MzM2I5MjY3Li41YmY4MzM1NTBmODRkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdVxcbiAgKi9cXG4gI2RlZmluZSBLVk1fUk1BUF9NQU5ZXFx0QklUKDApXFxuIFxcbisjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuIC8qXFxuICAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xcbiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dFxcbkBAIC0xMDA4LDcgKzEwMDksOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4gICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlXFxuICAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcXG4gXFxuQEAgLTEwMzIsNiArMTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4gXFx0X19rdm1fcm1hcF91bmxvY2socm1hcF9oZWFkLCBvbGRfdmFsKTtcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4re1xcbitcXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2cm1hcF9oZWFkLVxcdTAwM2V2YWwpO1xcbit9XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxcbit7XFxuK1xcdGF0b21pY19sb25nX3NldF9yZWxlYXNlKFxcdTAwMjZybWFwX2hlYWQtXFx1MDAzZXZhbCwgbmV3X3ZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9XFxuKyNlbmRpZlxcbiBcXG4gLypcXG4gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGluIHRoZSBybWFwIGNoYWluLCBub3QgY291bnRpbmcgdGhlIG5ldyBvbmUuXFxuQEAgLTE3NDUsMTEgKzE3NzYsMTUgQEAgc3RhdGljIGJvb2wga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGdmbl90IGdmbjtcXG4gXFx0aW50IGxldmVsO1xcbiBcXG4rI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuK1xcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbisjZW5kaWZcXG4rXFxuIFxcdGZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgXFx1MDAzYz0gS1ZNX01BWF9IVUdFUEFHRV9MRVZFTDsgbGV2ZWwrKykge1xcbiBcXHRcXHRmb3IgKGdmbiA9IHJhbmdlLVxcdTAwM2VzdGFydDsgZ2ZuIFxcdTAwM2MgcmFuZ2UtXFx1MDAzZWVuZDtcXG4gXFx0XFx0ICAgICBnZm4gKz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHtcXG4gXFx0XFx0XFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBsZXZlbCwgcmFuZ2UtXFx1MDAzZXNsb3QpO1xcbi1cXHRcXHRcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkocm1hcF9oZWFkKTtcXG4rXFx0XFx0XFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcXG4gXFxuIFxcdFxcdFxcdGZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgXFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xcbiBcXHRcXHRcXHRcXHRpZiAoIWlzX2FjY2Vzc2VkX3NwdGUob2xkX3NwdGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyNy4wNzY3ODAzMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMzgxNTE4NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3ZjRkNjU0ZDZkYzk1N2Y4NmMxOTcxYWI1NWRlOWY4NjJhM2RkMDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI2OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjViZjgzMzU1MGY4NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtODk1LDYgKzg5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpnZm5fdG9fbWVtc2xvdF9kaXJ0eV9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1XG4gICovXG4gI2RlZmluZSBLVk1fUk1BUF9NQU5ZXHRCSVQoMClcbiBcbisjaWZuZGVmIENPTkZJR19QUkVFTVBUX1JUXG4gLypcbiAgKiBybWFwcyBhbmQgUFRFIGxpc3RzIGFyZSBtb3N0bHkgcHJvdGVjdGVkIGJ5IG1tdV9sb2NrICh0aGUgc2hhZG93IE1NVSBhbHdheXNcbiAgKiBvcGVyYXRlcyB3aXRoIG1tdV9sb2NrIGhlbGQgZm9yIHdyaXRlKSwgYnV0IHJtYXBzIGNhbiBiZSB3YWxrZWQgd2l0aG91dFxuQEAgLTEwMDgsNyArMTAwOSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuICAqIGFjdHVhbCBsb2NraW5nIGlzIHRoZSBzYW1lLCBidXQgdGhlIGNhbGxlciBpcyBkaXNhbGxvd2VkIGZyb20gbW9kaWZ5aW5nIHRoZVxuICAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcbiBcbkBAIC0xMDMyLDYgKzEwMzQsMzUgQEAgc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4gXHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG9sZF92YWwpO1xuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiB9XG4rI2Vsc2VcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbit7XG4rXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZybWFwX2hlYWQtXHUwMDNldmFsKTtcbit9XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdHJldHVybiBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxuK3tcbitcdGF0b21pY19sb25nX3NldF9yZWxlYXNlKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwsIG5ld192YWwpO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxuKyNlbmRpZlxuIFxuIC8qXG4gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGluIHRoZSBybWFwIGNoYWluLCBub3QgY291bnRpbmcgdGhlIG5ldyBvbmUuXG5AQCAtMTc0NSwxMSArMTc3NiwxNSBAQCBzdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGdmbl90IGdmbjtcbiBcdGludCBsZXZlbDtcbiBcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbitcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbisjZW5kaWZcbitcbiBcdGZvciAobGV2ZWwgPSBQR19MRVZFTF80SzsgbGV2ZWwgXHUwMDNjPSBLVk1fTUFYX0hVR0VQQUdFX0xFVkVMOyBsZXZlbCsrKSB7XG4gXHRcdGZvciAoZ2ZuID0gcmFuZ2UtXHUwMDNlc3RhcnQ7IGdmbiBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kO1xuIFx0XHQgICAgIGdmbiArPSBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSkge1xuIFx0XHRcdHJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLVx1MDAzZXNsb3QpO1xuLVx0XHRcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShybWFwX2hlYWQpO1xuK1x0XHRcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcm1hcF9zcHRlX2xvY2tsZXNzKHJtYXBfdmFsLCBcdTAwMjZpdGVyLCBzcHRlcCwgb2xkX3NwdGUpIHtcbiBcdFx0XHRcdGlmICghaXNfYWNjZXNzZWRfc3B0ZShvbGRfc3B0ZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoyNy4wNzY3ODI5OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjgxNzA0ODczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgUHJlZW1wdF9SVCBDb21wYXRpYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSByZWxldmFudCB0b29scy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBpbnRlcmVzdCDigJMgYW55dGhpbmcgdG91Y2hpbmcgdGhlIE1NVSBpbiBLVk0gaXMgdXN1YWxseSB3b3J0aCBhIGNhcmVmdWwgbG9vay5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1c2luZyBgI2lmbmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYW5kIGAjZWxzZWAvYCNlbmRpZmAgYmxvY2tzIGFyb3VuZCBzZXZlcmFsIGZ1bmN0aW9ucywgbmFtZWx5IGBrdm1fcm1hcF9nZXRgLCBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBhbmQgdGhlIHJlYWQtb25seSB2YXJpYW50cy4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBSZWFsLVRpbWUgUHJlZW1wdGlvbiAoQ09ORklHX1BSRUVNUFRfUlQpIGNvbmZpZ3VyYXRpb24uIEl0IGFsc28gYXBwZWFycyB0aGF0IGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCBpcyBiZWluZyB1cGRhdGVkIHRvIHRha2UgYSBga3ZtYCBhcmd1bWVudC4gVGhhdCdzIGEgc3RydWN0dXJhbCBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLlxuXG5GdXJ0aGVybW9yZSwgSSBub3RlIHRoZSBhZGRpdGlvbiB3aXRoaW4gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAuIFRoZXJlJ3Mgbm93IGEgcmVhZCBsb2NrIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVGAgYmxvY2s6IGBndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7YCBhbmQgYSBjYWxsIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgcmVhZCBsb2NrIGlzIGxpa2VseSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgdGhlIGJhbmUgb2YgcmVhbC10aW1lIHN5c3RlbXMuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9lcy4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgdG8gc2VlIGhvdyB0aGUgY2hhbmdlcyBmaXQgaW4gdGhlIG92ZXJhbGwgcGljdHVyZS4gVGhpcyBzaG91bGQgc2hvdyBtZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gbW9yZSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cyB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjM5Ljg5MzgzOTM1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0fVxcbjEwMDE6XFx0XFxuMTAwMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZybWFwX2hlYWQtXFx1MDAzZXZhbCkgXFx1MDAyNiB+S1ZNX1JNQVBfTE9DS0VEO1xcbjEwMDU6XFx0fVxcbjEwMDY6XFx0XFxuMTAwNzpcXHQvKlxcbjEwMDg6XFx0ICogSWYgbW11X2xvY2sgaXNuJ3QgaGVsZCwgcm1hcHMgY2FuIG9ubHkgYmUgbG9ja2VkIGluIHJlYWQtb25seSBtb2RlLiAgVGhlXFxuMTAwOTpcXHQgKiBhY3R1YWwgbG9ja2luZyBpcyB0aGUgc2FtZSwgYnV0IHRoZSBjYWxsZXIgaXMgZGlzYWxsb3dlZCBmcm9tIG1vZGlmeWluZyB0aGVcXG4xMDEwOlxcdCAqIHJtYXAsIGFuZCBzbyB0aGUgdW5sb2NrIGZsb3cgaXMgYSBub3AgaWYgdGhlIHJtYXAgaXMvd2FzIGVtcHR5LlxcbjEwMTE6XFx0ICovXFxuMTAxMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm0gKmt2bSxcXG4xMDEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbjEwMTQ6XFx0e1xcbjEwMTU6XFx0XFx0dW5zaWduZWQgbG9uZyBybWFwX3ZhbDtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuMTAxODpcXHRcXHRybWFwX3ZhbCA9IF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRpZiAoIXJtYXBfdmFsKVxcbjEwMjE6XFx0XFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4xMDIyOlxcdFxcbjEwMjM6XFx0XFx0cmV0dXJuIHJtYXBfdmFsO1xcbjEwMjQ6XFx0fVxcbjEwMjU6XFx0XFxuMTAyNjpcXHRzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4xMDI3OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvbGRfdmFsKVxcbjEwMjg6XFx0e1xcbjEwMjk6XFx0XFx0aWYgKCFvbGRfdmFsKVxcbjEwMzA6XFx0XFx0XFx0cmV0dXJuO1xcbjEwMzE6XFx0XFxuMTAzMjpcXHRcXHRLVk1fTU1VX1dBUk5fT04ob2xkX3ZhbCAhPSBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKSk7XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgb2xkX3ZhbCk7XFxuMTAzNTpcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbjEwMzY6XFx0fVxcbjEwMzc6XFx0I2Vsc2VcXG4xMDM4OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbjEwMzk6XFx0e1xcbjEwNDA6XFx0XFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsKTtcXG4xMDQxOlxcdH1cXG4xMDQyOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbjEwNDM6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4xMDQ0OlxcdHtcXG4xMDQ1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbjEwNDY6XFx0XFx0cmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpO1xcbjEwNDc6XFx0fVxcbjEwNDg6XFx0XFxuMTA0OTpcXHRzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxcbjEwNTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuMTA1MTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBuZXdfdmFsKVxcbjEwNTI6XFx0e1xcbjEwNTM6XFx0XFx0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsLCBuZXdfdmFsKTtcXG4xMDU0OlxcdH1cXG4xMDU1OlxcdFxcbjEwNTY6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXFxuMTA1NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4xMDU4OlxcdHtcXG4xMDU5OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuMTA2MDpcXHRcXHRyZXR1cm4ga3ZtX3JtYXBfZ2V0KHJtYXBfaGVhZCk7XFxuMTA2MTpcXHR9XFxuMTA2MjpcXHRcXG4xMDYzOlxcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbjEwNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxcbjEwNjU6XFx0I2VuZGlmXFxuMTA2NjpcXHRcXG4xMDY3OlxcdC8qXFxuMTA2ODpcXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS5cXG4xMDY5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjozOS44OTQ0NTc1MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA2ODQ0MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBga3ZtX3JtYXBfZ2V0YCBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgY29kZSwgdHJhY2luZyB0aGUgcGF0aCwgYW5kIEkndmUgaGl0IGBrdm1fcm1hcF9nZXRgLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IGNlbnRyYWwgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gS1ZNJ3MgcmV2ZXJzZSBtYXBwaW5nLiBCZWZvcmUgSSBnZXQgKnRvbyogaW52b2x2ZWQgaW4gZGlzc2VjdGluZyB0aGlzIHNwZWNpZmljIGNhbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gSSBjYW4ndCBqdXN0IGRpdmUgaW4gd2l0aG91dCBjb250ZXh0LlxuXG5UaGVyZWZvcmUsIEkgd2lsbCBnbyBiYWNrIHRvIHRoZSBzZWN0aW9uICpwcmVjZWRpbmcqIHRoZSBjYWxsLiBUaGUgbW9zdCBsb2dpY2FsIGFwcHJvYWNoIGlzIHRvIGNoZWNrIHRoZSBsaW5lcyByaWdodCBiZWZvcmUuIExpbmVzIDkwMC0xMDAwIHNlZW0gbGlrZSBhIGdvb2QgY2h1bmsgdG8gZXhhbWluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IHN0YXRlIHZhcmlhYmxlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQganVzdCBiZWZvcmUsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiB1c2UsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgbGFyZ2VyIG1vZHVsZS4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB3aHkgYGt2bV9ybWFwX2dldGAgaXMgZXZlbiAqbmVlZGVkKiBhdCB0aGlzIHBvaW50LiBXaXRoIHRoaXMgYmFja2dyb3VuZCBpbiBwbGFjZSwgSSB3aWxsIGJlIGluIGEgbXVjaCBiZXR0ZXIgcG9zaXRpb24gdG8gYXBwcmVjaWF0ZSB0aGUgcm9sZSBvZiBga3ZtX3JtYXBfZ2V0YCBhbmQgaXRzIGltcGFjdC4gSSdsbCBiZSBtb3JlIGNvbmZpZGVudCB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55IHZpdGFsIHBpZWNlcyBvZiB0aGUgcHV6emxlIGFuZCB0aGF0IHRoZSBmbG93IG1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo0Mi44MDEzMDQ0NTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdCAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xcbiA5MDE6XFx0ICogb3BlcmF0ZXMgd2l0aCBtbXVfbG9jayBoZWxkIGZvciB3cml0ZSksIGJ1dCBybWFwcyBjYW4gYmUgd2Fsa2VkIHdpdGhvdXRcXG4gOTAyOlxcdCAqIGhvbGRpbmcgbW11X2xvY2sgc28gbG9uZyBhcyB0aGUgY2FsbGVyIGNhbiB0b2xlcmF0ZSBTUFRFcyBpbiB0aGUgcm1hcCBjaGFpblxcbiA5MDM6XFx0ICogYmVpbmcgemFwcGVkL2Ryb3BwZWQgX3doaWxlIHRoZSBybWFwIGlzIGxvY2tlZF8uXFxuIDkwNDpcXHQgKlxcbiA5MDU6XFx0ICogT3RoZXIgdGhhbiB0aGUgS1ZNX1JNQVBfTE9DS0VEIGZsYWcsIG1vZGlmaWNhdGlvbnMgdG8gcm1hcCBlbnRyaWVzIG11c3QgYmVcXG4gOTA2OlxcdCAqIGRvbmUgd2hpbGUgaG9sZGluZyBtbXVfbG9jayBmb3Igd3JpdGUuICBUaGlzIGFsbG93cyBhIHRhc2sgd2Fsa2luZyBybWFwc1xcbiA5MDc6XFx0ICogd2l0aG91dCBob2xkaW5nIG1tdV9sb2NrIHRvIGNvbmN1cnJlbnRseSB3YWxrIHRoZSBzYW1lIGVudHJpZXMgYXMgYSB0YXNrXFxuIDkwODpcXHQgKiB0aGF0IGlzIGhvbGRpbmcgbW11X2xvY2sgYnV0IF9ub3RfIHRoZSBybWFwIGxvY2suICBOZWl0aGVyIHRhc2sgd2lsbCBtb2RpZnlcXG4gOTA5OlxcdCAqIHRoZSBybWFwcywgdGh1cyB0aGUgd2Fsa3MgYXJlIHN0YWJsZS5cXG4gOTEwOlxcdCAqXFxuIDkxMTpcXHQgKiBBcyBhbGx1ZGVkIHRvIGFib3ZlLCBTUFRFcyBpbiBybWFwcyBhcmUgX25vdF8gcHJvdGVjdGVkIGJ5IEtWTV9STUFQX0xPQ0tFRCxcXG4gOTEyOlxcdCAqIG9ubHkgdGhlIHJtYXAgY2hhaW5zIHRoZW1zZWx2ZXMgYXJlIHByb3RlY3RlZC4gIEUuZy4gaG9sZGluZyBhbiBybWFwJ3MgbG9ja1xcbiA5MTM6XFx0ICogZW5zdXJlcyBhbGwgXFxcInN0cnVjdCBwdGVfbGlzdF9kZXNjXFxcIiBmaWVsZHMgYXJlIHN0YWJsZS5cXG4gOTE0OlxcdCAqL1xcbiA5MTU6XFx0I2RlZmluZSBLVk1fUk1BUF9MT0NLRURcXHRCSVQoMSlcXG4gOTE2OlxcdFxcbiA5MTc6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19rdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuIDkxODpcXHR7XFxuIDkxOTpcXHRcXHR1bnNpZ25lZCBsb25nIG9sZF92YWwsIG5ld192YWw7XFxuIDkyMDpcXHRcXG4gOTIxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0LypcXG4gOTI0OlxcdFxcdCAqIEVsaWRlIHRoZSBsb2NrIGlmIHRoZSBybWFwIGlzIGVtcHR5LCBhcyBsb2NrbGVzcyB3YWxrZXJzIChyZWFkLW9ubHlcXG4gOTI1OlxcdFxcdCAqIG1vZGUpIGRvbid0IG5lZWQgdG8gKGFuZCBjYW4ndCkgd2FsayBhbiBlbXB0eSBybWFwLCBub3IgY2FuIHRoZXkgYWRkXFxuIDkyNjpcXHRcXHQgKiBlbnRyaWVzIHRvIHRoZSBybWFwLiAgSS5lLiB0aGUgb25seSBwYXRocyB0aGF0IHByb2Nlc3MgZW1wdHkgcm1hcHNcXG4gOTI3OlxcdFxcdCAqIGRvIHNvIHdoaWxlIGhvbGRpbmcgbW11X2xvY2sgZm9yIHdyaXRlLCBhbmQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cXG4gOTI4OlxcdFxcdCAqL1xcbiA5Mjk6XFx0XFx0b2xkX3ZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsKTtcXG4gOTMwOlxcdFxcdGlmICghb2xkX3ZhbClcXG4gOTMxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MzI6XFx0XFxuIDkzMzpcXHRcXHRkbyB7XFxuIDkzNDpcXHRcXHRcXHQvKlxcbiA5MzU6XFx0XFx0XFx0ICogSWYgdGhlIHJtYXAgaXMgbG9ja2VkLCB3YWl0IGZvciBpdCB0byBiZSB1bmxvY2tlZCBiZWZvcmVcXG4gOTM2OlxcdFxcdFxcdCAqIHRyeWluZyBhY3F1aXJlIHRoZSBsb2NrLCBlLmcuIHRvIGF2b2lkIGJvdW5jaW5nIHRoZSBjYWNoZVxcbiA5Mzc6XFx0XFx0XFx0ICogbGluZS5cXG4gOTM4OlxcdFxcdFxcdCAqL1xcbiA5Mzk6XFx0XFx0XFx0d2hpbGUgKG9sZF92YWwgXFx1MDAyNiBLVk1fUk1BUF9MT0NLRUQpIHtcXG4gOTQwOlxcdFxcdFxcdFxcdGNwdV9yZWxheCgpO1xcbiA5NDE6XFx0XFx0XFx0XFx0b2xkX3ZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnJtYXBfaGVhZC1cXHUwMDNldmFsKTtcXG4gOTQyOlxcdFxcdFxcdH1cXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0XFx0LypcXG4gOTQ1OlxcdFxcdFxcdCAqIFJlY2hlY2sgZm9yIGFuIGVtcHR5IHJtYXAsIGl0IG1heSBoYXZlIGJlZW4gcHVyZ2VkIGJ5IHRoZVxcbiA5NDY6XFx0XFx0XFx0ICogdGFzayB0aGF0IGhlbGQgdGhlIGxvY2suXFxuIDk0NzpcXHRcXHRcXHQgKi9cXG4gOTQ4OlxcdFxcdFxcdGlmICghb2xkX3ZhbClcXG4gOTQ5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA5NTA6XFx0XFxuIDk1MTpcXHRcXHRcXHRuZXdfdmFsID0gb2xkX3ZhbCB8IEtWTV9STUFQX0xPQ0tFRDtcXG4gOTUyOlxcdFxcdC8qXFxuIDk1MzpcXHRcXHQgKiBVc2UgdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIHRvIHByZXZlbnQgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgcm1hcFxcbiA5NTQ6XFx0XFx0ICogZnJvbSBiZWluZyByZW9yZGVyZWQgb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBjcmVhdGVkIGJ5XFxuIDk1NTpcXHRcXHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cXG4gOTU2OlxcdFxcdCAqXFxuIDk1NzpcXHRcXHQgKiBQYWlycyB3aXRoIHRoZSBhdG9taWNfbG9uZ19zZXRfcmVsZWFzZSgpIGluIGt2bV9ybWFwX3VubG9jaygpLlxcbiA5NTg6XFx0XFx0ICpcXG4gOTU5OlxcdFxcdCAqIEZvciB0aGUgIW9sZF92YWwgY2FzZSwgbm8gb3JkZXJpbmcgaXMgbmVlZGVkLCBhcyB0aGVyZSBpcyBubyBybWFwXFxuIDk2MDpcXHRcXHQgKiB0byB3YWxrLlxcbiA5NjE6XFx0XFx0ICovXFxuIDk2MjpcXHRcXHR9IHdoaWxlICghYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZShcXHUwMDI2cm1hcF9oZWFkLVxcdTAwM2V2YWwsIFxcdTAwMjZvbGRfdmFsLCBuZXdfdmFsKSk7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdC8qXFxuIDk2NTpcXHRcXHQgKiBSZXR1cm4gdGhlIG9sZCB2YWx1ZSwgaS5lLiBfd2l0aG91dF8gdGhlIExPQ0tFRCBiaXQgc2V0LiAgSXQnc1xcbiA5NjY6XFx0XFx0ICogaW1wb3NzaWJsZSBmb3IgdGhlIHJldHVybiB2YWx1ZSB0byBiZSAwIChzZWUgYWJvdmUpLCBpLmUuIHRoZSByZWFkLVxcbiA5Njc6XFx0XFx0ICogb25seSB1bmxvY2sgZmxvdyBjYW4ndCBnZXQgYSBmYWxzZSBwb3NpdGl2ZSBhbmQgZmFpbCB0byB1bmxvY2suXFxuIDk2ODpcXHRcXHQgKi9cXG4gOTY5OlxcdFxcdHJldHVybiBvbGRfdmFsO1xcbiA5NzA6XFx0fVxcbiA5NzE6XFx0XFxuIDk3MjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcXG4gOTczOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuIDk3NDpcXHR7XFxuIDk3NTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gOTc2OlxcdFxcbiA5Nzc6XFx0XFx0cmV0dXJuIF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbiA5Nzg6XFx0fVxcbiA5Nzk6XFx0XFxuIDk4MDpcXHRzdGF0aWMgdm9pZCBfX2t2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbiA5ODE6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyB2YWwpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHRLVk1fTU1VX1dBUk5fT04odmFsIFxcdTAwMjYgS1ZNX1JNQVBfTE9DS0VEKTtcXG4gOTg0OlxcdFxcdC8qXFxuIDk4NTpcXHRcXHQgKiBFbnN1cmUgdGhhdCBhbGwgYWNjZXNzZXMgdG8gdGhlIHJtYXAgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIHVubG9ja2luZ1xcbiA5ODY6XFx0XFx0ICogdGhlIHJtYXAuXFxuIDk4NzpcXHRcXHQgKlxcbiA5ODg6XFx0XFx0ICogUGFpcnMgd2l0aCB0aGUgYXRvbWljX2xvbmdfdHJ5X2NtcHhjaGdfYWNxdWlyZSgpIGluIF9fa3ZtX3JtYXBfbG9jaygpLlxcbiA5ODk6XFx0XFx0ICovXFxuIDk5MDpcXHRcXHRhdG9taWNfbG9uZ19zZXRfcmVsZWFzZShcXHUwMDI2cm1hcF9oZWFkLVxcdTAwM2V2YWwsIHZhbCk7XFxuIDk5MTpcXHR9XFxuIDk5MjpcXHRcXG4gOTkzOlxcdHN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuIDk5NDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4gOTk1OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpXFxuIDk5NjpcXHR7XFxuIDk5NzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0X19rdm1fcm1hcF91bmxvY2socm1hcF9oZWFkLCBuZXdfdmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NDIuODAxNzc0MzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUxMDQ4NDI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gS1ZNIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBSaWdodCBub3csIEkgdGhpbmsgSSBuZWVkIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIHRoYXQgYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgaXQgYXJvdW5kIGxpbmUgMTc3Ni4gVGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgSSdtIHRyeWluZyB0byBncm9rIHJlc2lkZXMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHJvdXRpbmUgaGFuZGxlcyBhZ2luZyBvZiBndWVzdCBwaHlzaWNhbCBmcmFtZSBudW1iZXJzIChHRk5zKSB3aXRoaW4gYSBzcGVjaWZpYyByYW5nZS4gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHdpdGhpbiB0aGUgS1ZNIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NDYuMzEyMjYxNzU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc2NTpcXHRcXG4xNzY2OlxcdHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbjE3Njc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbjE3Njg6XFx0XFx0XFx0XFx0XFx0ICAgYm9vbCB0ZXN0X29ubHkpXFxuMTc2OTpcXHR7XFxuMTc3MDpcXHRcXHRzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkO1xcbjE3NzE6XFx0XFx0c3RydWN0IHJtYXBfaXRlcmF0b3IgaXRlcjtcXG4xNzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgcm1hcF92YWw7XFxuMTc3MzpcXHRcXHR1NjQgb2xkX3NwdGUsIG5ld19zcHRlO1xcbjE3NzQ6XFx0XFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbjE3NzU6XFx0XFx0dTY0ICpzcHRlcDtcXG4xNzc2OlxcdFxcdGdmbl90IGdmbjtcXG4xNzc3OlxcdFxcdGludCBsZXZlbDtcXG4xNzc4OlxcdFxcbjE3Nzk6XFx0I2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuMTc4MDpcXHRcXHRndWFyZChyZWFkX2xvY2spKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4xNzgxOlxcdCNlbmRpZlxcbjE3ODI6XFx0XFxuMTc4MzpcXHRcXHRmb3IgKGxldmVsID0gUEdfTEVWRUxfNEs7IGxldmVsIFxcdTAwM2M9IEtWTV9NQVhfSFVHRVBBR0VfTEVWRUw7IGxldmVsKyspIHtcXG4xNzg0OlxcdFxcdFxcdGZvciAoZ2ZuID0gcmFuZ2UtXFx1MDAzZXN0YXJ0OyBnZm4gXFx1MDAzYyByYW5nZS1cXHUwMDNlZW5kO1xcbjE3ODU6XFx0XFx0XFx0ICAgICBnZm4gKz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpIHtcXG4xNzg2OlxcdFxcdFxcdFxcdHJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLVxcdTAwM2VzbG90KTtcXG4xNzg3OlxcdFxcdFxcdFxcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7XFxuMTc4ODpcXHRcXG4xNzg5OlxcdFxcdFxcdFxcdGZvcl9lYWNoX3JtYXBfc3B0ZV9sb2NrbGVzcyhybWFwX3ZhbCwgXFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xcbjE3OTA6XFx0XFx0XFx0XFx0XFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcXG4xNzkxOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE3OTI6XFx0XFxuMTc5MzpcXHRcXHRcXHRcXHRcXHRpZiAodGVzdF9vbmx5KSB7XFxuMTc5NDpcXHRcXHRcXHRcXHRcXHRcXHRrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkocm1hcF9oZWFkLCBybWFwX3ZhbCk7XFxuMTc5NTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNzk2OlxcdFxcdFxcdFxcdFxcdH1cXG4xNzk3OlxcdFxcbjE3OTg6XFx0XFx0XFx0XFx0XFx0aWYgKHNwdGVfYWRfZW5hYmxlZChvbGRfc3B0ZSkpXFxuMTc5OTpcXHRcXHRcXHRcXHRcXHRcXHRuZXdfc3B0ZSA9IG9sZF9zcHRlIFxcdTAwMjYgfnNoYWRvd19hY2Nlc3NlZF9tYXNrO1xcbjE4MDA6XFx0XFx0XFx0XFx0XFx0ZWxzZVxcbjE4MDE6XFx0XFx0XFx0XFx0XFx0XFx0bmV3X3NwdGUgPSBtYXJrX3NwdGVfZm9yX2FjY2Vzc190cmFjayhvbGRfc3B0ZSk7XFxuMTgwMjpcXHRcXG4xODAzOlxcdFxcdFxcdFxcdFxcdC8qXFxuMTgwNDpcXHRcXHRcXHRcXHRcXHQgKiBEb24ndCBib3RoZXIgcmV0cnlpbmcgaWYgdGhlIENNUFhDSEcgZmFpbHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ2LjMxMjczMDU1NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjY4NDExMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWAuIFJpZ2h0LCBpdCdzIHBhcnQgb2YgdGhlIEtWTSBNTVUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNhbGx5IGZvciB4ODYvYW1kNjQuIFRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IENhbiBJIGFjdHVhbGx5IGdldCB0byB0aGlzIHRoaW5nIHdpdGggZnV6emluZz8gQW5kIG9mIGNvdXJzZSwgS1ZNIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHZpYSBgL2Rldi9rdm1gLiBTeXprYWxsZXIgaGl0cyB0aGF0IGhhcmQsIHNvIHRoZSBhbnN3ZXIgaXMgYSBzb2xpZCBcIlllcywgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZVwiLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogKmhvdyogZG8gSSByZWFjaCBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMuIFRpbWUgdG8gdXNlIGBncmVwcGVyYC4gSSdsbCBydW4gdGhlIHNlYXJjaCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGNyYWZ0IGVmZmVjdGl2ZSBmdXp6aW5nIGlucHV0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ5LjA3OTU3NTQ3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxNzY0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTc1OD1zdGF0aWMgdm9pZCBybWFwX2FkZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NjUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzY2OnN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc2Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE4MjQ9Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgzMS1cXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4MzI6XFx0XFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xODMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xODM3PWJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTg0Ny1cXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4NDg6XFx0XFx0eW91bmcgfD0ga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjQ5LjE2NDc2NDUzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTIzNzQwNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBNTVUgTm90aWZpZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGVzZSBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgY2FsbGJhY2tzLiBUaGV5J3JlIHBhcnQgb2YgdGhlIEtWTSBNTVUgbm90aWZpZXIgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGt2bV9tbXVfbm90aWZpZXJfb3BzYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiBleGVjdXRpb24sIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuXG5cbkxldCdzIHNlZeKApiB0aGVzZSBhcmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIE1NVSBub3RpZmllciBob29rcy4gSSdtIHRoaW5raW5nLCBgdGVzdF95b3VuZ2AgYW5kIGBjbGVhcl95b3VuZ2AgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgZGVhbGluZyB3aXRoIG1lbW9yeSBhZ2luZywgb3IgcGVyaGFwcyBkdXJpbmcgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBjYWxscy4gSSBzaG91bGQgYWxzbyBjaGVjayBtYWR2aXNlIGFuZCByZWNsYWltLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJtYXAgbG9ja2luZyB3b3JrcyBpbiByZWxhdGlvbiB0byB0aGlzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAsIGFuZCBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCBhcmUgdXNlZCB0aHJvdWdob3V0IGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgaXMgcHJvdGVjdGVkIGR1cmluZyB0aGVzZSBNTVUgbm90aWZpZXIgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjo1My42ODg1MDkwNjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzkxOTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcm1hcF8obG9ja3x1bmxvY2spXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz04NzQ9c3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90X2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTkxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjkxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2t2bV9ybWFwX2xvY2soc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTkxOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk1NC1cXHQgKiBmcm9tIGJlaW5nIHJlb3JkZXJlZCBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIGNyZWF0ZWQgYnlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk1NTpcXHQgKiBfX2t2bV9ybWFwX2xvY2soKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk1Ni1cXHQgKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTU3OlxcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3NldF9yZWxlYXNlKCkgaW4ga3ZtX3JtYXBfdW5sb2NrKCkuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NTgtXFx0ICpcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTcxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTcyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTczLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk3NzpcXHRyZXR1cm4gX19rdm1fcm1hcF9sb2NrKHJtYXBfaGVhZCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzgtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTgwOnN0YXRpYyB2b2lkIF9fa3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05ODEtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4Ny1cXHQgKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTg4OlxcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4OS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTkyLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTkzOnN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05OTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk5OC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk5OTpcXHRfX2t2bV9ybWFwX3VubG9jayhybWFwX2hlYWQsIG5ld192YWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAwMC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwMDI9c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTEtICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDEyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxMy1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxNy1cXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMTg6XFx0cm1hcF92YWwgPSBfX2t2bV9ybWFwX2xvY2socm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMjUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDI2OnN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAyNy1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAzMy1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMzQ6XFx0X19rdm1fcm1hcF91bmxvY2socm1hcF9oZWFkLCBvbGRfdmFsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwMzUtXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0MS19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDQyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDQ4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA0OTpzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1MC1cXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1NS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNTY6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDU3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDYyLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTA2MzpzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9sZF92YWwpIHsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDcwPXN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA3Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwNzc6XFx0b2xkX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA3OC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTEwOC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExMDk6XFx0a3ZtX3JtYXBfdW5sb2NrKGt2bSwgcm1hcF9oZWFkLCBuZXdfdmFsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExMTAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExNTA9c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTU2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE1NzpcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE1OC1cXHRpZiAoS1ZNX0JVR19PTl9EQVRBX0NPUlJVUFRJT04oIXJtYXBfdmFsLCBrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTgyLW91dDpcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExODM6XFx0a3ZtX3JtYXBfdW5sb2NrKGt2bSwgcm1hcF9oZWFkLCBybWFwX3ZhbCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTg0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTE5ND1zdGF0aWMgYm9vbCBrdm1femFwX2FsbF9ybWFwX3NwdGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEyMDE6XFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrKGt2bSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEyMDItXFx0aWYgKCFybWFwX3ZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIxOS1cXHQvKiBybWFwX2hlYWQgaXMgbWVhbmluZ2xlc3Mgbm93LCByZW1lbWJlciB0byByZXNldCBpdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTIyMDpcXHRrdm1fcm1hcF91bmxvY2soa3ZtLCBybWFwX2hlYWQsIDApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIyMS1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTc2Nj1zdGF0aWMgYm9vbCBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ni1cXHRcXHRcXHRybWFwX2hlYWQgPSBnZm5fdG9fcm1hcChnZm4sIGxldmVsLCByYW5nZS1cXHUwMDNlc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzg3OlxcdFxcdFxcdHJtYXBfdmFsID0ga3ZtX3JtYXBfbG9ja19yZWFkb25seShrdm0sIHJtYXBfaGVhZCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg4LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzkzLVxcdFxcdFxcdFxcdGlmICh0ZXN0X29ubHkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3OTQ6XFx0XFx0XFx0XFx0XFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5NS1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgxMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE4MTM6XFx0XFx0XFx0a3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCwgcm1hcF92YWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgxNC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjUzLjc5NjQzNzg3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTYwNzgyNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogS1ZNIHg4NiBNTVUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgS1ZNJ3MgeDg2IE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJdCdzIGFkZGluZyBQUkVFTVBUX1JUIHN1cHBvcnQgZm9yIHJtYXAgbG9ja2luZywgc28gdGhpcyBpcyBhYm91dCBtb3JlIHJvYnVzdCBsb2NraW5nIGZvciBSVCBrZXJuZWxzLiBJdCdzIG1vZGlmeWluZyB0aGUgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgaXRzIGNhbGxlcnMsIGFuZCwgY3JpdGljYWxseSwgaXQncyBhZGRpbmcgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZGAgYW5kIGBsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlYCB1bmRlciBgQ09ORklHX1BSRUVNUFRfUlRgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdD9cblxuRm9sbG93aW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gc2VlIGlmIGl0IHRvdWNoZXMgKnJlYWNoYWJsZSogY29kZS4gVGhlIGd1aWRlbGluZXMgc2F5IHRoaW5ncyBsaWtlIE1NLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgYW5kIGNvcmUgdmlydHVhbGl6YXRpb24gc3Vic3lzdGVtcyBhcmUgd29ydGggZnV6emluZy4gT2theSwgS1ZNIE1NVSBpcyBkZWZpbml0ZWx5IGEgY29yZSB2aXJ0dWFsaXphdGlvbiBzdWJzeXN0ZW0gaW4gdGhlIHg4NiBMaW51eCBrZXJuZWwuIFNvLCBjaGVjay4gVGhhdCBpcyBvbiB0aGUgbGlzdC5cblxuTm93IGZvciB0aGUgY29uZmlndXJhdGlvbnMuIFdoYXQgZG9lcyB0aGlzIGRlcGVuZCBvbj8gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgS1ZNYCwgd2hpY2ggbWVhbnMgYENPTkZJR19LVk1gIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX0tWTV9JTlRFTGAgb3IgYENPTkZJR19LVk1fQU1EYC4gQnV0IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUgaXMgKmRvZXMgdGhpcyBjb2RlIGV4ZWN1dGUgdW5kZXIgYm90aCByZWd1bGFyIGtlcm5lbCBhbmQgcHJlZW1wdC1ydCo/IFllcyEgQW5kLCB0aGUgY29kZSBwYXRoIGlzIGRpZmZlcmVudCBmb3IgcmVndWxhciBhbmQgcmVhbC10aW1lLiBGb3IgYCFDT05GSUdfUFJFRU1QVF9SVGAsIHRoZXJlIGlzIGEgbmV3IHBhcmFtZXRlciAoYHN0cnVjdCBrdm0gKmt2bWApIGFkZGVkIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCwgY2FsbGVkIGZyb20gYGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2UoKWAuIEZvciBgQ09ORklHX1BSRUVNUFRfUlRgLCB0aGVyZSdzIGEgZGlmZmVyZW50IGxvY2tpbmcgbWVjaGFuaXNtIHdpdGggYHJlYWRfbG9ja2AgYW5kIHRoZSBuZXcgYXNzZXJ0aW9ucyBsaWtlIGBsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWRgLiBTbyB0aGlzIGlzICpjb25kaXRpb25hbGx5KiByZWFjaGFibGUhXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgdGhlIGV4YWN0IEtWTSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICppcyogd29ydGggZnV6emluZy4gSXQncyB0b3VjaGluZyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5LCBpdCdzIGNvbmRpdGlvbmFsbHkgcmVhY2hhYmxlIHVuZGVyIGBDT05GSUdfUFJFRU1QVF9SVGAsIGFuZCBpdCdzIGludHJvZHVjaW5nIGxvY2tpbmcgY2hhbmdlcyB3aXRoIG5ldyBhc3NlcnRpb25zLCB3aGljaCBhcmUgYWx3YXlzIGdvb2QgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NTkuOTU3MjI1MDA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTUxNTM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDAuMDMyNzUzNDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODYzODU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBLVk0gTU1VIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYG1tdS5vYCBvYmplY3QgZmlsZSB3aXRoaW4gS1ZNIGZvciB4ODYgaXMgYnVpbHQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscyBhbmQgYnVpbGQgc3lzdGVtcywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcyB0aGF0IGdvdmVybiB0aGUgY3JlYXRpb24gb2YgYG1tdS5vYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgcmVsYXRlZCB0byBmZWF0dXJlcywgc3VjaCBhcyBFUFQgb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBiZWNhdXNlIHRob3NlIHdvdWxkIGNlcnRhaW5seSBpbmZsdWVuY2UgaG93IHRoZSBNTVUgY29kZSBpcyBjb21waWxlZCBhbmQgbGlua2VkLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1zdHJ1Y3R1cmVkLCBlYXN5IHRvIGZvbGxvdywgYW5kIGxldmVyYWdlcyB0aGUga2VybmVsJ3MgYnVpbHQtaW4gYnVpbGQgc3lzdGVtIGVmZmVjdGl2ZWx5LiBJZGVhbGx5LCBJJ2xsIHNlZSBzb21lIHN0YW5kYXJkIHBhdHRlcm4gcnVsZXMgYW5kIHZhcmlhYmxlIGRlZmluaXRpb25zIHRoYXQgYWxpZ24gd2l0aCBiZXN0IHByYWN0aWNlcy4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTU1VIGNvZGUgaW50ZXJhY3RzIHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDIuODE5MTQyOTU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxcbiAgIDQ6XFx0Y2NmbGFncy0kKENPTkZJR19LVk1fV0VSUk9SKSArPSAtV2Vycm9yXFxuICAgNTpcXHRcXG4gICA2OlxcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0a3ZtLXlcXHRcXHRcXHQrPSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcXFxcbiAgIDk6XFx0XFx0XFx0XFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXFxuICAxMDpcXHRcXG4gIDExOlxcdGt2bS0kKENPTkZJR19YODZfNjQpICs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cXG4gIDEyOlxcdGt2bS0kKENPTkZJR19LVk1fSU9BUElDKSArPSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cXG4gIDEzOlxcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbiAgMTQ6XFx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXFx0Kz0geGVuLm9cXG4gIDE1OlxcdGt2bS0kKENPTkZJR19LVk1fU01NKVxcdCs9IHNtbS5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xcbiAgMTk6XFx0XFxuICAyMDpcXHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXFx0Kz0gdm14L3NneC5vXFxuICAyMTpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuICAyMjpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuICAyNTpcXHRcXG4gIDI2OlxcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXFx0Kz0gc3ZtL3Nldi5vXFxuICAyNzpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gc3ZtL2h5cGVydi5vXFxuICAyODpcXHRcXG4gIDI5OlxcdGlmZGVmIENPTkZJR19IWVBFUlZcXG4gIDMwOlxcdGt2bS15XFx0XFx0XFx0Kz0ga3ZtX29uaHlwZXJ2Lm9cXG4gIDMxOlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMzI6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bV9vbmh5cGVydi5vXFxuICAzMzpcXHRlbmRpZlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRvYmotJChDT05GSUdfS1ZNX1g4NilcXHQrPSBrdm0ub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0tWTV9JTlRFTClcXHQrPSBrdm0taW50ZWwub1xcbiAgMzc6XFx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuICAzODpcXHRcXG4gIDM5OlxcdEFGTEFHU19zdm0vdm1lbnRlci5vICAgIDo9IC1pcXVvdGUgJChvYmopXFxuICA0MDpcXHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjAyLjgxOTI1MjExNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDc5NDAzNDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE1NVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIE1NVSBwYXRjaC4gRmlyc3QsIEkgc2VlIHRoZSBtb2R1bGUgYnVpbGQgZGlyZWN0aXZlczogYGt2bS15ICs9IC4uLiBtbXUvbW11Lm9gIGFuZCBgb2JqLSQoQ09ORklHX0tWTV9YODYpICs9IGt2bS5vYC4gUmlnaHQsIGFuZCBgS1ZNX1g4NmAgZGVwZW5kcyBvbiBgS1ZNYCwgd2hpY2ggaW4gdHVybiwgaXMgZGVwZW5kZW50IG9uIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgbm90IGJlaW5nIHNldCB0byAnbicuIFNvLCBLVk0gaXRzZWxmIChhbmQgZWl0aGVyIElOVEVMIG9yIEFNRCkgYXJlIHByZXJlcXVpc2l0ZXMuIEFuZCBvZiBjb3Vyc2UsIGVuYWJsaW5nIGBQUkVFTVBUX1JUYCBhbHNvIHRyaWdnZXJzIHRoZSBSVCBwYXRoLiBHb3QgaXQuIFN0YW5kYXJkIGJ1aWxkIHN5c3RlbSBzdHVmZi5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciB0b3VjaGVkIHdpdGhpbiB0aGlzIHBhdGNoOlxuXG4xLiAgYGt2bV9ybWFwX2xvY2tgIChzdGF0aWMgaW4gbW11LmMpXG4yLiAgYGt2bV9ybWFwX3VubG9ja2AgKHN0YXRpYyBpbiBtbXUuYylcbjMuICBga3ZtX3JtYXBfbG9ja19yZWFkb25seWAgKHN0YXRpYyBpbiBtbXUuYylcbjQuICBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YCAoc3RhdGljIGluIG1tdS5jKVxuNS4gIGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCAoc3RhdGljIGluIG1tdS5jLCBjYWxsZWQgYnkgYGt2bV9hZ2VfZ2ZuYCwgYGt2bV90ZXN0X2FnZV9nZm5gKVxuNi4gIGBwdGVfbGlzdF9hZGRgIChzdGF0aWMgaW4gbW11LmMpXG43LiAgYHB0ZV9saXN0X3JlbW92ZWAgKHN0YXRpYyBpbiBtbXUuYylcbjguICBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2AgKHN0YXRpYyBpbiBtbXUuYylcbjkuICBga3ZtX2FnZV9nZm5gIC8gYGt2bV90ZXN0X2FnZV9nZm5gIChub24tc3RhdGljIGVudHJ5cG9pbnRzIGluIG1tdS5jKVxuXG5BaGEhIGBrdm1fYWdlX2dmbmAgYW5kIGBrdm1fdGVzdF9hZ2VfZ2ZuYCBhcmUgZW50cnlwb2ludHMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBhY3R1YWwgY2hhbmdlcyBhcmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgTU1VIGltcGxlbWVudGF0aW9uIGFuZCBtZW1vcnkgYWdpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNzowNi44OTg2NTkwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODIwOlxcdHtcXG4xODIxOlxcdFxcdHJldHVybiAhdGRwX21tdV9lbmFibGVkIHx8IFJFQURfT05DRShrdm0tXFx1MDAzZWFyY2guaW5kaXJlY3Rfc2hhZG93X3BhZ2VzKTtcXG4xODIyOlxcdH1cXG4xODIzOlxcdFxcbjE4MjQ6XFx0Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4xODI1OlxcdHtcXG4xODI2OlxcdFxcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4xODI3OlxcdFxcbjE4Mjg6XFx0XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG4xODI5OlxcdFxcdFxcdHlvdW5nID0ga3ZtX3RkcF9tbXVfYWdlX2dmbl9yYW5nZShrdm0sIHJhbmdlKTtcXG4xODMwOlxcdFxcbjE4MzE6XFx0XFx0aWYgKGt2bV9tYXlfaGF2ZV9zaGFkb3dfbW11X3NwdGVzKGt2bSkpXFxuMTgzMjpcXHRcXHRcXHR5b3VuZyB8PSBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UsIGZhbHNlKTtcXG4xODMzOlxcdFxcbjE4MzQ6XFx0XFx0cmV0dXJuIHlvdW5nO1xcbjE4MzU6XFx0fVxcbjE4MzY6XFx0XFxuMTgzNzpcXHRib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuMTgzODpcXHR7XFxuMTgzOTpcXHRcXHRib29sIHlvdW5nID0gZmFsc2U7XFxuMTg0MDpcXHRcXG4xODQxOlxcdFxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuMTg0MjpcXHRcXHRcXHR5b3VuZyA9IGt2bV90ZHBfbW11X3Rlc3RfYWdlX2dmbihrdm0sIHJhbmdlKTtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0aWYgKHlvdW5nKVxcbjE4NDU6XFx0XFx0XFx0cmV0dXJuIHlvdW5nO1xcbjE4NDY6XFx0XFxuMTg0NzpcXHRcXHRpZiAoa3ZtX21heV9oYXZlX3NoYWRvd19tbXVfc3B0ZXMoa3ZtKSlcXG4xODQ4OlxcdFxcdFxcdHlvdW5nIHw9IGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoa3ZtLCByYW5nZSwgdHJ1ZSk7XFxuMTg0OTpcXHRcXG4xODUwOlxcdFxcdHJldHVybiB5b3VuZztcXG4xODUxOlxcdH1cXG4xODUyOlxcdFxcbjE4NTM6XFx0c3RhdGljIHZvaWQga3ZtX21tdV9jaGVja19zcHRlc19hdF9mcmVlKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbjE4NTQ6XFx0e1xcbjE4NTU6XFx0I2lmZGVmIENPTkZJR19LVk1fUFJPVkVfTU1VXFxuMTg1NjpcXHRcXHRpbnQgaTtcXG4xODU3OlxcdFxcbjE4NTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNQVEVfRU5UX1BFUl9QQUdFOyBpKyspIHtcXG4xODU5OlxcdFxcdFxcdGlmIChLVk1fTU1VX1dBUk5fT04oaXNfc2hhZG93X3ByZXNlbnRfcHRlKHNwLVxcdTAwM2VzcHRbaV0pKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MDYuODk4OTkzNzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5MzU5MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNJ3MgUm1hcCBBZ2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEtWTSdzIFJldmVyc2UgTWFwIChybWFwKSBhZ2luZyBtZWNoYW5pc20uIEkndmUgZ290IGEgbGlzdCBoZXJlOiBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWAsIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5YCwgYGt2bV9ybWFwX3VubG9ja19yZWFkb25seWAsIGBrdm1fcm1hcF9sb2NrYCwgYGt2bV9ybWFwX3VubG9ja2AsIGBrdm1fYWdlX2dmbmAsIGBrdm1fdGVzdF9hZ2VfZ2ZuYCwgYHB0ZV9saXN0X2FkZGAsIGBwdGVfbGlzdF9yZW1vdmVgLCBhbmQgYGt2bV96YXBfYWxsX3JtYXBfc3B0ZXNgLiBOb3csIHRoZSBrZXkgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyBmb3IgS0NPViBjb3ZlcmFnZSBhbmQgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLlxuXG5HaXZlbiBteSBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgXCJGb2N1c1N5bWJvbHMuXCIgIEknbGwgbmVlZCB0byBhdm9pZCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHBhdGhzLCBzbyBJIG5lZWQgdG8gYXZvaWQgdmVyeSBnZW5lcmljIGZ1bmN0aW9ucywgYW5kIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGZ1bmN0aW9ucy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSB0aGUgY29yZSBsb2dpYywgb3IgYXJlIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zLlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgd2l0aGluIGBtbXUuY2AuICBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG5hcnJvdyBkb3duIHRoZSBzY29wZSBvZiB0aGUgaW52ZXN0aWdhdGlvbi5cblxuRmluYWxseSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcm1hcCdzIGJlaGF2aW9yLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZm9yIGZ1bmN0aW9ucyBsaWtlIGBwdGVfbGlzdF9hZGRgIGFuZCBgcHRlX2xpc3RfcmVtb3ZlYC4gIFVuZGVyc3RhbmRpbmcgdGhlaXIgY2FsbGVycyBpcyBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIGhvdyB0aGUgcm1hcCBpcyBtYW5pcHVsYXRlZCBhbmQgaG93IGFnaW5nIGludGVyYWN0cyB3aXRoIHRoZSBQVEUgbGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTAuNTkyNTkwOTMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEyMjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGVfbGlzdF8oYWRkfHJlbW92ZSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwNjM9c3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNjktICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDcwOnN0YXRpYyBpbnQgcHRlX2xpc3RfYWRkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzEtXFx0XFx0XFx0dTY0ICpzcHRlLCBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTE0PXN0YXRpYyB2b2lkIHB0ZV9saXN0X2Rlc2NfcmVtb3ZlX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcF92YWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNDktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTUwOnN0YXRpYyB2b2lkIHB0ZV9saXN0X3JlbW92ZShzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqc3B0ZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExODY9c3RhdGljIHZvaWQga3ZtX3phcF9vbmVfcm1hcF9zcHRlKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE4OS1cXHRtbXVfc3B0ZV9jbGVhcl90cmFja19iaXRzKGt2bSwgc3B0ZXApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE5MDpcXHRwdGVfbGlzdF9yZW1vdmUoa3ZtLCBzcHRlcCwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExOTEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMjQ3PXN0YXRpYyB2b2lkIHJtYXBfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjY3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTI2ODpcXHRwdGVfbGlzdF9yZW1vdmUoa3ZtLCBzcHRlLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTI2OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE3MzQ9c3RhdGljIHZvaWQgX19ybWFwX2FkZChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NDctXFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBzcC1cXHUwMDNlcm9sZS5sZXZlbCwgc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzQ4OlxcdHJtYXBfY291bnQgPSBwdGVfbGlzdF9hZGQoa3ZtLCBjYWNoZSwgc3B0ZSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3NDktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE4OTU9c3RhdGljIHZvaWQgbW11X3BhZ2VfYWRkX3BhcmVudF9wdGUoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTAxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTkwMjpcXHRwdGVfbGlzdF9hZGQoa3ZtLCBjYWNoZSwgcGFyZW50X3B0ZSwgXFx1MDAyNnNwLVxcdTAwM2VwYXJlbnRfcHRlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTAzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTkwNT1zdGF0aWMgdm9pZCBtbXVfcGFnZV9yZW1vdmVfcGFyZW50X3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTA3LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE5MDg6XFx0cHRlX2xpc3RfcmVtb3ZlKGt2bSwgcGFyZW50X3B0ZSwgXFx1MDAyNnNwLVxcdTAwM2VwYXJlbnRfcHRlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xOTA5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTAuNjc0NzI3NzA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTg5OTI1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWdpbmcgaW4gS1ZNKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgbWVtb3J5IGFnaW5nIGlzc3VlIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIGZ1bmN0aW9ucyBga3ZtX21tdV9ub3RpZmllcl9vcHNgIGlzIGEgcHJpbWFyeSBzdXNwZWN0LiBJdCdzIG9mdGVuIGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMsIHNvIHRoYXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGFnaW5nIGlzIHRyYWNrZWQgb3IgdHJpZ2dlcmVkLlxuXG5JIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gTGV0J3Mgc2VlIGhvdyBga3ZtX2FnZV9nZm5gIGFuZCBga3ZtX3Rlc3RfYWdlX2dmbmAgYXJlIGJlaW5nIHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbmFtZWQgaW4gdGhlIHByb21wdCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHQgaXMgY2FsbGluZyB0aGVzZSBhbmQgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZyB3aXRoIHRoZSBhZ2luZyBpbmZvcm1hdGlvbi4gQXJlIHRoZXkgdXNlZCBmb3IgVExCIGludmFsaWRhdGlvbj8gTW9uaXRvcmluZyBhY3Rpdml0eT8gT3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aGljaCBwYWdlcyBhcmUgY2FuZGlkYXRlcyBmb3IgcmVjbGFpbWluZz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIHRvIGZpbmQgYWxsIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGVuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjYWxsaW5nIGNvbnRleHQgd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTMuMTczNzI2MTM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI5MTYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtXyhhZ2V8dGVzdF9hZ2UpX2dmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz04Mjk9c3RhdGljIGJvb2wga3ZtX21tdV9ub3RpZmllcl9jbGVhcl9mbHVzaF95b3VuZyhzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODMzLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODM0OlxcdHJldHVybiBrdm1fYWdlX2h2YV9yYW5nZShtbiwgc3RhcnQsIGVuZCwga3ZtX2FnZV9nZm4sXFxudmlydC9rdm0va3ZtX21haW4uYy04MzUtXFx0XFx0XFx0XFx0ICFJU19FTkFCTEVEKENPTkZJR19LVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HKSk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTgzOD1zdGF0aWMgYm9vbCBrdm1fbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy04NTUtXFx0ICovXFxudmlydC9rdm0va3ZtX21haW4uYzo4NTY6XFx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBzdGFydCwgZW5kLCBrdm1fYWdlX2dmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy04NTctfVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz04NTk9c3RhdGljIGJvb2wga3ZtX21tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy04NjQtXFx0cmV0dXJuIGt2bV9hZ2VfaHZhX3JhbmdlX25vX2ZsdXNoKG1uLCBhZGRyZXNzLCBhZGRyZXNzICsgMSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg2NTpcXHRcXHRcXHRcXHRcXHQgIGt2bV90ZXN0X2FnZV9nZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtODY2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTMuNTA2NjQ4NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc5Nzg4NDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBmb3IgRnV6emluZyBLVk0gUmVhbC1UaW1lIExvY2tpbmcqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2FyeSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4gSSdsbCBuZWVkIGBLVk1gIGVuYWJsZWQsIG5hdHVyYWxseSwgZm9yIEtWTSB2aXJ0dWFsaXphdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgeDg2IEtWTSBtb2R1bGVzLiBGaW5hbGx5LCBnaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWwtdGltZSBsb2NraW5nIHZhcmlhbnQsIEnigJlsbCBuZWVkIGBQUkVFTVBUX1JUYC4gSSB3YW50IHRvIHN0cmVzcyB0ZXN0IHRoZSBSVCBsb2NraW5nIHBhdGhzIHNvIGl0IHNob3VsZCBiZSBlbmFibGVkOyBob3dldmVyLCBib3RoIHRoZSBub24tUlQgYW5kIFJUIHBhdGhzIGFyZSBhZmZlY3RlZC4gU28sIHRob3NlIGZvdXIgY29uZmlndXJhdGlvbnMgYXJlIHRoZSBzdGFydGluZyBwb2ludDogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgUFJFRU1QVF9SVGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlICpmdXp6YWJsZSo/IElzIGl0IHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBrZXJuZWwgY29kZT8gQWJzb2x1dGVseS4gS1ZNIGlzIGFjY2Vzc2libGUgdmlhIGAvZGV2L2t2bWAgaW9jdGxzIGFuZCBtbXVfbm90aWZpZXJzLiBUaGlzIHBhdGNoIGFkZHMgbG9ja2luZyBhc3NlcnRpb25zIChgbG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkYCwgYGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGVgKSwgUlQgcGF0aHMgZm9yIHJtYXAgbG9ja2luZywgYW5kIHJlZmFjdG9yZWQgZnVuY3Rpb24gc2lnbmF0dXJlcywgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCBoYXMgdGhlIHJpZ2h0IGZlYXR1cmVzIHRvIGJlIHdvcnRoIGZ1enppbmcuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgZm9yIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBybWFwIG1hbmFnZW1lbnQsIE1NVSBwYWdlIHRyYWNraW5nLCBhbmQgYWdpbmcgZnVuY3Rpb25zLiBTbywgSSBuZWVkIHRvIHNlbGVjdCBmdW5jdGlvbnMgcmVsYXRpbmcgdG8gcm1hcCBhZ2UvbG9ja2luZzpcbiogICBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZWBcbiogICBga3ZtX3JtYXBfbG9ja19yZWFkb25seWBcbiogICBga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5YFxuKiAgIGBrdm1fcm1hcF9sb2NrYFxuKiAgIGBrdm1fcm1hcF91bmxvY2tgXG4qICAgYGt2bV9hZ2VfZ2ZuYFxuKiAgIGBrdm1fdGVzdF9hZ2VfZ2ZuYFxuKiAgIGBwdGVfbGlzdF9hZGRgXG4qICAgYHB0ZV9saXN0X3JlbW92ZWBcbiogICBga3ZtX3phcF9hbGxfcm1hcF9zcHRlc2BcblxuVGhlc2Ugc2hvdWxkIGJlIGFsbCBvZiB0aGUgcmVsZXZhbnQgS1ZNIHJtYXAgbWFuYWdlbWVudCAvIE1NVSBwYWdlIHRyYWNraW5nIC8gYWdpbmcgZnVuY3Rpb25zLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBjb25maXJtIHRoYXQgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFBSRUVNUFRfUlRgLlxuXG5XaXRoIGFsbCBvZiB0aGlzIGNoZWNrZWQgYW5kIGRvdWJsZS1jaGVja2VkLCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI3NiwiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTguMzA0NTM2NjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3NTUxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3JtYXBfYWdlX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3JtYXBfbG9ja19yZWFkb25seVwiLFxuICAgIFwia3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5XCIsXG4gICAgXCJrdm1fcm1hcF9sb2NrXCIsXG4gICAgXCJrdm1fcm1hcF91bmxvY2tcIixcbiAgICBcImt2bV9hZ2VfZ2ZuXCIsXG4gICAgXCJrdm1fdGVzdF9hZ2VfZ2ZuXCIsXG4gICAgXCJwdGVfbGlzdF9hZGRcIixcbiAgICBcInB0ZV9saXN0X3JlbW92ZVwiLFxuICAgIFwia3ZtX3phcF9hbGxfcm1hcF9zcHRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJldmVyc2UtbWFwcGluZyAocm1hcCkgbG9ja2luZyBsb2dpYywgYWRkaW5nIENPTkZJR19QUkVFTVBUX1JUIHN1cHBvcnQgd2l0aCBsb2NrZGVwIGFzc2VydGlvbnMgKGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZC9sb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKSBhbmQgbW9kaWZ5aW5nIHRoZSBybWFwIGFnaW5nIGFuZCBsb2NraW5nIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1VIG5vdGlmaWVycyBhbmQgaXMgd29ydGggZnV6emluZyB0byB2ZXJpZnkgaW52YXJpYW50IGNoZWNrcyBhbmQgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNzoxOC40NTgzMDY1MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU2MDc1NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MTguNDU5NDc2NzQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTAzNTQ4OTg4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjdmNGQ2NTRkNmRjOTU3Zjg2YzE5NzFhYjU1ZGU5Zjg2MmEzZGQwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjY6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uNWJmODMzNTUwZjg0ZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC04OTUsNiArODk1LDcgQEAgc3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90X2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVcbiAgKi9cbiAjZGVmaW5lIEtWTV9STUFQX01BTllcdEJJVCgwKVxuIFxuKyNpZm5kZWYgQ09ORklHX1BSRUVNUFRfUlRcbiAvKlxuICAqIHJtYXBzIGFuZCBQVEUgbGlzdHMgYXJlIG1vc3RseSBwcm90ZWN0ZWQgYnkgbW11X2xvY2sgKHRoZSBzaGFkb3cgTU1VIGFsd2F5c1xuICAqIG9wZXJhdGVzIHdpdGggbW11X2xvY2sgaGVsZCBmb3Igd3JpdGUpLCBidXQgcm1hcHMgY2FuIGJlIHdhbGtlZCB3aXRob3V0XG5AQCAtMTAwOCw3ICsxMDA5LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfZ2V0KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4gICogYWN0dWFsIGxvY2tpbmcgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgY2FsbGVyIGlzIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgdGhlXG4gICogcm1hcCwgYW5kIHNvIHRoZSB1bmxvY2sgZmxvdyBpcyBhIG5vcCBpZiB0aGUgcm1hcCBpcy93YXMgZW1wdHkuXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJtYXBfdmFsO1xuIFxuQEAgLTEwMzIsNiArMTAzNCwzNSBAQCBzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2tfcmVhZG9ubHkoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCxcbiBcdF9fa3ZtX3JtYXBfdW5sb2NrKHJtYXBfaGVhZCwgb2xkX3ZhbCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbisjZWxzZVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2dldChzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxuK3tcbitcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnJtYXBfaGVhZC1cdTAwM2V2YWwpO1xuK31cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdCAgIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0cmV0dXJuIGt2bV9ybWFwX2dldChybWFwX2hlYWQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrdm1fcm1hcF91bmxvY2soc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkLFxuK1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5ld192YWwpXG4re1xuK1x0YXRvbWljX2xvbmdfc2V0X3JlbGVhc2UoXHUwMDI2cm1hcF9oZWFkLVx1MDAzZXZhbCwgbmV3X3ZhbCk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdHJldHVybiBrdm1fcm1hcF9nZXQocm1hcF9oZWFkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3JtYXBfdW5sb2NrX3JlYWRvbmx5KHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3ZhbCkgeyB9XG4rI2VuZGlmXG4gXG4gLypcbiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgaW4gdGhlIHJtYXAgY2hhaW4sIG5vdCBjb3VudGluZyB0aGUgbmV3IG9uZS5cbkBAIC0xNzQ1LDExICsxNzc2LDE1IEBAIHN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuIFx0Z2ZuX3QgZ2ZuO1xuIFx0aW50IGxldmVsO1xuIFxuKyNpZmRlZiBDT05GSUdfUFJFRU1QVF9SVFxuK1x0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuKyNlbmRpZlxuK1xuIFx0Zm9yIChsZXZlbCA9IFBHX0xFVkVMXzRLOyBsZXZlbCBcdTAwM2M9IEtWTV9NQVhfSFVHRVBBR0VfTEVWRUw7IGxldmVsKyspIHtcbiBcdFx0Zm9yIChnZm4gPSByYW5nZS1cdTAwM2VzdGFydDsgZ2ZuIFx1MDAzYyByYW5nZS1cdTAwM2VlbmQ7XG4gXHRcdCAgICAgZ2ZuICs9IEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKSB7XG4gXHRcdFx0cm1hcF9oZWFkID0gZ2ZuX3RvX3JtYXAoZ2ZuLCBsZXZlbCwgcmFuZ2UtXHUwMDNlc2xvdCk7XG4tXHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KHJtYXBfaGVhZCk7XG4rXHRcdFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcbiBcbiBcdFx0XHRmb3JfZWFjaF9ybWFwX3NwdGVfbG9ja2xlc3Mocm1hcF92YWwsIFx1MDAyNml0ZXIsIHNwdGVwLCBvbGRfc3B0ZSkge1xuIFx0XHRcdFx0aWYgKCFpc19hY2Nlc3NlZF9zcHRlKG9sZF9zcHRlKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjE4LjQ1OTQ4OTgyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODk0NTQzMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBNTVUgTG9ja2luZyBMb2dpYyBmb3IgQ09ORklHX1BSRUVNUFRfUlQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdHdlYWtpbmcgdGhlIEtWTSBNTVUgbG9ja2luZyBmb3IgYENPTkZJR19QUkVFTVBUX1JUYC4gTGV0J3MgZGlnIGluLiBGaXJzdCwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gUmlnaHQgYXdheSwgSSBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGUgY29kZSBpcyBjbGVhcmx5IGNoYW5naW5nIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgZW5hYmxlZC4gSXQgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHlgIGlzIG9ubHkgZGVmaW5lZCBpZiB3ZSAqZG9uJ3QqIGhhdmUgYENPTkZJR19QUkVFTVBUX1JUYC4gSWYgYENPTkZJR19QUkVFTVBUX1JUYCAqaXMqIGVuYWJsZWQsIHdlIGdldCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGBrdm1fcm1hcF9nZXRgLCBga3ZtX3JtYXBfbG9ja2AsIGBrdm1fcm1hcF91bmxvY2tgLCBhbmQgdGhlIHJlYWQtb25seSB2ZXJzaW9ucy4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLlxuXG5Mb29raW5nIGF0IGBrdm1fcm1hcF9hZ2VfZ2ZuX3JhbmdlYCBmb3IgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBJIHNlZSBhIGBndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7YCB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUYC4gVGhpcyBpbXBsaWVzIHNvbWUgUlQtc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc20gaXMgYmVpbmcgdXNlZCwgYW5kIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTU1VIGxvY2sgZGlyZWN0bHkuIEFkZGl0aW9uYWxseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgdXBkYXRpbmcgYSBjYWxsIHRvIGBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKWAuXG5cbk5vdywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgcmVzdCBvZiBgbW11LmNgLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBjYWxscyB0byB0aGVzZSBybWFwIGxvY2tpbmcgZnVuY3Rpb25zLCByZWFkLW9ubHkgb3Igb3RoZXJ3aXNlLCBoYXZlIGJlZW4gbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGFkZGVkLiBXZSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgdGhpcyBjaGFuZ2VzIHRoZSBsb2NraW5nIHNlbWFudGljcyB0aHJvdWdob3V0IHRoZSBNTVUgY29kZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIHNvIGFueSBzdWJ0bGUgY2hhbmdlcyBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjIzLjM1NDAzODc3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTMxMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ybWFwX2xvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTg3ND1zdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTE2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTE3OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3ZtX3JtYXBfbG9jayhzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTE4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU0LVxcdCAqIGZyb20gYmVpbmcgcmVvcmRlcmVkIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gY3JlYXRlZCBieVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTU1OlxcdCAqIF9fa3ZtX3JtYXBfbG9jaygpLlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTU2LVxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3MS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjk3MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9sb2NrKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy05NzYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo5Nzc6XFx0cmV0dXJuIF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtOTc4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9OTgwPXN0YXRpYyB2b2lkIF9fa3ZtX3JtYXBfdW5sb2NrKHN0cnVjdCBrdm1fcm1hcF9oZWFkICpybWFwX2hlYWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4Ny1cXHQgKlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6OTg4OlxcdCAqIFBhaXJzIHdpdGggdGhlIGF0b21pY19sb25nX3RyeV9jbXB4Y2hnX2FjcXVpcmUoKSBpbiBfX2t2bV9ybWFwX2xvY2soKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTk4OS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxMS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjEwMTI6c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3JtYXBfbG9ja19yZWFkb25seShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDEzLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMDE3LVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTAxODpcXHRybWFwX3ZhbCA9IF9fa3ZtX3JtYXBfbG9jayhybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTAxOS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTAzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcm1hcF9nZXQoc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0MS19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDQyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2soc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA0My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMDQ5PXN0YXRpYyB2b2lkIGt2bV9ybWFwX3VubG9jayhzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNTUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDU2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA1Ny1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA3MD1zdGF0aWMgaW50IHB0ZV9saXN0X2FkZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMDc3OlxcdG9sZF92YWwgPSBrdm1fcm1hcF9sb2NrKGt2bSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTEwNzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTExNTA9c3RhdGljIHZvaWQgcHRlX2xpc3RfcmVtb3ZlKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpzcHRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTU2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTE1NzpcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE1OC1cXHRpZiAoS1ZNX0JVR19PTl9EQVRBX0NPUlJVUFRJT04oIXJtYXBfdmFsLCBrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xMTk0PXN0YXRpYyBib29sIGt2bV96YXBfYWxsX3JtYXBfc3B0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMjAwLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTIwMTpcXHRybWFwX3ZhbCA9IGt2bV9ybWFwX2xvY2soa3ZtLCBybWFwX2hlYWQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTIwMi1cXHRpZiAoIXJtYXBfdmFsKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzY2PXN0YXRpYyBib29sIGt2bV9ybWFwX2FnZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg2LVxcdFxcdFxcdHJtYXBfaGVhZCA9IGdmbl90b19ybWFwKGdmbiwgbGV2ZWwsIHJhbmdlLVxcdTAwM2VzbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3ODc6XFx0XFx0XFx0cm1hcF92YWwgPSBrdm1fcm1hcF9sb2NrX3JlYWRvbmx5KGt2bSwgcm1hcF9oZWFkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE3ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI3OjIzLjgxNjk4MTg2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTk3MzYxNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBNTVUgUGF0Y2ggZm9yIFJUIEtlcm5lbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIHJtYXAgbG9ja2luZyBtZWNoYW5pc20gc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHg4NiBNTVUgZm9yIFJUIGtlcm5lbHMsIHdoaWNoIGlzIGltcG9ydGFudC4gV2l0aCBgQ09ORklHX1BSRUVNUFRfUlRgIGVuYWJsZWQsIHdlIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQgc3Bpbi13YWl0aW5nIGFwcHJvYWNoIHdpdGggZGlzYWJsZWQgcHJlZW1wdGlvbiBpbiBgX19rdm1fcm1hcF9sb2NrYC4gVGhhdCdzIGJlY2F1c2UgUlQga2VybmVscyBhcmUgdmVyeSBzdHJpY3QgYWJvdXQgbG9uZyBwcmVlbXB0aW9uIGRpc2FibGVzIGFuZCBzcGlubmluZyB3aGVuIHNsZWVwaW5nIGxvY2tzIGFyZSBpbiBwbGF5LiBJdCBqdXN0IGlzbid0IGdvaW5nIHRvIHdvcmsuXG5cblNvLCB0aGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IHRoYXQgYml0bG9jayBvbiBgcm1hcF9oZWFkLVx1MDAzZXZhbGAgZm9yIHRoZSBga3ZtLVx1MDAzZW1tdV9sb2NrYCByZWFkL3dyaXRlIGxvY2tpbmcgbWVjaGFuaXNtLiBUaGF0J3MgYSBnb29kIGFwcHJvYWNoIG9uIFBSRUVNUFRfUlQuIE5vdyBpbiBga3ZtX3JtYXBfYWdlX2dmbl9yYW5nZSgpYCwgd2Ugc2VlIHRoYXQgd2UgYXJlIGNhbGxpbmcgYGt2bV9ybWFwX2xvY2tfcmVhZG9ubHkoa3ZtLCBybWFwX2hlYWQpYCB1c2luZyBgcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaylgLlxuXG5BbHJpZ2h0LCBsZXQncyBub3cgZXZhbHVhdGUgdGhpcyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG4qICAgRG9lcyB0aGlzIGxlYWQgdG8gY29weWluZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBOb3BlLCB0aGF0J3Mgbm90IGEgY29uY2VybiBoZXJlLlxuKiAgIElzIHRoZXJlIGFueSBhbGxvY2F0aW9uIG9yIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBJIGRvbid0IHNlZSBhbnl0aGluZyBsaWtlIHRoYXQgaGFwcGVuaW5nLlxuKiAgIEFyZSB3ZSBkZWFsaW5nIHdpdGggYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgcGFkZGluZywgb3IgdmFyaWFibGVzPyBOby4gRXZlcnl0aGluZyBsb29rcyBwcm9wZXJseSBpbml0aWFsaXplZC5cbiogICBXb3VsZCBLTVNBTiBmbGFnIGFueSBidWdzIGhlcmU/IE5vLCBJIGRvbid0IHNlZSBhbnkgS01TQU4tZGV0ZWN0YWJsZSBidWdzLiBUaGUgY29uY2VybnMgbGlrZSBsb2NraW5nIGlzc3VlcywgY29uY3VycmVuY3ksIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcywgb3IgbG9naWMgZXJyb3JzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgS0FTQU4sIG9yIHRocmVhZCBzYW5pdGl6ZXIsIG5vdCBLTVNBTi5cblxuU28sIGdpdmVuIHRoaXMgY2FyZWZ1bCBhbmFseXNpcywgXCJOZWVkc0tNU0FOXCIgY2FuIHNhZmVseSBiZSBzZXQgdG8gXCJmYWxzZVwiLiBUaGUgcGF0Y2ggbG9va3MgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM3MiwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6Mjc6MjguODE0MzQ4MjQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHJtYXAgbG9ja2luZyBoZWxwZXJzIHRvIHN1cHBvcnQgQ09ORklHX1BSRUVNUFRfUlQgYnkgcmVseWluZyBvbiByd2xvY2stYmFzZWQgbW11X2xvY2sgaW5zdGVhZCBvZiBjdXN0b20gYml0LXNwaW5uaW5nIGxvY2tzLiBUaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgc2VtYW50aWNzOyB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBjb3B5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIHNpemVzIG9yIGV4cG9zZSBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiBhcmUgaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBLQVNBTiwgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcm1hcCBsb2NraW5nIGhlbHBlcnMgdG8gc3VwcG9ydCBDT05GSUdfUFJFRU1QVF9SVCBieSByZWx5aW5nIG9uIHJ3bG9jay1iYXNlZCBtbXVfbG9jayBpbnN0ZWFkIG9mIGN1c3RvbSBiaXQtc3Bpbm5pbmcgbG9ja3MuIFRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBzZW1hbnRpY3M7IHRoZXkgZG8gbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGNvcHkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgc2l6ZXMgb3IgZXhwb3NlIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[1] Phase: Succeeded StartedAt: 2026-09-03 20:27:40 +0000 UTC FinishedAt: 2026-09-03 20:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 20:27:40 +0000 UTC FinishedAt: 2026-09-03 20:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2] Phase: Succeeded StartedAt: 2026-09-03 20:27:40 +0000 UTC FinishedAt: 2026-09-04 00:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 20:27:40 +0000 UTC FinishedAt: 2026-09-04 00:16:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 20:27:40 +0000 UTC FinishedAt: 2026-09-03 20:27:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 20:27:40 +0000 UTC FinishedAt: 2026-09-03 20:27:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow26pvs/series-workflow26pvs-convert-artifact-2500638590/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 20:27:50 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 20:27:50 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +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:*116f4638-9fec-4dca-b9e8-9688f62e6697,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-workflow26pvs/series-workflow26pvs-convert-artifact-2500638590/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": "b5a4590b-09f6-4f36-ba6b-4f1899b15cd0", "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-workflow26pvs/series-workflow26pvs-build-action-1769709412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:27:50 +0000 UTC FinishedAt: 2026-09-03 20:47:10 +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:*116f4638-9fec-4dca-b9e8-9688f62e6697,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-workflow26pvs/series-workflow26pvs-convert-artifact-2500638590/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": "b5a4590b-09f6-4f36-ba6b-4f1899b15cd0", "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-workflow26pvs/series-workflow26pvs-build-action-1769709412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow26pvs/series-workflow26pvs-convert-artifact-2922810801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 20:47:29 +0000 UTC FinishedAt: 2026-09-03 20:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 20:47:29 +0000 UTC FinishedAt: 2026-09-03 20:49:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5a4590b-09f6-4f36-ba6b-4f1899b15cd0,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-workflow26pvs/series-workflow26pvs-build-action-1769709412/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-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 20:49:42 +0000 UTC FinishedAt: 2026-09-03 20:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 20:49:42 +0000 UTC FinishedAt: 2026-09-03 20:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 20:49:42 +0000 UTC FinishedAt: 2026-09-03 21:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 20:49:42 +0000 UTC FinishedAt: 2026-09-03 21:10:24 +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:*116f4638-9fec-4dca-b9e8-9688f62e6697,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-workflow26pvs/series-workflow26pvs-convert-artifact-2922810801/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": "612f2577-3151-47eb-9456-9ec6bd1b7f50", "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-workflow26pvs/series-workflow26pvs-build-action-762956669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:49:42 +0000 UTC FinishedAt: 2026-09-03 21:10:14 +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:*116f4638-9fec-4dca-b9e8-9688f62e6697,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-workflow26pvs/series-workflow26pvs-convert-artifact-2922810801/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": "612f2577-3151-47eb-9456-9ec6bd1b7f50", "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-workflow26pvs/series-workflow26pvs-build-action-762956669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 21:10:24 +0000 UTC FinishedAt: 2026-09-03 21:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 21:10:24 +0000 UTC FinishedAt: 2026-09-03 21:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 21:10:24 +0000 UTC FinishedAt: 2026-09-03 21:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 21:10:24 +0000 UTC FinishedAt: 2026-09-03 21:12:22 +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:*612f2577-3151-47eb-9456-9ec6bd1b7f50,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-workflow26pvs/series-workflow26pvs-build-action-762956669/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-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 21:12:33 +0000 UTC FinishedAt: 2026-09-04 00:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 21:12:33 +0000 UTC FinishedAt: 2026-09-04 00:16:13 +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":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b5a4590b-09f6-4f36-ba6b-4f1899b15cd0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*612f2577-3151-47eb-9456-9ec6bd1b7f50,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-workflow26pvs/series-workflow26pvs-build-action-1769709412/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-workflow26pvs/series-workflow26pvs-build-action-762956669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 21:12:33 +0000 UTC FinishedAt: 2026-09-03 21:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 21:12:33 +0000 UTC FinishedAt: 2026-09-03 21:12:38 +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":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow26pvs/series-workflow26pvs-convert-artifact-853844326/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 21:12:33 +0000 UTC FinishedAt: 2026-09-03 21:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 21:12:33 +0000 UTC FinishedAt: 2026-09-03 21:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 21:12:33 +0000 UTC FinishedAt: 2026-09-03 21:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 21:12:43 +0000 UTC FinishedAt: 2026-09-04 00:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow26pvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_rmap_age_gfn_range","kvm_rmap_lock_readonly","kvm_rmap_unlock_readonly","kvm_rmap_lock","kvm_rmap_unlock","kvm_age_gfn","kvm_test_age_gfn","pte_list_add","pte_list_remove","kvm_zap_all_rmap_sptes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","PREEMPT_RT"],"series_id":"4e6cab48-8b04-4107-bacd-d2bfc8bf94eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 21:12:43 +0000 UTC FinishedAt: 2026-09-04 00:16:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5a4590b-09f6-4f36-ba6b-4f1899b15cd0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*612f2577-3151-47eb-9456-9ec6bd1b7f50,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-workflow26pvs/series-workflow26pvs-build-action-1769709412/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-workflow26pvs/series-workflow26pvs-build-action-762956669/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-workflow26pvs/series-workflow26pvs-convert-artifact-853844326/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,}