Name: series-workflow8r89m Phase: Succeeded StartedAt: 2026-07-30 01:59:51 +0000 UTC FinishedAt: 2026-07-30 06:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[0] Phase: Succeeded StartedAt: 2026-07-30 01:59:51 +0000 UTC FinishedAt: 2026-07-30 02:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 01:59:51 +0000 UTC FinishedAt: 2026-07-30 02:05:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_SCTP" ], "series_id": "aa671c46-d6db-490f-b6e6-8efd9a6088df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_checksum_common_check", "ip_vs_nat_icmp", "ip_vs_icmp_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBzdWJzeXN0ZW0uIEl0IGNoYW5nZXMgaG93IElDTVAgcGFja2V0cyBhcmUgcGFyc2VkIGFuZCBOQVQtZWQsIGFuZCBmaXhlcyBjaGVja3N1bSB2YWxpZGF0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZmY1ZjA1ZmVhYzZmYTczOGZlZGQ5ZDY1M2I3YjI4ODc0ZGNmNTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDI6MDQ6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IGU2Y2E5MzBhMzUwN2IuLjEwZjVjZTc2YTBhZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsOSAmIzQzOzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVx0XHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVx0XHRcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xuLSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC0yMDYyLDcgJiM0MzsyMDYwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxuLVx0XHQgICAgYm9vbCBoYXNfcG9ydHMpO1xuJiM0MztcdFx0ICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbkBAIC0yMDk1LDMyICYjNDM7MjA5Myw4IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4gXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4te1xuLVx0LyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovXG4tXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0LyogTE9DQUxfT1VUID8gKi9cbi1cdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdC8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqL1xuLVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVx1MDAzZXJ0NmlfZmxhZ3MgXHUwMDI2IFJURl9MT0NBTCkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXG4te1xuLVx0aWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcbi19XG4mIzQzO2Jvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBwcm90byxcbiYjNDM7XHRcdFx0XHQgaW50IGFmKTtcbiBcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCA2Yjc5ZTBjNGQ5ZTI4Li5hNTE0MThhNDQ5Y2NiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTg3Miw2ICYjNDM7ODcyLDMzIEBAIHN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4gXHRyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xuIH1cbiBcbiYjNDM7Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgaW50IHByb3RvLFxuJiM0MztcdFx0XHRcdCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRfX3dzdW0gY3N1bTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKVxuJiM0MztcdFx0Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgMCk7XG4mIzQzO1x0ZWxzZSBpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiYjNDM7XHRcdGNzdW0gPSBjc3VtX3N1Yihza2ItXHUwMDNlY3N1bSwgc2tiX2NoZWNrc3VtKHNrYiwgMCwgb2Zmc2V0LCAwKSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiYjNDM7XHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4mIzQzO1x0XHRyZXR1cm4gIWNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbiYjNDM7XHRcdFx0XHRcdHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRwcm90bywgY3N1bSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGlmIChwcm90byA9PSBJUFBST1RPX0lDTVApXG4mIzQzO1x0XHRyZXR1cm4gIWNzdW1fZm9sZChjc3VtKTtcbiYjNDM7XHRyZXR1cm4gIWNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLCBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbiYjNDM7XHRcdFx0XHQgIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIHByb3RvLCBjc3VtKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdGlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pXG5AQCAtOTI1LDI4ICYjNDM7OTUyLDI3IEBAIHN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXG4gICovXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuLVx0XHQgICAgYm9vbCBoYXNfcG9ydHMpXG4mIzQzO1x0XHQgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbi1cdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbi1cdHVuc2lnbmVkIGludCBjb2ZmIF9fbWF5YmVfdW51c2VkID0gdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xuJiM0MztcdHN0cnVjdCBpcGhkciAqY2loXHQgPSAoc3RydWN0IGlwaGRyICopKGljbXBoICYjNDM7IDEpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0XHRpcF9zZW5kX2NoZWNrKGlwaCk7XG4tXHRcdGNpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbi1cdFx0aXBfc2VuZF9jaGVjayhjaXBoKTtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuJiM0MztcdFx0aXBfc2VuZF9jaGVjayhjaWgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gXHRcdGlwX3NlbmRfY2hlY2soaXBoKTtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuLVx0XHRpcF9zZW5kX2NoZWNrKGNpcGgpO1xuJiM0MztcdFx0Y2loLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4mIzQzO1x0XHRpcF9zZW5kX2NoZWNrKGNpaCk7XG4gXHR9XG4gXG4gXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cbiBcdGlmIChoYXNfcG9ydHMpIHtcbi1cdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCAmIzQzOyBjaXBoLVx1MDAzZWlobCo0O1xuJiM0MztcdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGNpcGgtXHUwMDNlbGVuKTtcbiBcbiBcdFx0aWYgKGlub3V0KVxuIFx0XHRcdHBvcnRzWzFdID0gY3AtXHUwMDNldnBvcnQ7XG5AQCAtOTYwLDEwICYjNDM7OTg2LDEwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCYjMzQ7KTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG5AQCAtMTA1Niw3ICYjNDM7MTA4Miw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cyk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTIsNyAmIzQzOzExMTgsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG4gXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XG4gXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLVx0dW5zaWduZWQgaW50IG9mZnNldCwgaWhsO1xuJiM0MztcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbkBAIC0xMTA1LDcgJiM0MzsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aWhsID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG5AQCAtMTEzMSwxMSAmIzQzOzExNTYsMTUgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpO1xuJiM0MztcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4mIzQzO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbiYjNDM7XHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgY2lwaC5sZW4gLSBjaXBoLm9mZiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4gXG4tXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXHUwMDNlcHJvdG9jb2wpO1xuJiM0MztcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpcGgucHJvdG9jb2wpO1xuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbkBAIC0xMTQ2LDggJiM0MzsxMTc1LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbiBcdFx0ICAgICAgXCYjMzQ7Q2hlY2tpbmcgb3V0Z29pbmcgSUNNUCBmb3JcJiMzNDspO1xuIFxuLVx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpO1xuLVxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlciAqL1xuIFx0Y3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtXHUwMDNlY29ubl9vdXRfZ2V0LCBpcF92c19jb25uX291dF9nZXRfcHJvdG8sXG4gXHRcdFx0ICAgICBpcHZzLCBBRl9JTkVULCBza2IsIFx1MDAyNmNpcGgpO1xuQEAgLTExNTUsOCAmIzQzOzExODIsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pcCA9IGlwdnNoLVx1MDAzZXNhZGRyLmlwO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLCBpaGwsXG4tXHRcdFx0XHQgICAgaG9va251bSk7XG4mIzQzO1x0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xODAzLDEwICYjNDM7MTgzMCwxMiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTtcbiBcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4mIzQzO1x0aWYgKCFjaWgpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuLVx0cmFkZHIgPSAodW5pb24gbmZfaW5ldF9hZGRyICopXHUwMDI2Y2loLVx1MDAzZWRhZGRyO1xuIFx0aGxlbl9pcGlwID0gY2loLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0aWYgKCEoY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgaGxlbl9pcGlwIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4mIzQzO1x0cmFkZHIgPSAodW5pb24gbmZfaW5ldF9hZGRyICopXHUwMDI2Y2loLVx1MDAzZWRhZGRyO1xuIFxuIFx0LyogU3BlY2lhbCBjYXNlIGZvciBlcnJvcnMgZm9yIElQSVAvVURQL0dSRSB0dW5uZWwgcGFja2V0cyAqL1xuIFx0dHVubmVsID0gZmFsc2U7XG5AQCAtMTgyMyw5ICYjNDM7MTg1Miw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdFx0aWYgKCFkZXN0IHx8IGRlc3QtXHUwMDNldHVuX3R5cGUgIT0gSVBfVlNfQ09OTl9GX1RVTk5FTF9UWVBFX0lQSVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0b2Zmc2V0ICYjNDM7PSBobGVuX2lwaXA7XG4tXHRcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0XHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbi1cdFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcdFx0dHVubmVsID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAoKGNpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFx0LyogQ2FuIGJlIFVEUCBlbmNhcCAqL1xuIFx0XHQgICAgY2loLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fR1JFKSBcdTAwMjZcdTAwMjZcdC8qIENhbiBiZSBHUkUgZW5jYXAgKi9cbkBAIC0xODUwLDIxICYjNDM7MTg3NiwyNSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRcdFx0LyogU2tpcCBJUCBhbmQgVURQL0dSRSB0dW5uZWwgaGVhZGVycyAqL1xuIFx0XHRcdG9mZnNldCA9IG9mZnNldDIgJiM0MzsgdWxlbjtcbiBcdFx0XHQvKiBOb3cgd2Ugc2hvdWxkIGJlIGF0IHRoZSBvcmlnaW5hbCBJUCBoZWFkZXIgKi9cbi1cdFx0XHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksXG4tXHRcdFx0XHRcdFx0IFx1MDAyNl9jaXBoKTtcbi1cdFx0XHRpZiAoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaXByb3RvID09IElQUFJPVE9fSVBJUClcbiYjNDM7XHRcdFx0aWYgKGlwcm90byA9PSBJUFBST1RPX0lQSVApXG4gXHRcdFx0XHR0dW5uZWwgPSB0cnVlO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQoaXB2cywgY2loLVx1MDAzZXByb3RvY29sKTtcbiYjNDM7XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCBcdTAwMjZjaXBoKSlcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1x0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaXBoLnByb3RvY29sKTtcbiBcdGlmICghcGQpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRwcCA9IHBkLVx1MDAzZXBwO1xuIFxuJiM0MztcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuJiM0MztcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBjaXBoLmxlbiAtIGNpcGgub2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4mIzQzO1xuIFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuIFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbkBAIC0xODcyLDkgJiM0MzsxOTAyLDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxuIFx0XHQgICAgICBcJiMzNDtDaGVja2luZyBpbmNvbWluZyBJQ01QIGZvclwmIzM0Oyk7XG4gXG4tXHRvZmZzZXQyID0gb2Zmc2V0O1xuLVx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cbiBcdCAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuXG4gXHQgKi9cbkBAIC0xOTA0LDExICYjNDM7MTkzMSwxMiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR9XG4gXG4gXHRpZiAodHVubmVsKSB7XG4tXHRcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaWgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaXBoLmxlbiAtIGNpcGgub2ZmO1xuIFx0XHRfX2JlMzIgaW5mbyA9IGljLVx1MDAzZXVuLmdhdGV3YXk7XG4gXHRcdF9fdTggdHlwZSA9IGljLVx1MDAzZXR5cGU7XG4gXHRcdF9fdTggY29kZSA9IGljLVx1MDAzZWNvZGU7XG4gXG4mIzQzO1x0XHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0XHQvKiBVcGRhdGUgdGhlIE1UVSAqL1xuIFx0XHRpZiAoaWMtXHUwMDNldHlwZSA9PSBJQ01QX0RFU1RfVU5SRUFDSCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGljLVx1MDAzZWNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXG5pbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTE5Myw3ICYjNDM7MTkzLDcgQEAgc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdHN0cnVjdCBzY3RwaGRyICpzaDtcbiBcdF9fbGUzMiBjbXAsIHZhbDtcbiBcbi1cdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCAwYjBjNTMwNDk5M2E5Li5jNDUwOGYzZjQzZGQzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1ODAsNyAmIzQzOzE1ODAsNyBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0aWYgKHNrYl9jb3coc2tiLCBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4tXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzKTtcbiYjNDM7XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwYXJzZWQgYW5kIE5BVC1lZCwgYW5kIGZpeGVzIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmZjVmMDVmZWFjNmZhNzM4ZmVkZDlkNjUzYjdiMjg4NzRkY2Y1MGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMjowNDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IGU2Y2E5MzBhMzUwN2IuLjEwZjVjZTc2YTBhZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMjUsOSAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIuaCZndDsJCS8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi8KICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsJCQkvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi8KLSNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9pcDZfZmliLmgmZ3Q7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKQogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgmZ3Q7CiAjZW5kaWYKQEAgLTIwNjIsNyAmIzQzOzIwNjAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLAotCQkgICAgYm9vbCBoYXNfcG9ydHMpOwomIzQzOwkJICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpOwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKQEAgLTIwOTUsMzIgJiM0MzsyMDkzLDggQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSkKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpCi17Ci0JLyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovCi0JaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCi0JCXJldHVybiBmYWxzZTsKLQkvKiBMT0NBTF9PVVQgPyAqLwotCWlmICghc2tiLSZndDtkZXYgfHwgc2tiLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9MT09QQkFDSykKLQkJcmV0dXJuIGZhbHNlOwotCS8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqLwotCWlmIChhZiA9PSBBRl9JTkVUNikgewotCQlpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS0mZ3Q7cnQ2aV9mbGFncyAmYW1wOyBSVEZfTE9DQUwpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCWlmICghKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZikKLXsKLQlpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTsKLX0KJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sCiYjNDM7CQkJCSBpbnQgYWYpOwogCiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCA2Yjc5ZTBjNGQ5ZTI4Li5hNTE0MThhNDQ5Y2NiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg3Miw2ICYjNDM7ODcyLDMzIEBAIHN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiAJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKSk7CiB9CiAKJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sCiYjNDM7CQkJCSBpbnQgYWYpCiYjNDM7ewomIzQzOwlfX3dzdW0gY3N1bTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpCiYjNDM7CQljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItJmd0O2xlbiAtIG9mZnNldCwgMCk7CiYjNDM7CWVsc2UgaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKQomIzQzOwkJY3N1bSA9IGNzdW1fc3ViKHNrYi0mZ3Q7Y3N1bSwgc2tiX2NoZWNrc3VtKHNrYiwgMCwgb2Zmc2V0LCAwKSk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVDYpCiYjNDM7CQlyZXR1cm4gIWNzdW1faXB2Nl9tYWdpYygmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyLAomIzQzOwkJCQkJJmFtcDtpcHY2X2hkcihza2IpLSZndDtkYWRkciwKJiM0MzsJCQkJCXNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LAomIzQzOwkJCQkJcHJvdG8sIGNzdW0pOwomIzQzOyNlbmRpZgomIzQzOwlpZiAocHJvdG8gPT0gSVBQUk9UT19JQ01QKQomIzQzOwkJcmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7CiYjNDM7CXJldHVybiAhY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLCBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCiYjNDM7CQkJCSAgc2tiLSZndDtsZW4gLSBvZmZzZXQsIHByb3RvLCBjc3VtKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKQogewogCWlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pCkBAIC05MjUsMjggJiM0Mzs5NTIsMjcgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwKICAqLwogdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLAotCQkgICAgYm9vbCBoYXNfcG9ydHMpCiYjNDM7CQkgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCkKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaAkgPSBpcF9oZHIoc2tiKTsKIAlzdHJ1Y3QgaWNtcGhkciAqaWNtcGgJID0gKHN0cnVjdCBpY21waGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyB0b2ZmKTsKLQlzdHJ1Y3QgaXBoZHIgKmNpcGgJID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTsKLQl1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTsKJiM0MzsJc3RydWN0IGlwaGRyICpjaWgJID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTsKIAogCWlmIChpbm91dCkgewogCQlpcGgtJmd0O3NhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwogCQlpcF9zZW5kX2NoZWNrKGlwaCk7Ci0JCWNpcGgtJmd0O2RhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwotCQlpcF9zZW5kX2NoZWNrKGNpcGgpOwomIzQzOwkJY2loLSZndDtkYWRkciA9IGNwLSZndDt2YWRkci5pcDsKJiM0MzsJCWlwX3NlbmRfY2hlY2soY2loKTsKIAl9IGVsc2UgewogCQlpcGgtJmd0O2RhZGRyID0gY3AtJmd0O2RhZGRyLmlwOwogCQlpcF9zZW5kX2NoZWNrKGlwaCk7Ci0JCWNpcGgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmlwOwotCQlpcF9zZW5kX2NoZWNrKGNpcGgpOwomIzQzOwkJY2loLSZndDtzYWRkciA9IGNwLSZndDtkYWRkci5pcDsKJiM0MzsJCWlwX3NlbmRfY2hlY2soY2loKTsKIAl9CiAKIAkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KIAlpZiAoaGFzX3BvcnRzKSB7Ci0JCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKWNpcGggJiM0MzsgY2lwaC0mZ3Q7aWhsKjQ7CiYjNDM7CQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O2xlbik7CiAKIAkJaWYgKGlub3V0KQogCQkJcG9ydHNbMV0gPSBjcC0mZ3Q7dnBvcnQ7CkBAIC05NjAsMTAgJiM0Mzs5ODYsMTAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAlpZiAoaW5vdXQpCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLSZndDtvZmYsCiAJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QJiMzNDspOwogCWVsc2UKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZiwKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVAmIzM0Oyk7CiB9CiAKQEAgLTEwNTYsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7CiAJZWxzZQogI2VuZGlmCi0JCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMpOwomIzQzOwkJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7CiAKIAlpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLSZndDtpcHZzLCBhZiwgc2tiLCBob29rbnVtKSkKIAkJZ290byBvdXQ7CkBAIC0xMDkyLDcgJiM0MzsxMTE4LDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7CiAJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpaGw7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7CiAKIAkqcmVsYXRlZCA9IDE7CkBAIC0xMTA1LDcgJiM0MzsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCi0JaWhsID0gaXB2c2gtJmd0O2xlbjsKIAlvZmZzZXQgPSBpcHZzaC0mZ3Q7bGVuOwogCWljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwogCWlmIChpYyA9PSBOVUxMKQpAQCAtMTEzMSwxMSAmIzQzOzExNTYsMTUgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCS8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovCiAJb2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTsKJiM0MzsJaWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgdHJ1ZSwgJmFtcDtjaXBoKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqLwomIzQzOwogCWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7Ci0JaWYgKCEoY2loICZhbXA7JmFtcDsgY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBjaWgtJmd0O2lobCAmZ3Q7PSA1KSkKJiM0MzsJaWYgKCEoY2loICZhbXA7JmFtcDsgY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOwomIzQzOwkgICAgICBjaXBoLmxlbiAtIGNpcGgub2ZmICZndDs9IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAKLQlwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtJmd0O3Byb3RvY29sKTsKJiM0MzsJcHAgPSBpcF92c19wcm90b19nZXQoY2lwaC5wcm90b2NvbCk7CiAJaWYgKCFwcCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIApAQCAtMTE0Niw4ICYjNDM7MTE3NSw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LAogCQkgICAgICAmIzM0O0NoZWNraW5nIG91dGdvaW5nIElDTVAgZm9yJiMzNDspOwogCi0JaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsICZhbXA7Y2lwaCk7Ci0KIAkvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovCiAJY3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtJmd0O2Nvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLAogCQkJICAgICBpcHZzLCBBRl9JTkVULCBza2IsICZhbXA7Y2lwaCk7CkBAIC0xMTU1LDggJiM0MzsxMTgyLDggQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCXNuZXQuaXAgPSBpcHZzaC0mZ3Q7c2FkZHIuaXA7Ci0JcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwgaWhsLAotCQkJCSAgICBob29rbnVtKTsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwKJiM0MzsJCQkJICAgIGlwdnNoLSZndDtsZW4sIGhvb2tudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTE4MDMsMTAgJiM0MzsxODMwLDEyIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAkvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqLwogCW9mZnNldCAmIzQzOz0gc2l6ZW9mKF9pY21waCk7CiAJY2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCAmYW1wO19jaXBoKTsKLQlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQomIzQzOwlpZiAoIWNpaCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCi0JcmFkZHIgPSAodW5pb24gbmZfaW5ldF9hZGRyICopJmFtcDtjaWgtJmd0O2RhZGRyOwogCWhsZW5faXBpcCA9IGNpaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWYgKCEoY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBobGVuX2lwaXAgJmd0Oz0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiYjNDM7CXJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKSZhbXA7Y2loLSZndDtkYWRkcjsKIAogCS8qIFNwZWNpYWwgY2FzZSBmb3IgZXJyb3JzIGZvciBJUElQL1VEUC9HUkUgdHVubmVsIHBhY2tldHMgKi8KIAl0dW5uZWwgPSBmYWxzZTsKQEAgLTE4MjMsOSAmIzQzOzE4NTIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJCWlmICghZGVzdCB8fCBkZXN0LSZndDt0dW5fdHlwZSAhPSBJUF9WU19DT05OX0ZfVFVOTkVMX1RZUEVfSVBJUCkKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiAJCW9mZnNldCAmIzQzOz0gaGxlbl9pcGlwOwotCQljaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksICZhbXA7X2NpcGgpOwotCQlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQotCQkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAJCXR1bm5lbCA9IHRydWU7CiAJfSBlbHNlIGlmICgoY2loLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAkvKiBDYW4gYmUgVURQIGVuY2FwICovCiAJCSAgICBjaWgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fR1JFKSAmYW1wOyZhbXA7CS8qIENhbiBiZSBHUkUgZW5jYXAgKi8KQEAgLTE4NTAsMjEgJiM0MzsxODc2LDI1IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAkJCS8qIFNraXAgSVAgYW5kIFVEUC9HUkUgdHVubmVsIGhlYWRlcnMgKi8KIAkJCW9mZnNldCA9IG9mZnNldDIgJiM0MzsgdWxlbjsKIAkJCS8qIE5vdyB3ZSBzaG91bGQgYmUgYXQgdGhlIG9yaWdpbmFsIElQIGhlYWRlciAqLwotCQkJY2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLAotCQkJCQkJICZhbXA7X2NpcGgpOwotCQkJaWYgKGNpaCAmYW1wOyZhbXA7IGNpaC0mZ3Q7dmVyc2lvbiA9PSA0ICZhbXA7JmFtcDsgY2loLSZndDtpaGwgJmd0Oz0gNSAmYW1wOyZhbXA7Ci0JCQkgICAgaXByb3RvID09IElQUFJPVE9fSVBJUCkKJiM0MzsJCQlpZiAoaXByb3RvID09IElQUFJPVE9fSVBJUCkKIAkJCQl0dW5uZWwgPSB0cnVlOwogCQkJZWxzZQogCQkJCXJldHVybiBORl9BQ0NFUFQ7CiAJCX0KIAl9CiAKLQlwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KGlwdnMsIGNpaC0mZ3Q7cHJvdG9jb2wpOwomIzQzOwlpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCAmYW1wO2NpcGgpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsJcGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaXBoLnByb3RvY29sKTsKIAlpZiAoIXBkKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCXBwID0gcGQtJmd0O3BwOwogCiYjNDM7CWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7CiYjNDM7CWlmICghKGNpaCAmYW1wOyZhbXA7IGNpaC0mZ3Q7dmVyc2lvbiA9PSA0ICZhbXA7JmFtcDsKJiM0MzsJICAgICAgY2lwaC5sZW4gLSBjaXBoLm9mZiAmZ3Q7PSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi8KJiM0MzsKIAkvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovCiAJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtMTg3Miw5ICYjNDM7MTkwMiw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsCiAJCSAgICAgICYjMzQ7Q2hlY2tpbmcgaW5jb21pbmcgSUNNUCBmb3ImIzM0Oyk7CiAKLQlvZmZzZXQyID0gb2Zmc2V0OwotCWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCAmYW1wO2NpcGgpOwotCiAJLyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci4KIAkgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LgogCSAqLwpAQCAtMTkwNCwxMSAmIzQzOzE5MzEsMTIgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCX0KIAogCWlmICh0dW5uZWwpIHsKLQkJdW5zaWduZWQgaW50IGhsZW5fb3JpZyA9IGNpaC0mZ3Q7aWhsICogNDsKJiM0MzsJCXVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaXBoLmxlbiAtIGNpcGgub2ZmOwogCQlfX2JlMzIgaW5mbyA9IGljLSZndDt1bi5nYXRld2F5OwogCQlfX3U4IHR5cGUgPSBpYy0mZ3Q7dHlwZTsKIAkJX191OCBjb2RlID0gaWMtJmd0O2NvZGU7CiAKJiM0MzsJCW9mZnNldDIgPSBvZmZzZXQ7CiAJCS8qIFVwZGF0ZSB0aGUgTVRVICovCiAJCWlmIChpYy0mZ3Q7dHlwZSA9PSBJQ01QX0RFU1RfVU5SRUFDSCAmYW1wOyZhbXA7CiAJCSAgICBpYy0mZ3Q7Y29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwppbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTE5Myw3ICYjNDM7MTkzLDcgQEAgc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7CiAJX19sZTMyIGNtcCwgdmFsOwogCi0JaWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpCiYjNDM7CWlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKQogCQlyZXR1cm4gMTsKIAlzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2N0cGhvZmYpOwogCWNtcCA9IHNoLSZndDtjaGVja3N1bTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCmluZGV4IDBiMGM1MzA0OTkzYTkuLmM0NTA4ZjNmNDNkZDMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtMTU4MCw3ICYjNDM7MTU4MCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJaWYgKHNrYl9jb3coc2tiLCBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAotCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpOwomIzQzOwlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTsKIAogCS8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovCiAJc2tiLSZndDtpZ25vcmVfZGYgPSAxOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBJUFZTIElDTVAgTkFUIGFuZCBDaGVja3N1bSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgSVBWUyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNgIGFuZCBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY2AsIHdpdGggc29tZSBtaW5vciB0b3VjaGVzIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jYCBhbmQgYGluY2x1ZGUvbmV0L2lwX3ZzLmhgLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIElDTVAgTkFUIGlzc3VlcyB3aXRoaW4gSVBWUywgdGhlIElQIFZpcnR1YWwgU2VydmVyIGNvbXBvbmVudC4gVGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcvbmV0ZmlsdGVyIHNwYWNlLCBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIE5BVCBhbmQgY2hlY2tzdW1zLCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIHBhY2tldCBtYW5pcHVsYXRpb24uCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlbGV2YW50KiB0byBmdXp6aW5nPyBXZWxsLCBkdWghIElQVlMgaXMgYSBsb2FkIGJhbGFuY2VyIHRoYXQmIzM5O3MgYWJzb2x1dGVseSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JrIHBhY2tldHMsIGhlYXZpbHkgdXNlZCBpbiByZWFsLXdvcmxkIGRlcGxveW1lbnRzLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHBhY2tldCBwYXJzaW5nIGFuZCBOQVQgbG9naWMgZGlyZWN0bHksIGFuZCBJQ01QIHBhcnNpbmcgaXMgKm5vdG9yaW91cyogZm9yIGJlaW5nIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgdGFyZ2V0LgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgdG8gYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gVGhvc2UgZnVuY3Rpb25zIGFyZSBrZXksIHNvIEkmIzM5O2xsIGJlIGtlZXBpbmcgYSBjbG9zZSBleWUgb24gdGhvc2UuIEVzcGVjaWFsbHkgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYW5kIGBpcF92c19pY21wX3htaXRgIGFyZSBteSBmb2N1cyBzeW1ib2xzLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIElQVlMuIFVzdWFsbHksIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIGBDT05GSUdfSVBfVlNgLiBUaW1lIHRvIHJ1biBhIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjb25maXJtLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyBmb3IgcHJvcGVyIGJ1aWxkIGFuZCBmdXp6IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgSVBfVlNgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBJUF9WU2Agbm93LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIGp1c3QgdGhlIG9idmlvdXMga2VybmVsIG1vZHVsZXMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbmV0d29yayBzdGFjayBmZWF0dXJlcywgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgb3Igcm91dGluZyB0aGF0IGl0IHJlbGllcyB1cG9uPyBJIGFsc28gbmVlZCB0byBjb25zaWRlciB1c2VyLXNwYWNlIHRvb2xzLiBEb2VzIGBpcHZzYWRtYCBoYXZlIGFueSBub24tb2J2aW91cyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGZ1bmN0aW9uYWxpdHkgb3IgY29uZmlndXJhdGlvbj8gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSB0byB0cnVseSB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBlY29zeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgY29uZmxpY3RzIGNvdWxkIGFyaXNlIGlmIHRoaXMgbW9kdWxlIG9yIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG5vdCB3b3JraW5nIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTU9bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODpcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjk9Y29uZmlnXHRJUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzM3PWNvbmZpZ1x0SVBfVlNfTkZDVFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzM5Olx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0MC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0OS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNTI9Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBmb3IgSVBWU1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzU0Olx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaXMgdGhhdCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBgSVBfVlNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpbXBsaWVkIGJ5IHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoaXMgcGF0Y2ggYWxzbyBpbnZvbHZlcyBJUHY2IGNvZGU7IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IGAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZgLCBhcmUgcHJldHR5IGV4cGxpY2l0IGFib3V0IHRoYXQuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byB3YW50IGBJUF9WU19JUFY2YCBkZWZpbmVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCB3YWl0LCBJJiMzOTttIHNlZWluZyB0aGlzIGFsc28gdG91Y2hlcyBgaXBfdnNfcHJvdG9fc2N0cC5jYCEgUmlnaHQsIFNDVFAsIGludGVyZXN0aW5nLiBTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlJiMzOTtsbCByZXF1aXJlIGBJUF9WU19QUk9UT19TQ1RQYCB0b28uIExldCBtZSBjb25maXJtIHRoYXQgZXhpc3RzLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIG5lZWQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlNfUFJPVE9fU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpZ2dpbmcgaW50byBJUFZTIGFuZCBTQ1RQIFN1cHBvcnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFNDVFAgKFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCkgYW5kIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLCBpcyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGVzLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgYnVpbGQtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIFRoZSBkaXJlY3RvcnkgYG5ldC9uZXRmaWx0ZXIvaXB2c2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgSVBWUyBsaXZlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gaXQgKnNob3VsZCogYmUgaW4gdGhlcmUuIFNvLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IFNDVFAgc3VwcG9ydC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGhvcGluZyBmb3Igc29tZSBkaXJlY3QgcmVmZXJlbmNlcywgcGVyaGFwcyBhIGBjb25maWdgIG9wdGlvbiBvciBzb21lIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLi4uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMDA9Y29uZmlnXHRJUF9WU19QUk9UT19BSFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNzpcdGJvb2wgXCYjMzQ7U0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDgtXHRzZWxlY3QgTkVUX0NSQzMyQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA5LVx0aGVscFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTEwOlx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFNDVFAgdHJhbnNwb3J0XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTEtXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKklQVlMgU0NUUCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLiBBbmQgaW1tZWRpYXRlbHksIEkmIzM5O20gYWxyZWFkeSBzcG90dGluZyBhIG1pbm9yIGNvZGUgc3R5bGUgaXNzdWUg4oCTIHRoYXQgZG91YmxlIHNwYWNlIGFmdGVyIGBjb25maWdgLiBBbHdheXMgc29tZXRoaW5nLCBpc24mIzM5O3QgdGhlcmU/CgpNeSBicmFpbiYjMzk7cyBhbHJlYWR5IGdvaW5nIGRvd24gdGhlIGNoZWNrbGlzdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzbyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgY29yZSBvZiB0aGUgSVBWUyBTQ1RQIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb25zIGluIGJvdGggYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNgIGZvciBzZXR1cCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGFuZCBhbHNvIHBlZWsgYXQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB0cmFuc21pc3Npb24gbG9naWMuIEkgd2FudCB0byBzZWUgaG93IFNDVFAgdHJhZmZpYyBpcyBiZWluZyBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGFuZGFyZCBJUFZTIGZyYW1ld29yay4gSSBzdXNwZWN0IHRoZXJlIG1heSBoYXZlIGJlZW4gdHdlYWtzIG5lY2Vzc2FyeSBnaXZlbiB0aGUgaW5oZXJlbnQgY29tcGxleGl0aWVzIG9mIFNDVFAmIzM5O3MgbXVsdGktaG9taW5nIGFuZCBtdWx0aS1zdHJlYW0gbmF0dXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHR3ZWFrcyBhcmUgaW1wbGVtZW50ZWQgc2FmZWx5IGFuZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKmlwX3ZzXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04OT1jb25zdCBjaGFyICppcF92c19wcm90b19uYW1lKHVuc2lnbmVkIGludCBwcm90bylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExMy1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTE0OnZvaWQgaXBfdnNfaW5pdF9oYXNoX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKnRhYmxlLCBpbnQgcm93cylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTE1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTYxOnZvaWQgaXBfdnNfcmh0X2ZyZWUoc3RydWN0IGlwX3ZzX3JodCAqdClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY5OnZvaWQgaXBfdnNfcmh0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTcwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE3Nz1zdHJ1Y3QgaXBfdnNfcmh0ICppcF92c19yaHRfYWxsb2MoaW50IGJ1Y2tldHMsIGludCBzY291bnRzLCBpbnQgbG9ja3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNTppbnQgaXBfdnNfcmh0X2Rlc2lyZWRfc2l6ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IG4sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNi1cdFx0XHQgICBpbnQgbGZhY3RvciwgaW50IG1pbl9iaXRzLCBpbnQgbWF4X2JpdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNjMtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI2NDp2b2lkIGlwX3ZzX3JodF9zZXRfdGhyZXNob2xkcyhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBpbnQgc2l6ZSwgaW50IGxmYWN0b3IsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI2NS1cdFx0XHQgICAgICBpbnQgbWluX2JpdHMsIGludCBtYXhfYml0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTc0OD1zdGF0aWMgaW5saW5lIGludCBpcF92c19hZGRyX2lzX3VuaWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBpbnQgYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NjItICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjc2MzppbnQgaXBfdnNfbGVhdmUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzY0LVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODcwPXN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjg3NTpib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3Ni1cdFx0XHRcdCBpbnQgYWYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05MjU9c3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk1Mi0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6OTUzOnZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTU0LVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk2LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5OTc6dm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05OTgtXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQ0MjppbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDcwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDcxOnZvaWQgaXBfdnNfdW5yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGFmKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBlbGVtZW50cywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkluaXRpYWwgRnVuY3Rpb24gQnJlYWtkb3duIGFuZCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSBzZWVpbmc6IGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBjbGVhcmx5IHJlbGF0ZWQgdG8gY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBjb21tb24gdG8gdGhlIElQIFZpcnR1YWwgU2VydmVyLiBOZXh0LCB3ZSBoYXZlIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGFuZCBgaXBfdnNfb3V0X2ljbXBgLiBUaGVzZSBzdHJvbmdseSBzdWdnZXN0IE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBvcGVyYXRpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIElDTVAgcGFja2V0cywgYW5kIHRoZSB2NiB2YXJpYW50IGluZGljYXRlcyBJUHY2IGhhbmRsaW5nLiBgaXBfdnNfb3V0X2ljbXBgIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RhdGljYWxseSBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGEgZml4ZWQgcGFydCBvZiB0aGUgY29yZSBmdW5jdGlvbi4gSSB3b25kZXIgd2hhdCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZT8gTm93LCB0aGUgY3VyaW91cyBvbmUgaXMgYGlwX3ZzX2luX2ljbXBgLiBJcyB0aGlzIGZ1bmN0aW9uIGFsc28gc3RhdGljYWxseSBkZWZpbmVkLCBvciBpcyBpdCBkeW5hbWljYWxseSBib3VuZD8gTGV0JiMzOTtzIHZlcmlmeSBpZiB0aGVyZSBpcyBhbnkgZHluYW1pYyBuYXR1cmUgdG8gaXRzIGFwcGxpY2F0aW9uLiBJIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGNvbmNlcm5pbmcgaW5jb21pbmcgSUNNUCB0cmFmZmljIGluIHRoZSBjb250ZXh0IG9mIElQVlMuIEkgYXNzdW1lIHRoaXMgd291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBhdHRhY2sgZm9yIG1hbGljaW91cyBhY3RvcnMsIHNvIHByb3BlciBpbnNwZWN0aW9uIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzc5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTc4MDppcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE3ODEtXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDA5LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDEwOnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjAxMS1cdFx0XHQgICAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMTY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTY1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTY2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNjctXHRcdFx0XHRcdFx0ICAgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTc1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTc2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNzctXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzEwLSAqICAgICAgYnV0IElDTVAgZGVzdGluZWQgZm9yIDAuMC4wLjAvMCBjYW5ub3Qgbm90IGJlIGVhc2lseSBtYXJrZWQgYW5kXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTE6ICogICAgICBzZW50IHRvIGlwX3ZzX2luX2ljbXAuIFNvLCBjYXRjaCB0aGVtIGF0IHRoZSBORl9JTkVUX0ZPUldBUkQgY2hhaW5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMxMjogKiAgICAgIGFuZCBzZW5kIHRoZW0gdG8gaXBfdnNfaW5faWNtcC5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMxMy0gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMTU9aXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzM2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzM3Olx0XHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMzOC0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNDAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNDE6XHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJQ01QIEhhbmRsaW5nIGluIElQVlMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBJQ01QLXJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgYGlwX3ZzX2luX2ljbXBgIGFuZCBgaXBfdnNfb3V0X2ljbXBgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBnZW5lcmFsbHkgaW5kaWNhdGVzIHRoZXkmIzM5O3JlIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIFRoYXQgc3VnZ2VzdHMgdGhleSYjMzk7cmUgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGNvcmUgbG9naWMuCgpOb3csIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgaWYgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIElDTVAgcHJvY2Vzc2luZyBwaXBlbGluZS4KCkdpdmVuIHRoZSBvcHRpb25zLCBteSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgaXBfdnNfaWNtcF94bWl0YCwgd2hpY2ggSSBzZWUgcmVzaWRlcyBpbiBgaXBfdnNfeG1pdC5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBpcF92c19pY21wX3htaXRgIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiBJQ01QIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gd2lsbCBkZWZpbml0ZWx5IGJlIGEgcHJpbWFyeSBmb2N1cyBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1MDM9aW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1MDQ6aXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTUwNS1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNTk3PWludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoxNTk4OmlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE1OTktXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkNoZWNraW5nIHRoZSBTQ1RQIENoZWNrc3VtIFZlcmlmaWNhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBTQ1RQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzY3RwX2NzdW1fY2hlY2tgIGZ1bmN0aW9uLiBJIGltYWdpbmUgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBJUFZTIHV0aWxpemVzIFNDVFAgZm9yIGxvYWQgYmFsYW5jaW5nLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IGl0IHZhbGlkYXRlcyB0aGUgY2hlY2tzdW0gdG8gZGV0ZXJtaW5lIHBhY2tldCBpbnRlZ3JpdHkgYXMgaXQgcmVsYXRlcyB0byB0aGUgdmlydHVhbCBzZXJ2ZXImIzM5O3MgZnVuY3Rpb24uIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBjaGVja3N1bSBlcnJvcnMgYW5kIGlmIHRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IElQVlMgaGFuZGxlcyBTQ1RQIHRyYWZmaWMgaW4gdGhlIGNvbnRleHQgb2YgbG9hZCBiYWxhbmNpbmcuIFRoaXMgbWlnaHQgYmUgYSByZWZyZXNoZXIgYnV0IGl0IGFsd2F5cyBoZWxwcyB0byBkb3VibGUgY2hlY2sgdGhlc2UgYXNwZWN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBTQ1RQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiB0aGUgSVBWUyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxMzpzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNC1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExMS1cdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjExMjpcdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExMy1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTU5LVx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTYwOlx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTYxLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTg4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTg5OnNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE5MC1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTQ1RQIENoZWNrc3VtIEhhbmRsaW5nIGluIElQVlMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IFNDVFAgY2hlY2tzdW1zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGNvZGUuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc2N0cF9jc3VtX2NoZWNrYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBteSBmb2N1cy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGFuZCBoYW5kbGluZy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWF5IGFsc28gYmUgcmVsZXZhbnQuIEdvb2QsIGNvbmZpcm1lZCwgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBpbmRlZWQgbm9uLXN0YXRpYy4KCk5vdywgSSYjMzk7bSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc3RhdGljIG5hdHVyZSBvZiBhIGZldyByZWxhdGVkIGZ1bmN0aW9ucy4gYGlwX3ZzX2luX2ljbXBgIGlzIHN0YXRpYy4gYGlwX3ZzX291dF9pY21wYCBpcyBhbHNvIHN0YXRpYy4gUGVyZmVjdC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgSVBWUy4gSSYjMzk7dmUgZm91bmQgdGhhdCBgSVBfVlNgIGl0c2VsZiBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYC4gYElQX1ZTX0lQVjZgIHJlcXVpcmVzIGBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZgLiBgSVBfVlNfUFJPVE9fU0NUUGAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIGJleW9uZCBgSVBfVlNgLiBUaGlzIGlzIHVzZWZ1bCwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIG1ha2UgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZlYXR1cmVzIG11Y2ggbW9yZSBzdHJhaWdodCBmb3J3YXJkLgoKVGhlcmVmb3JlLCB0byBlbmFibGUgU0NUUCBzdXBwb3J0LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCwgY3J1Y2lhbGx5LCBgSVBfVlNfUFJPVE9fU0NUUGAuIEkmIzM5O2xsIHdhbnQgdG8gdmVyaWZ5IHRoaXMgZmluYWwgb3B0aW9uLCBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbjoKCioqRXhhbWluaW5nIHRoZSBTQ1RQIExvYWQgQmFsYW5jaW5nIE9wdGlvbioqCgpBbHJpZ2h0LCBJIHJlbWVtYmVyIHNlYXJjaGluZyBmb3IgJiMzNDtTQ1RQJiMzNDsgbm90IHRvbyBsb25nIGFnbywgYW5kIEkgY2FtZSBhY3Jvc3MgdGhhdCBgY29uZmlnIElQX1ZTX1BST1RPX1NDVFBgIGVudHJ5LiBBIHF1aWNrIHZpc3VhbCBjaGVjaywgYW5kIEkgbm90aWNlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGluZSB1c2VzIHR3byBzcGFjZXMgYWZ0ZXIgYGNvbmZpZ2AuIEkgd2lsbCBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIGFkZHJlc3MgdGhpcyBpbiBteSBzdHlsZSBndWlkZWxpbmVzLgoKTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaXRzIGRlcGVuZGVuY2llcy4gSXMgdGhpcyBgSVBfVlNfUFJPVE9fU0NUUGAgb3B0aW9uIGNvbnRpbmdlbnQgdXBvbiBgSVBfU0NUUGAgYmVpbmcgZW5hYmxlZD8gT3IgcGVyaGFwcyBzb21lIG90aGVyIHJlbGF0ZWQgbW9kdWxlPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IGNvbmZpZ3VyaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWRpbmcgYW55IGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMDA9Y29uZmlnXHRJUF9WU19QUk9UT19BSFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7U0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBoYXZlIGhlcmUuCgoqKklQVlMgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpIbW0sIGJhc2VkIG9uIHRoaXMgaW5pdGlhbCBnbGFuY2UsIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSB0aGlzIGNoYW5nZSBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgSVBfU0NUUGAgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcsIHNvIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggbW9kaWZpZWQgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c194bWl0LmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3NjdHAuY2AuIFRob3NlIGZpbGVzIGFyZSBhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBgSVBfVlNgIHN1YnN5c3RlbS4gVGhhdCByZWluZm9yY2VzIHRoZSBpbml0aWFsIGFzc3VtcHRpb24sIGJ1dCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKTm93LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBNYWtlZmlsZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9gLiBJIHdhbnQgdG8gdmVyaWZ5IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGVzZSBmaWxlcyB0byBgSVBfVlNgLiBUaGlzIHNob3VsZCBkZWZpbml0aXZlbHkgc2V0dGxlIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfcHJvdG9fc2N0cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTA9aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICYjNDM7PSBpcF92c19wcm90b19haF9lc3Aub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjExOmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3NjdHAub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKk5hdmlnYXRpbmcgdGhlIElQVlMgU0NUUCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBg4oCUdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHNldHRpbmcgbG9va3MgcmlnaHQgb24gdGhlIHN1cmZhY2UuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGltcGxpY2F0aW9ucyBieSByZXZpZXdpbmcgdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCBob3cgU0NUUCBzdXBwb3J0IGlzIGludGVncmF0ZWQgaW50byB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgZnJhbWV3b3JrLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBydWxlcyBhc3NvY2lhdGVkIHdpdGggYGlwX3ZzX2NvcmUuY2AgYW5kIGBpcF92c194bWl0LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU0NUUCBwcm90b2NvbCBpcyBzcGVjaWZpY2FsbHkgaGFuZGxlZCB3aXRoaW4gdGhlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgSVBWUyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IFNDVFAgdHJhZmZpYyBpcyB0cmFuc21pdHRlZC4gVGhlIE1ha2VmaWxlcyBzaG91bGQgY2xhcmlmeSBob3cgdGhlIFNDVFAgbW9kdWxlIGlzIGJ1aWx0IGFuZCBsaW5rZWQgaW50byB0aGUgSVBWUyBzeXN0ZW0gYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTQ9aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSAmIzQzOz0gaXBfdnNfbmZjdC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTY6aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlc2Ugb2JqZWN0cyB3aXRoaW4gYGlwX3ZzLW9ianNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIHRoaW5ncyBhcmUgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lQX1ZTYCBpcyBlbmFibGVkLiBTaW1wbGUgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkLgoKUmlnaHQsIHNvIHRoYXQgYm9pbHMgZG93biB0byBlbmFibGluZyBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYElQX1ZTYCBpdHNlbGYgZGVwZW5kcyBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIHByZXNlbnQgYXMgd2VsbC4gQW5kIGBJUF9WU19JUFY2YCBoYXMgYSBkZXBlbmRlbmN5IG9uIGVpdGhlciBgSVBWNiA9IHlgIG9yIGBJUF9WUyA9IElQVjZgLCBzbyBJIGJldHRlciBpbmNsdWRlIGBJUFY2YCBqdXN0IGluIGNhc2UuCgpXaGlsZSB1c3VhbGx5IGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBhbnl3YXksIGl0JiMzOTtzIGFsd2F5cyBzYWZlciB0byBleHBsaWNpdGx5IGluY2x1ZGUgdGhlbSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBjb21waWxhdGlvbiBwcm9ibGVtcy4gU3l6a2FsbGVyIHRlbmRzIHRvIGhhdmUgYElORVRgIGFuZCBgTkVURklMVEVSYCBlbmFibGVkLCBzbyBJIHRoaW5rIEkmIzM5O20gc2FmZSB0byBpbmNsdWRlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCwganVzdCBpbiBjYXNlLgoKTm93LCBsZXQmIzM5O3Mga2VlcCB0cmFjayBvZiB0aG9zZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246IGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdGAuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgaWYgYGlwX3ZzX25hdF9pY21wX3Y2YCBpcyBub24tc3RhdGljOyB0aGF0JiMzOTtzIHNvbWV0aGluZyBJIGRvbiYjMzk7dCB3YW50IHRvIG92ZXJsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05NTM9dm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk2LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5OTc6dm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05OTgtXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMDQ5PXN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA4MS1cdGlmIChhZiA9PSBBRl9JTkVUNilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA4MjpcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwODMtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTgwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBpcF92c19uYXRfaWNtcF92NmAgYW5kIEkgYWxyZWFkeSBrbm93IHRoYXQgb25lIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgaGF2ZSwgaXQgbG9va3MgbGlrZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYWxsIGludGVyYWN0IGluIHRoaXMgbm9uLXN0YXRpYyBjb250ZXh0LCBhbmQgSSBrbm93IEkgaGF2ZSB0byBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiBgaXBfdnNfaWNtcF94bWl0X3Y2YCBzaGFyZXMgdGhlIHNhbWUgcHJvcGVydGllcyBvZiBiZWluZyBub24tc3RhdGljLCBnaXZlbiB0aGF0IGl0cyBsaWtlbHkgcmVsYXRlZCB0byB0aGVzZSBvdGhlcnMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1OTc9aW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTg6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTU5OS1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjM4CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDExMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTkFUIGFuZCBDaGVja3N1bSBQYXRjaCoqCgpPa2F5LCBzbyBgaXBfdnNfaWNtcF94bWl0X3Y2YCBpcyBkZWZpbml0ZWx5ICpub3QqIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyBnb29kIHRvIGNsYXJpZnkuIExldCYjMzk7cyBzZWUuLi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpcF92c19pY21wX3htaXRgIGluIGBpcF92c194bWl0LmNgLiAgSSBzZWUgdGhlIGRpZmY6IGl0JiMzOTtzIHVwZGF0aW5nIGBpcF92c19uYXRfaWNtcGAsIHNwZWNpZmljYWxseSBhZGRpbmcgYGNpcGhgIHRvIHRoZSBmdW5jdGlvbiBjYWxsLiAgUmlnaHQsIGl0IG9ubHkgbW9kaWZpZXMgdGhlIGNhbGwuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgYGlwX3ZzX25hdF9pY21wYC4gQWhhLCB0aGF0JiMzOTtzIGluIGBpcF92c19jb3JlLmNgLiBUaGUgc2lnbmF0dXJlIG9mIGBpcF92c19uYXRfaWNtcGAgaXMgYmVpbmcgdXBkYXRlZCB0aGVyZS4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBpcF92c19uYXRfaWNtcF92NmAgaW4gdGhhdCBzYW1lIGZpbGUgaXNuJiMzOTt0IGNoYW5nZWQuIEFuZCwgZnVydGhlciBkb3duLCB0aGUgY2FsbCBpbiBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgICphbHNvKiBnZXRzIHRoZSB1cGRhdGUuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQsIHRoZSBmb2N1cyBmb3IgZnV6emluZywgYXJlOgoKKiAgIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgICh0aGF0JiMzOTtzIG5vbi1zdGF0aWMsIHJlbWVtYmVyKQoqICAgYGlwX3ZzX25hdF9pY21wYCAodGhlIGFjdHVhbCBjaGFuZ2UpCiogICBgaXBfdnNfaWNtcF94bWl0YAoKSSBzaG91bGQgZG91YmxlLWNoZWNrIGFib3V0IGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgIGJlaW5nIG5vbi1zdGF0aWMuLi4gWXVwLCBJIGNhbiBzZWUgdGhlIGRlY2xhcmF0aW9uLiBJdCYjMzk7cyBwdWJsaWMsIG5vdCBzdGF0aWMuCgpBbmQgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB3ZWxsLCB0aGlzIHRvdWNoZXMgZ2VuZXJhbCBJUFZTIElDTVAgZnVuY3Rpb25hbGl0eSwgc28gd2UmIzM5O2xsIG5lZWQgYElQX1ZTYCwgYElQX1ZTX0lQVjZgLCBhbmQgcHJvYmFibHkgYElQX1ZTX1BST1RPX1NDVFBgIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIFNDVFAgYW5kIElDTVAgZXJyb3JzLgoKVGhlIHBhdGNoIGFsdGVycyBjb3JlIElQVlMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaGFzIG5ldHdvcmstZmFjaW5nIGxvZ2ljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gdHJ5IHNvbWUgZnV6emluZy4gSXQmIzM5O3MgY2hhbmdpbmcgaG93IHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgc28gd2UgY2FuIGxpa2VseSBjcmVhdGUgc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHNjZW5hcmlvcy4KCkkgdGhpbmsgSSYjMzk7dmUgZ290IHRoaXMuIExldCYjMzk7cyBzZW5kIHRoZXNlIHJlc3VsdHMgYW5kIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHBhcnNlZCBhbmQgTkFULWVkLCBhbmQgZml4ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHBhcnNlZCBhbmQgTkFULWVkLCBhbmQgZml4ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MDcuNDk0NDY1NDgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MDQ5NDIwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19pY21wX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwYXJzZWQgYW5kIE5BVC1lZCwgYW5kIGZpeGVzIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MDcuNDk0NDczMDExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTMxMTYyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZmY1ZjA1ZmVhYzZmYTczOGZlZGQ5ZDY1M2I3YjI4ODc0ZGNmNTBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjA0OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuaW5kZXggZTZjYTkzMGEzNTA3Yi4uMTBmNWNlNzZhMGFlMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbkBAIC0yNSw5ICsyNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXHRcXHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcdFxcdFxcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICNlbmRpZlxcbkBAIC0yMDYyLDcgKzIwNjAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4tXFx0XFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcXG4rXFx0XFx0ICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5AQCAtMjA5NSwzMiArMjA5Myw4IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIFxcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcXG4te1xcbi1cXHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cXG4tXFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0LyogTE9DQUxfT1VUID8gKi9cXG4tXFx0aWYgKCFza2ItXFx1MDAzZWRldiB8fCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXFxuLVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi1cXHRcXHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cXHUwMDNlcnQ2aV9mbGFncyBcXHUwMDI2IFJURl9MT0NBTCkpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IFJUQ0ZfTE9DQUwpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKVxcbi17XFxuLVxcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcXG4tfVxcbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCBpbnQgYWYpO1xcbiBcXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuaW5kZXggNmI3OWUwYzRkOWUyOC4uYTUxNDE4YTQ0OWNjYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbkBAIC04NzIsNiArODcyLDMzIEBAIHN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIFxcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xcbiB9XFxuIFxcbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCBpbnQgYWYpXFxuK3tcXG4rXFx0X193c3VtIGNzdW07XFxuK1xcbitcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKVxcbitcXHRcXHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCk7XFxuK1xcdGVsc2UgaWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbitcXHRcXHRjc3VtID0gY3N1bV9zdWIoc2tiLVxcdTAwM2Vjc3VtLCBza2JfY2hlY2tzdW0oc2tiLCAwLCBvZmZzZXQsIDApKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbitcXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuK1xcdFxcdHJldHVybiAhY3N1bV9pcHY2X21hZ2ljKFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWxlbiAtIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0cHJvdG8sIGNzdW0pO1xcbisjZW5kaWZcXG4rXFx0aWYgKHByb3RvID09IElQUFJPVE9fSUNNUClcXG4rXFx0XFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XFxuK1xcdHJldHVybiAhY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXFx1MDAzZXNhZGRyLCBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQsIHByb3RvLCBjc3VtKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBlbnVtIGlwX2RlZnJhZ191c2VycyBpcF92c19kZWZyYWdfdXNlcih1bnNpZ25lZCBpbnQgaG9va251bSlcXG4ge1xcbiBcXHRpZiAoTkZfSU5FVF9MT0NBTF9JTiA9PSBob29rbnVtKVxcbkBAIC05MjUsMjggKzk1MiwyNyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxcbiAgKi9cXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbi1cXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpXFxuK1xcdFxcdCAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxcbiB7XFxuIFxcdHN0cnVjdCBpcGhkciAqaXBoXFx0ID0gaXBfaGRyKHNrYik7XFxuIFxcdHN0cnVjdCBpY21waGRyICppY21waFxcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0b2ZmKTtcXG4tXFx0c3RydWN0IGlwaGRyICpjaXBoXFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xcbi1cXHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmNpaFxcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbiBcXHRcXHRpcF9zZW5kX2NoZWNrKGlwaCk7XFxuLVxcdFxcdGNpcGgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbi1cXHRcXHRpcF9zZW5kX2NoZWNrKGNpcGgpO1xcbitcXHRcXHRjaWgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbitcXHRcXHRpcF9zZW5kX2NoZWNrKGNpaCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlwaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuIFxcdFxcdGlwX3NlbmRfY2hlY2soaXBoKTtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuLVxcdFxcdGlwX3NlbmRfY2hlY2soY2lwaCk7XFxuK1xcdFxcdGNpaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuK1xcdFxcdGlwX3NlbmRfY2hlY2soY2loKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXFxuIFxcdGlmIChoYXNfcG9ydHMpIHtcXG4tXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCArIGNpcGgtXFx1MDAzZWlobCo0O1xcbitcXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVxcdTAwM2VkYXRhICsgY2lwaC1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdFxcdGlmIChpbm91dClcXG4gXFx0XFx0XFx0cG9ydHNbMV0gPSBjcC1cXHUwMDNldnBvcnQ7XFxuQEAgLTk2MCwxMCArOTg2LDEwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcXG4gXFxuIFxcdGlmIChpbm91dClcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVBcXFwiKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUFxcXCIpO1xcbiB9XFxuIFxcbkBAIC0xMDU2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XFxuIFxcdGVsc2VcXG4gI2VuZGlmXFxuLVxcdFxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFxuIFxcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXFx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5Miw3ICsxMTE4LDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuIFxcdHN0cnVjdCBpcF92c19jb25uICpjcDtcXG4gXFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldCwgaWhsO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbiBcXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcXG4gXFxuIFxcdCpyZWxhdGVkID0gMTtcXG5AQCAtMTEwNSw3ICsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0fVxcbiBcXG4tXFx0aWhsID0gaXB2c2gtXFx1MDAzZWxlbjtcXG4gXFx0b2Zmc2V0ID0gaXB2c2gtXFx1MDAzZWxlbjtcXG4gXFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcXHUwMDI2X2ljbXBoKTtcXG4gXFx0aWYgKGljID09IE5VTEwpXFxuQEAgLTExMzEsMTEgKzExNTYsMTUgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuIFxcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcXG4rXFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgdHJ1ZSwgXFx1MDAyNmNpcGgpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4rXFxuIFxcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4tXFx0aWYgKCEoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNlaWhsIFxcdTAwM2U9IDUpKVxcbitcXHRpZiAoIShjaWggXFx1MDAyNlxcdTAwMjYgY2loLVxcdTAwM2V2ZXJzaW9uID09IDQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgY2lwaC5sZW4gLSBjaXBoLm9mZiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xcbiBcXG4tXFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVxcdTAwM2Vwcm90b2NvbCk7XFxuK1xcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpcGgucHJvdG9jb2wpO1xcbiBcXHRpZiAoIXBwKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG5AQCAtMTE0Niw4ICsxMTc1LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxcbiBcXHRcXHQgICAgICBcXFwiQ2hlY2tpbmcgb3V0Z29pbmcgSUNNUCBmb3JcXFwiKTtcXG4gXFxuLVxcdGlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCB0cnVlLCBcXHUwMDI2Y2lwaCk7XFxuLVxcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXFxuIFxcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVxcdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG4gXFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVULCBza2IsIFxcdTAwMjZjaXBoKTtcXG5AQCAtMTE1NSw4ICsxMTgyLDggQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdHNuZXQuaXAgPSBpcHZzaC1cXHUwMDNlc2FkZHIuaXA7XFxuLVxcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFxcdTAwMjZzbmV0LCBjcCwgcHAsIFxcdTAwMjZjaXBoLCBpaGwsXFxuLVxcdFxcdFxcdFxcdCAgICBob29rbnVtKTtcXG4rXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuQEAgLTE4MDMsMTAgKzE4MzAsMTIgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XFxuIFxcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4tXFx0aWYgKCEoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNlaWhsIFxcdTAwM2U9IDUpKVxcbitcXHRpZiAoIWNpaClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuLVxcdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVxcdTAwMjZjaWgtXFx1MDAzZWRhZGRyO1xcbiBcXHRobGVuX2lwaXAgPSBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlmICghKGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGhsZW5faXBpcCBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xcbitcXHRyYWRkciA9ICh1bmlvbiBuZl9pbmV0X2FkZHIgKilcXHUwMDI2Y2loLVxcdTAwM2VkYWRkcjtcXG4gXFxuIFxcdC8qIFNwZWNpYWwgY2FzZSBmb3IgZXJyb3JzIGZvciBJUElQL1VEUC9HUkUgdHVubmVsIHBhY2tldHMgKi9cXG4gXFx0dHVubmVsID0gZmFsc2U7XFxuQEAgLTE4MjMsOSArMTg1Miw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0XFx0aWYgKCFkZXN0IHx8IGRlc3QtXFx1MDAzZXR1bl90eXBlICE9IElQX1ZTX0NPTk5fRl9UVU5ORUxfVFlQRV9JUElQKVxcbiBcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRcXHRvZmZzZXQgKz0gaGxlbl9pcGlwO1xcbi1cXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFxcdTAwMjZfY2lwaCk7XFxuLVxcdFxcdGlmICghKGNpaCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZWlobCBcXHUwMDNlPSA1KSlcXG4tXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuIFxcdFxcdHR1bm5lbCA9IHRydWU7XFxuIFxcdH0gZWxzZSBpZiAoKGNpaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcXHQvKiBDYW4gYmUgVURQIGVuY2FwICovXFxuIFxcdFxcdCAgICBjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fR1JFKSBcXHUwMDI2XFx1MDAyNlxcdC8qIENhbiBiZSBHUkUgZW5jYXAgKi9cXG5AQCAtMTg1MCwyMSArMTg3NiwyNSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdFxcdFxcdC8qIFNraXAgSVAgYW5kIFVEUC9HUkUgdHVubmVsIGhlYWRlcnMgKi9cXG4gXFx0XFx0XFx0b2Zmc2V0ID0gb2Zmc2V0MiArIHVsZW47XFxuIFxcdFxcdFxcdC8qIE5vdyB3ZSBzaG91bGQgYmUgYXQgdGhlIG9yaWdpbmFsIElQIGhlYWRlciAqL1xcbi1cXHRcXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2X2NpcGgpO1xcbi1cXHRcXHRcXHRpZiAoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNlaWhsIFxcdTAwM2U9IDUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGlwcm90byA9PSBJUFBST1RPX0lQSVApXFxuK1xcdFxcdFxcdGlmIChpcHJvdG8gPT0gSVBQUk9UT19JUElQKVxcbiBcXHRcXHRcXHRcXHR0dW5uZWwgPSB0cnVlO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaWgtXFx1MDAzZXByb3RvY29sKTtcXG4rXFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgIXR1bm5lbCwgXFx1MDAyNmNpcGgpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXHRwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KGlwdnMsIGNpcGgucHJvdG9jb2wpO1xcbiBcXHRpZiAoIXBkKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRwcCA9IHBkLVxcdTAwM2VwcDtcXG4gXFxuK1xcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4rXFx0aWYgKCEoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIGNpcGgubGVuIC0gY2lwaC5vZmYgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4rXFxuIFxcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4gXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2ICFwcC1cXHUwMDNlZG9udF9kZWZyYWcpKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbkBAIC0xODcyLDkgKzE5MDIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcXG4gXFx0XFx0ICAgICAgXFxcIkNoZWNraW5nIGluY29taW5nIElDTVAgZm9yXFxcIik7XFxuIFxcbi1cXHRvZmZzZXQyID0gb2Zmc2V0O1xcbi1cXHRpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgIXR1bm5lbCwgXFx1MDAyNmNpcGgpO1xcbi1cXG4gXFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cXG4gXFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cXG4gXFx0ICovXFxuQEAgLTE5MDQsMTEgKzE5MzEsMTIgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodHVubmVsKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaXBoLmxlbiAtIGNpcGgub2ZmO1xcbiBcXHRcXHRfX2JlMzIgaW5mbyA9IGljLVxcdTAwM2V1bi5nYXRld2F5O1xcbiBcXHRcXHRfX3U4IHR5cGUgPSBpYy1cXHUwMDNldHlwZTtcXG4gXFx0XFx0X191OCBjb2RlID0gaWMtXFx1MDAzZWNvZGU7XFxuIFxcbitcXHRcXHRvZmZzZXQyID0gb2Zmc2V0O1xcbiBcXHRcXHQvKiBVcGRhdGUgdGhlIE1UVSAqL1xcbiBcXHRcXHRpZiAoaWMtXFx1MDAzZXR5cGUgPT0gSUNNUF9ERVNUX1VOUkVBQ0ggXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGljLVxcdTAwM2Vjb2RlID09IElDTVBfRlJBR19ORUVERUQpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG5pbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTE5Myw3ICsxOTMsNyBAQCBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRzdHJ1Y3Qgc2N0cGhkciAqc2g7XFxuIFxcdF9fbGUzMiBjbXAsIHZhbDtcXG4gXFxuLVxcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxcbitcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDBiMGM1MzA0OTkzYTkuLmM0NTA4ZjNmNDNkZDMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNcXG5AQCAtMTU4MCw3ICsxNTgwLDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xcbitcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFxuIFxcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXFxuIFxcdHNrYi1cXHUwMDNlaWdub3JlX2RmID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MDcuOTA4MTgzNjI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzgyOTEyMDczMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19pY21wX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwYXJzZWQgYW5kIE5BVC1lZCwgYW5kIGZpeGVzIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWZmNWYwNWZlYWM2ZmE3MzhmZWRkOWQ2NTNiN2IyODg3NGRjZjUwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjA0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IGU2Y2E5MzBhMzUwN2IuLjEwZjVjZTc2YTBhZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsOSArMjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTIwNjIsNyArMjA2MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbi1cdFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcbitcdFx0ICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbkBAIC0yMDk1LDMyICsyMDkzLDggQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbiBcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcbi17XG4tXHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cbi1cdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHQvKiBMT0NBTF9PVVQgPyAqL1xuLVx0aWYgKCFza2ItXHUwMDNlZGV2IHx8IHNrYi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSylcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXG4tXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0aWYgKCEoZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSktXHUwMDNlcnQ2aV9mbGFncyBcdTAwMjYgUlRGX0xPQ0FMKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoIShza2JfcnRhYmxlKHNrYiktXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IFJUQ0ZfTE9DQUwpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbi17XG4tXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xuLX1cbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXG4rXHRcdFx0XHQgaW50IGFmKTtcbiBcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCA2Yjc5ZTBjNGQ5ZTI4Li5hNTE0MThhNDQ5Y2NiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTg3Miw2ICs4NzIsMzMgQEAgc3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuIFxuK2Jvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBwcm90byxcbitcdFx0XHRcdCBpbnQgYWYpXG4re1xuK1x0X193c3VtIGNzdW07XG4rXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKVxuK1x0XHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKTtcbitcdGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG4rXHRcdGNzdW0gPSBjc3VtX3N1Yihza2ItXHUwMDNlY3N1bSwgc2tiX2NoZWNrc3VtKHNrYiwgMCwgb2Zmc2V0LCAwKSk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuK1x0aWYgKGFmID09IEFGX0lORVQ2KVxuK1x0XHRyZXR1cm4gIWNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0XHRcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuK1x0XHRcdFx0XHRza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LFxuK1x0XHRcdFx0XHRwcm90bywgY3N1bSk7XG4rI2VuZGlmXG4rXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JQ01QKVxuK1x0XHRyZXR1cm4gIWNzdW1fZm9sZChjc3VtKTtcbitcdHJldHVybiAhY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuK1x0XHRcdFx0ICBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCBwcm90bywgY3N1bSk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgZW51bSBpcF9kZWZyYWdfdXNlcnMgaXBfdnNfZGVmcmFnX3VzZXIodW5zaWduZWQgaW50IGhvb2tudW0pXG4ge1xuIFx0aWYgKE5GX0lORVRfTE9DQUxfSU4gPT0gaG9va251bSlcbkBAIC05MjUsMjggKzk1MiwyNyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbi1cdFx0ICAgIGJvb2wgaGFzX3BvcnRzKVxuK1x0XHQgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSArIHRvZmYpO1xuLVx0c3RydWN0IGlwaGRyICpjaXBoXHQgPSAoc3RydWN0IGlwaGRyICopKGljbXBoICsgMSk7XG4tXHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xuK1x0c3RydWN0IGlwaGRyICpjaWhcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiBcdFx0aXBfc2VuZF9jaGVjayhpcGgpO1xuLVx0XHRjaXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4tXHRcdGlwX3NlbmRfY2hlY2soY2lwaCk7XG4rXHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuK1x0XHRpcF9zZW5kX2NoZWNrKGNpaCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiBcdFx0aXBfc2VuZF9jaGVjayhpcGgpO1xuLVx0XHRjaXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4tXHRcdGlwX3NlbmRfY2hlY2soY2lwaCk7XG4rXHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuK1x0XHRpcF9zZW5kX2NoZWNrKGNpaCk7XG4gXHR9XG4gXG4gXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cbiBcdGlmIChoYXNfcG9ydHMpIHtcbi1cdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCArIGNpcGgtXHUwMDNlaWhsKjQ7XG4rXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlbGVuKTtcbiBcbiBcdFx0aWYgKGlub3V0KVxuIFx0XHRcdHBvcnRzWzFdID0gY3AtXHUwMDNldnBvcnQ7XG5AQCAtOTYwLDEwICs5ODYsMTAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuIH1cbiBcbkBAIC0xMDU2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXHRlbHNlXG4gI2VuZGlmXG4tXHRcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMpO1xuK1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTIsNyArMTExOCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDtcbiBcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbiBcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpaGw7XG4rXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7XG4gXG4gXHQqcmVsYXRlZCA9IDE7XG5AQCAtMTEwNSw3ICsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aWhsID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG5AQCAtMTEzMSwxMSArMTE1NiwxNSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0LyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi9cbiBcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcbitcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbitcbiBcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4rXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2XG4rXHQgICAgICBjaXBoLmxlbiAtIGNpcGgub2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcbi1cdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC1cdTAwM2Vwcm90b2NvbCk7XG4rXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaXBoLnByb3RvY29sKTtcbiBcdGlmICghcHApXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG5AQCAtMTE0Niw4ICsxMTc1LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbiBcdFx0ICAgICAgXCJDaGVja2luZyBvdXRnb2luZyBJQ01QIGZvclwiKTtcbiBcbi1cdGlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCB0cnVlLCBcdTAwMjZjaXBoKTtcbi1cbiBcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXIgKi9cbiBcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxuIFx0XHRcdCAgICAgaXB2cywgQUZfSU5FVCwgc2tiLCBcdTAwMjZjaXBoKTtcbkBAIC0xMTU1LDggKzExODIsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pcCA9IGlwdnNoLVx1MDAzZXNhZGRyLmlwO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLCBpaGwsXG4tXHRcdFx0XHQgICAgaG9va251bSk7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsXG4rXHRcdFx0XHQgICAgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTgwMywxMCArMTgzMCwxMiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbitcdGlmICghY2loKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbi1cdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVx1MDAyNmNpaC1cdTAwM2VkYWRkcjtcbiBcdGhsZW5faXBpcCA9IGNpaC1cdTAwM2VpaGwgKiA0O1xuK1x0aWYgKCEoY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgaGxlbl9pcGlwIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbitcdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVx1MDAyNmNpaC1cdTAwM2VkYWRkcjtcbiBcbiBcdC8qIFNwZWNpYWwgY2FzZSBmb3IgZXJyb3JzIGZvciBJUElQL1VEUC9HUkUgdHVubmVsIHBhY2tldHMgKi9cbiBcdHR1bm5lbCA9IGZhbHNlO1xuQEAgLTE4MjMsOSArMTg1Miw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdFx0aWYgKCFkZXN0IHx8IGRlc3QtXHUwMDNldHVuX3R5cGUgIT0gSVBfVlNfQ09OTl9GX1RVTk5FTF9UWVBFX0lQSVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0b2Zmc2V0ICs9IGhsZW5faXBpcDtcbi1cdFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZWlobCBcdTAwM2U9IDUpKVxuLVx0XHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuIFx0XHR0dW5uZWwgPSB0cnVlO1xuIFx0fSBlbHNlIGlmICgoY2loLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XHQvKiBDYW4gYmUgVURQIGVuY2FwICovXG4gXHRcdCAgICBjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19HUkUpIFx1MDAyNlx1MDAyNlx0LyogQ2FuIGJlIEdSRSBlbmNhcCAqL1xuQEAgLTE4NTAsMjEgKzE4NzYsMjUgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHRcdC8qIFNraXAgSVAgYW5kIFVEUC9HUkUgdHVubmVsIGhlYWRlcnMgKi9cbiBcdFx0XHRvZmZzZXQgPSBvZmZzZXQyICsgdWxlbjtcbiBcdFx0XHQvKiBOb3cgd2Ugc2hvdWxkIGJlIGF0IHRoZSBvcmlnaW5hbCBJUCBoZWFkZXIgKi9cbi1cdFx0XHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksXG4tXHRcdFx0XHRcdFx0IFx1MDAyNl9jaXBoKTtcbi1cdFx0XHRpZiAoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaXByb3RvID09IElQUFJPVE9fSVBJUClcbitcdFx0XHRpZiAoaXByb3RvID09IElQUFJPVE9fSVBJUClcbiBcdFx0XHRcdHR1bm5lbCA9IHRydWU7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaWgtXHUwMDNlcHJvdG9jb2wpO1xuK1x0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgIXR1bm5lbCwgXHUwMDI2Y2lwaCkpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXHRwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KGlwdnMsIGNpcGgucHJvdG9jb2wpO1xuIFx0aWYgKCFwZClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4rXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFx1MDAyNl9jaXBoKTtcbitcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjZcbitcdCAgICAgIGNpcGgubGVuIC0gY2lwaC5vZmYgXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuK1xuIFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuIFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbkBAIC0xODcyLDkgKzE5MDIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG4gXHRcdCAgICAgIFwiQ2hlY2tpbmcgaW5jb21pbmcgSUNNUCBmb3JcIik7XG4gXG4tXHRvZmZzZXQyID0gb2Zmc2V0O1xuLVx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cbiBcdCAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuXG4gXHQgKi9cbkBAIC0xOTA0LDExICsxOTMxLDEyIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdH1cbiBcbiBcdGlmICh0dW5uZWwpIHtcbi1cdFx0dW5zaWduZWQgaW50IGhsZW5fb3JpZyA9IGNpaC1cdTAwM2VpaGwgKiA0O1xuK1x0XHR1bnNpZ25lZCBpbnQgaGxlbl9vcmlnID0gY2lwaC5sZW4gLSBjaXBoLm9mZjtcbiBcdFx0X19iZTMyIGluZm8gPSBpYy1cdTAwM2V1bi5nYXRld2F5O1xuIFx0XHRfX3U4IHR5cGUgPSBpYy1cdTAwM2V0eXBlO1xuIFx0XHRfX3U4IGNvZGUgPSBpYy1cdTAwM2Vjb2RlO1xuIFxuK1x0XHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0XHQvKiBVcGRhdGUgdGhlIE1UVSAqL1xuIFx0XHRpZiAoaWMtXHUwMDNldHlwZSA9PSBJQ01QX0RFU1RfVU5SRUFDSCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGljLVx1MDAzZWNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXG5pbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTE5Myw3ICsxOTMsNyBAQCBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0c3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0X19sZTMyIGNtcCwgdmFsO1xuIFxuLVx0aWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCAwYjBjNTMwNDk5M2E5Li5jNDUwOGYzZjQzZGQzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1ODAsNyArMTU4MCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuK1x0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXG4gXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xuIFx0c2tiLVx1MDAzZWlnbm9yZV9kZiA9IDE7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDowNy45MDgxODU1MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgwNDc5NTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgSVBWUyBJQ01QIE5BVCBhbmQgQ2hlY2tzdW0gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gdGhlIElQVlMgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNgLCB3aXRoIHNvbWUgbWlub3IgdG91Y2hlcyBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY2AgYW5kIGBpbmNsdWRlL25ldC9pcF92cy5oYC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGl0J3MgYWRkcmVzc2luZyBzb21lIElDTVAgTkFUIGlzc3VlcyB3aXRoaW4gSVBWUywgdGhlIElQIFZpcnR1YWwgU2VydmVyIGNvbXBvbmVudC4gVGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcvbmV0ZmlsdGVyIHNwYWNlLCBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggTkFUIGFuZCBjaGVja3N1bXMsIEknbSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgZ29pbmcgdG8gaW52b2x2ZSBwYWNrZXQgbWFuaXB1bGF0aW9uLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlbGV2YW50KiB0byBmdXp6aW5nPyBXZWxsLCBkdWghIElQVlMgaXMgYSBsb2FkIGJhbGFuY2VyIHRoYXQncyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgcGFja2V0cywgaGVhdmlseSB1c2VkIGluIHJlYWwtd29ybGQgZGVwbG95bWVudHMuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgcGFja2V0IHBhcnNpbmcgYW5kIE5BVCBsb2dpYyBkaXJlY3RseSwgYW5kIElDTVAgcGFyc2luZyBpcyAqbm90b3Jpb3VzKiBmb3IgYmVpbmcgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSB0YXJnZXQuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBtb2RpZmllZC4gSSdtIHNlZWluZyBjaGFuZ2VzIHRvIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBzY3RwX2NzdW1fY2hlY2tgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdGAuIFRob3NlIGZ1bmN0aW9ucyBhcmUga2V5LCBzbyBJJ2xsIGJlIGtlZXBpbmcgYSBjbG9zZSBleWUgb24gdGhvc2UuIEVzcGVjaWFsbHkgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYW5kIGBpcF92c19pY21wX3htaXRgIGFyZSBteSBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIGtub3cgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgSVBWUy4gVXN1YWxseSwgSSdkIGV4cGVjdCBpdCB0byBiZSBgQ09ORklHX0lQX1ZTYC4gVGltZSB0byBydW4gYSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY29uZmlybS4gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyBmb3IgcHJvcGVyIGJ1aWxkIGFuZCBmdXp6IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDoxOS43MTI5ODQ1MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNTQ3ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDoxOS45NzY1MzcwNjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA4NTQ2ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYElQX1ZTYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYElQX1ZTYCBub3cuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIGJleW9uZCBqdXN0IHRoZSBvYnZpb3VzIGtlcm5lbCBtb2R1bGVzLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIG5ldHdvcmsgc3RhY2sgZmVhdHVyZXMsIHBlcmhhcHMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIG9yIHJvdXRpbmcgdGhhdCBpdCByZWxpZXMgdXBvbj8gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdXNlci1zcGFjZSB0b29scy4gRG9lcyBgaXB2c2FkbWAgaGF2ZSBhbnkgbm9uLW9idmlvdXMgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW1wYWN0IGl0cyBmdW5jdGlvbmFsaXR5IG9yIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmsgZWNvc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIGNvbmZsaWN0cyBjb3VsZCBhcmlzZSBpZiB0aGlzIG1vZHVsZSBvciBpdHMgZGVwZW5kZW5jaWVzIGFyZSBub3Qgd29ya2luZyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjIzLjA4NTA4NTYxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY1NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcXHRJUF9WU19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBoZWxwZXJcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cXHRcXHRORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXFx0SVBfVlNfTkZDVFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MjMuMTI2NzQ1Njg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNDU1OTE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaGVyZSBpcyB0aGF0IHdlJ3JlIGdvaW5nIHRvIG5lZWQgYElQX1ZTYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpbXBsaWVkIGJ5IHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoaXMgcGF0Y2ggYWxzbyBpbnZvbHZlcyBJUHY2IGNvZGU7IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IGAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZgLCBhcmUgcHJldHR5IGV4cGxpY2l0IGFib3V0IHRoYXQuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHdhbnQgYElQX1ZTX0lQVjZgIGRlZmluZWQuIFRoYXQncyBhIGdpdmVuLiBBbmQgd2FpdCwgSSdtIHNlZWluZyB0aGlzIGFsc28gdG91Y2hlcyBgaXBfdnNfcHJvdG9fc2N0cC5jYCEgUmlnaHQsIFNDVFAsIGludGVyZXN0aW5nLiBTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlJ2xsIHJlcXVpcmUgYElQX1ZTX1BST1RPX1NDVFBgIHRvby4gTGV0IG1lIGNvbmZpcm0gdGhhdCBleGlzdHMuIExldCdzIHNlZSBpZiB3ZSBuZWVkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MjYuNTUxMzA4NzkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzI0NzIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNfUFJPVE9fU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MjYuNTk0MDQyODMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMjYxNjQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRpZ2dpbmcgaW50byBJUFZTIGFuZCBTQ1RQIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSBhbmQgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGVzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGJ1aWxkLXRpbWUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGUgZGlyZWN0b3J5IGBuZXQvbmV0ZmlsdGVyL2lwdnNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIElQVlMgbGl2ZXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGl0ICpzaG91bGQqIGJlIGluIHRoZXJlLiBTbywgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IFNDVFAgc3VwcG9ydC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEknbSBob3BpbmcgZm9yIHNvbWUgZGlyZWN0IHJlZmVyZW5jZXMsIHBlcmhhcHMgYSBgY29uZmlnYCBvcHRpb24gb3Igc29tZSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4uLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDozMC4xMTY2NjEyNjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzkwNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTAwPWNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNzpcXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA4LVxcdHNlbGVjdCBORVRfQ1JDMzJDXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA5LVxcdGhlbHBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMTA6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFNDVFAgdHJhbnNwb3J0XFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTExLVxcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MzAuMTU4MDYwMjQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTEyNjUxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSVBWUyBTQ1RQIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLiBBbmQgaW1tZWRpYXRlbHksIEknbSBhbHJlYWR5IHNwb3R0aW5nIGEgbWlub3IgY29kZSBzdHlsZSBpc3N1ZSDigJMgdGhhdCBkb3VibGUgc3BhY2UgYWZ0ZXIgYGNvbmZpZ2AuIEFsd2F5cyBzb21ldGhpbmcsIGlzbid0IHRoZXJlP1xuXG5NeSBicmFpbidzIGFscmVhZHkgZ29pbmcgZG93biB0aGUgY2hlY2tsaXN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBjb3JlIG9mIHRoZSBJUFZTIFNDVFAgaGFuZGxpbmcuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9ucyBpbiBib3RoIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYCBmb3Igc2V0dXAgYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgYWxzbyBwZWVrIGF0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jYCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgdHJhbnNtaXNzaW9uIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIGhvdyBTQ1RQIHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCwgcGFydGljdWxhcmx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhbmRhcmQgSVBWUyBmcmFtZXdvcmsuIEkgc3VzcGVjdCB0aGVyZSBtYXkgaGF2ZSBiZWVuIHR3ZWFrcyBuZWNlc3NhcnkgZ2l2ZW4gdGhlIGluaGVyZW50IGNvbXBsZXhpdGllcyBvZiBTQ1RQJ3MgbXVsdGktaG9taW5nIGFuZCBtdWx0aS1zdHJlYW0gbmF0dXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHR3ZWFrcyBhcmUgaW1wbGVtZW50ZWQgc2FmZWx5IGFuZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDozMy45MDkzMjg1MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODk3MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKmlwX3ZzX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk9Y29uc3QgY2hhciAqaXBfdnNfcHJvdG9fbmFtZSh1bnNpZ25lZCBpbnQgcHJvdG8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExMy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjExNDp2b2lkIGlwX3ZzX2luaXRfaGFzaF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICp0YWJsZSwgaW50IHJvd3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMTUte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjE6dm9pZCBpcF92c19yaHRfZnJlZShzdHJ1Y3QgaXBfdnNfcmh0ICp0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTY4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY5OnZvaWQgaXBfdnNfcmh0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE3MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE3Nz1zdHJ1Y3QgaXBfdnNfcmh0ICppcF92c19yaHRfYWxsb2MoaW50IGJ1Y2tldHMsIGludCBzY291bnRzLCBpbnQgbG9ja3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNTppbnQgaXBfdnNfcmh0X2Rlc2lyZWRfc2l6ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IG4sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzYtXFx0XFx0XFx0ICAgaW50IGxmYWN0b3IsIGludCBtaW5fYml0cywgaW50IG1heF9iaXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNjMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNjQ6dm9pZCBpcF92c19yaHRfc2V0X3RocmVzaG9sZHMoc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IHNpemUsIGludCBsZmFjdG9yLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjY1LVxcdFxcdFxcdCAgICAgIGludCBtaW5fYml0cywgaW50IG1heF9iaXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NDg9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfYWRkcl9pc191bmljYXN0KHN0cnVjdCBuZXQgKm5ldCwgaW50IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NjItICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NjM6aW50IGlwX3ZzX2xlYXZlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NjQtXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODcwPXN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjg3NTpib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NzYtXFx0XFx0XFx0XFx0IGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9OTI1PXN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk1Mi0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjk1Mzp2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05NTQtXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk2LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6OTk3OnZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk5OC1cXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDQxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQ0MjppbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NDMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDcwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQ3MTp2b2lkIGlwX3ZzX3VucmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDozMy45NTMyMzAyMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NTI4ODQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIGVsZW1lbnRzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipJbml0aWFsIEZ1bmN0aW9uIEJyZWFrZG93biBhbmQgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZnVuY3Rpb25zLiBJJ20gc2VlaW5nOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgY2xlYXJseSByZWxhdGVkIHRvIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiwgY29tbW9uIHRvIHRoZSBJUCBWaXJ0dWFsIFNlcnZlci4gTmV4dCwgd2UgaGF2ZSBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBhbmQgYGlwX3ZzX291dF9pY21wYC4gVGhlc2Ugc3Ryb25nbHkgc3VnZ2VzdCBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBJQ01QIHBhY2tldHMsIGFuZCB0aGUgdjYgdmFyaWFudCBpbmRpY2F0ZXMgSVB2NiBoYW5kbGluZy4gYGlwX3ZzX291dF9pY21wYCBsb29rcyBsaWtlIGl0J3Mgc3RhdGljYWxseSBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGl0J3MgYSBmaXhlZCBwYXJ0IG9mIHRoZSBjb3JlIGZ1bmN0aW9uLiBJIHdvbmRlciB3aGF0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlPyBOb3csIHRoZSBjdXJpb3VzIG9uZSBpcyBgaXBfdnNfaW5faWNtcGAuIElzIHRoaXMgZnVuY3Rpb24gYWxzbyBzdGF0aWNhbGx5IGRlZmluZWQsIG9yIGlzIGl0IGR5bmFtaWNhbGx5IGJvdW5kPyBMZXQncyB2ZXJpZnkgaWYgdGhlcmUgaXMgYW55IGR5bmFtaWMgbmF0dXJlIHRvIGl0cyBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBjb25jZXJuaW5nIGluY29taW5nIElDTVAgdHJhZmZpYyBpbiB0aGUgY29udGV4dCBvZiBJUFZTLiBJIGFzc3VtZSB0aGlzIHdvdWxkIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgYXR0YWNrIGZvciBtYWxpY2lvdXMgYWN0b3JzLCBzbyBwcm9wZXIgaW5zcGVjdGlvbiBpcyBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzgzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MzguMjE4NTIxMTAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU2NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19pbl9pY21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzc5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE3ODA6aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTc4MS1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIwMDktI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDEwOnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIwMTEtXFx0XFx0XFx0ICAgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMTY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNjUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTY2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE2Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNzUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTc2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMTAtICogICAgICBidXQgSUNNUCBkZXN0aW5lZCBmb3IgMC4wLjAuMC8wIGNhbm5vdCBub3QgYmUgZWFzaWx5IG1hcmtlZCBhbmRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTE6ICogICAgICBzZW50IHRvIGlwX3ZzX2luX2ljbXAuIFNvLCBjYXRjaCB0aGVtIGF0IHRoZSBORl9JTkVUX0ZPUldBUkQgY2hhaW5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTI6ICogICAgICBhbmQgc2VuZCB0aGVtIHRvIGlwX3ZzX2luX2ljbXAuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzEzLSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzE1PWlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMzNzpcXHRcXHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMzgtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNDAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzQxOlxcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXFx1MDAyNnIsIHN0YXRlLVxcdTAwM2Vob29rLCBcXHUwMDI2aXBoZHIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjM4LjI2MTA5MjU3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMzMTUyMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJQ01QIEhhbmRsaW5nIGluIElQVlMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgSUNNUC1yZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIElQVlMgZnJhbWV3b3JrLiBJJ3ZlIG5vdGVkIHRoYXQgYGlwX3ZzX2luX2ljbXBgIGFuZCBgaXBfdnNfb3V0X2ljbXBgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBnZW5lcmFsbHkgaW5kaWNhdGVzIHRoZXkncmUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gVGhhdCBzdWdnZXN0cyB0aGV5J3JlIG5vdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgb3IgdGhlIG9uZXMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBjb3JlIGxvZ2ljLlxuXG5Ob3csIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcuIEkndmUgaWRlbnRpZmllZCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYW5kIGBpcF92c19pY21wX3htaXRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBpZiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgSUNNUCBwcm9jZXNzaW5nIHBpcGVsaW5lLlxuXG5HaXZlbiB0aGUgb3B0aW9ucywgbXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYGlwX3ZzX2ljbXBfeG1pdGAsIHdoaWNoIEkgc2VlIHJlc2lkZXMgaW4gYGlwX3ZzX3htaXQuY2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgaXBfdnNfaWNtcF94bWl0YCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgSUNNUCBwYWNrZXRzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVmaW5pdGVseSBiZSBhIHByaW1hcnkgZm9jdXMgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjUyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjQyLjE5NDI0NzE2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNzQ1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNTAzPWludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTUwNDppcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTUwNS1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTU5Nz1pbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTg6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE1OTktXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjQyLjIzODUyOTE4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyOTk1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkNoZWNraW5nIHRoZSBTQ1RQIENoZWNrc3VtIFZlcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFNDVFAgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEknbGwgbmVlZCB0byBnbyB0byBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc2N0cF9jc3VtX2NoZWNrYCBmdW5jdGlvbi4gSSBpbWFnaW5lIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBJUFZTIHV0aWxpemVzIFNDVFAgZm9yIGxvYWQgYmFsYW5jaW5nLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBob3cgaXQgdmFsaWRhdGVzIHRoZSBjaGVja3N1bSB0byBkZXRlcm1pbmUgcGFja2V0IGludGVncml0eSBhcyBpdCByZWxhdGVzIHRvIHRoZSB2aXJ0dWFsIHNlcnZlcidzIGZ1bmN0aW9uLiBJIHNob3VsZCBxdWlja2x5IHJldmlldyBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgY2hlY2tzdW0gZXJyb3JzIGFuZCBpZiB0aGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJUFZTIGhhbmRsZXMgU0NUUCB0cmFmZmljIGluIHRoZSBjb250ZXh0IG9mIGxvYWQgYmFsYW5jaW5nLiBUaGlzIG1pZ2h0IGJlIGEgcmVmcmVzaGVyIGJ1dCBpdCBhbHdheXMgaGVscHMgdG8gZG91YmxlIGNoZWNrIHRoZXNlIGFzcGVjdHMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBTQ1RQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiB0aGUgSVBWUyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjQ1LjQzMTUyNjgyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NzU3MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfY3N1bV9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTM6c2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE0LVxcdFxcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTExLVxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTEyOlxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExMy1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTQwPXNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE1OS1cXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjE2MDpcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNjEtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE4OD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxODk6c2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE5MC1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6NDUuNjE5MjkxNzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzQzMTc5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgQ2hlY2tzdW0gSGFuZGxpbmcgaW4gSVBWUyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IFNDVFAgY2hlY2tzdW1zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGNvZGUuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc2N0cF9jc3VtX2NoZWNrYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBteSBmb2N1cy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGFuZCBoYW5kbGluZy5cblxuSSd2ZSBpZGVudGlmaWVkIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdGAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJJ20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBtYXkgYWxzbyBiZSByZWxldmFudC4gR29vZCwgY29uZmlybWVkLCB0aG9zZSB0aHJlZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBub24tc3RhdGljLlxuXG5Ob3csIEknbSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc3RhdGljIG5hdHVyZSBvZiBhIGZldyByZWxhdGVkIGZ1bmN0aW9ucy4gYGlwX3ZzX2luX2ljbXBgIGlzIHN0YXRpYy4gYGlwX3ZzX291dF9pY21wYCBpcyBhbHNvIHN0YXRpYy4gUGVyZmVjdC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBJUFZTLiBJJ3ZlIGZvdW5kIHRoYXQgYElQX1ZTYCBpdHNlbGYgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYC4gYElQX1ZTX0lQVjZgIHJlcXVpcmVzIGBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZgLiBgSVBfVlNfUFJPVE9fU0NUUGAgZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgYmV5b25kIGBJUF9WU2AuIFRoaXMgaXMgdXNlZnVsLCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgbWFrZSBlbmFibGluZyB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgbXVjaCBtb3JlIHN0cmFpZ2h0IGZvcndhcmQuXG5cblRoZXJlZm9yZSwgdG8gZW5hYmxlIFNDVFAgc3VwcG9ydCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIGFyZTogYElQX1ZTYCwgYElQX1ZTX0lQVjZgLCBhbmQsIGNydWNpYWxseSwgYElQX1ZTX1BST1RPX1NDVFBgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoaXMgZmluYWwgb3B0aW9uLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTU2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjUxLjQ1MzYxMTk2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxODEwNTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19QUk9UT19TQ1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDo1MS41MjE4MDA3MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDQxODMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb246XG5cbioqRXhhbWluaW5nIHRoZSBTQ1RQIExvYWQgQmFsYW5jaW5nIE9wdGlvbioqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgc2VhcmNoaW5nIGZvciBcIlNDVFBcIiBub3QgdG9vIGxvbmcgYWdvLCBhbmQgSSBjYW1lIGFjcm9zcyB0aGF0IGBjb25maWcgSVBfVlNfUFJPVE9fU0NUUGAgZW50cnkuIEEgcXVpY2sgdmlzdWFsIGNoZWNrLCBhbmQgSSBub3RpY2UgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBsaW5lIHVzZXMgdHdvIHNwYWNlcyBhZnRlciBgY29uZmlnYC4gSSB3aWxsIG5lZWQgdG8gbWFrZSBhIG5vdGUgdG8gYWRkcmVzcyB0aGlzIGluIG15IHN0eWxlIGd1aWRlbGluZXMuXG5cbk5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgYElQX1ZTX1BST1RPX1NDVFBgIG9wdGlvbiBjb250aW5nZW50IHVwb24gYElQX1NDVFBgIGJlaW5nIGVuYWJsZWQ/IE9yIHBlcmhhcHMgc29tZSBvdGhlciByZWxhdGVkIG1vZHVsZT8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBjcnVjaWFsIGZvciBwcm9wZXJseSBjb25maWd1cmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGF2b2lkaW5nIGFueSBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjU2LjA4NjIyMjI1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1NDUxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfUFJPVE9fU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMDA9Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIlNDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6NTYuMTQxNzczMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MDI5MTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLlxuXG4qKklQVlMgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkhtbSwgYmFzZWQgb24gdGhpcyBpbml0aWFsIGdsYW5jZSwgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhpcyBjaGFuZ2UgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUgYElQX1NDVFBgIGZsYWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcsIHNvIGxldCdzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29uZmlndXJhdGlvbi5cblxuQWxyaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVkIGBpcF92c19jb3JlLmNgLCBgaXBfdnNfeG1pdC5jYCwgYW5kIGBpcF92c19wcm90b19zY3RwLmNgLiBUaG9zZSBmaWxlcyBhcmUgYWxsIHNxdWFyZWx5IHdpdGhpbiB0aGUgYElQX1ZTYCBzdWJzeXN0ZW0uIFRoYXQgcmVpbmZvcmNlcyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uLCBidXQgbGV0J3MgYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5Ob3csIEknbGwgZXhhbWluZSB0aGUgTWFrZWZpbGUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYC4gSSB3YW50IHRvIHZlcmlmeSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlc2UgZmlsZXMgdG8gYElQX1ZTYC4gVGhpcyBzaG91bGQgZGVmaW5pdGl2ZWx5IHNldHRsZSB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyOTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNTowMS42ODIwNjkwODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzg5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3Byb3RvX3NjdHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xMD1pcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUCkgKz0gaXBfdnNfcHJvdG9fYWhfZXNwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTE6aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjAxLjczNTg2NDA2NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk3MDM4MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBsZXZlbCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBJUFZTIFNDVFAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBg4oCUdGhhdCdzIHRoZSBrZXkuIFRoYXQgc2V0dGluZyBsb29rcyByaWdodCBvbiB0aGUgc3VyZmFjZS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW1wbGljYXRpb25zIGJ5IHJldmlld2luZyB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyBTQ1RQIHN1cHBvcnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBmcmFtZXdvcmsuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBNYWtlZmlsZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGBpcF92c19jb3JlLmNgIGFuZCBgaXBfdnNfeG1pdC5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFNDVFAgcHJvdG9jb2wgaXMgc3BlY2lmaWNhbGx5IGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIElQVlMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBTQ1RQIHRyYWZmaWMgaXMgdHJhbnNtaXR0ZWQuIFRoZSBNYWtlZmlsZXMgc2hvdWxkIGNsYXJpZnkgaG93IHRoZSBTQ1RQIG1vZHVsZSBpcyBidWlsdCBhbmQgbGlua2VkIGludG8gdGhlIElQVlMgc3lzdGVtIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDU6MDUuMTMyOTA1NjI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0ODExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTQ9aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSArPSBpcF92c19uZmN0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTUtXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE2OmlwX3ZzLW9ianMgOj1cXHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cXHQgICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVxcdFxcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cXHQgICBcXHRcXHQgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjA1LjE3OTg1ODIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM3NjIyOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGVzZSBvYmplY3RzIHdpdGhpbiBgaXBfdnMtb2Jqc2AuIFRoYXQgdGVsbHMgbWUgdGhlc2UgdGhpbmdzIGFyZSBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfSVBfVlNgIGlzIGVuYWJsZWQuIFNpbXBsZSBlbm91Z2gsIGJ1dCBsZXQncyBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBzb2xpZC5cblxuUmlnaHQsIHNvIHRoYXQgYm9pbHMgZG93biB0byBlbmFibGluZyBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYElQX1ZTYCBpdHNlbGYgZGVwZW5kcyBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIHByZXNlbnQgYXMgd2VsbC4gQW5kIGBJUF9WU19JUFY2YCBoYXMgYSBkZXBlbmRlbmN5IG9uIGVpdGhlciBgSVBWNiA9IHlgIG9yIGBJUF9WUyA9IElQVjZgLCBzbyBJIGJldHRlciBpbmNsdWRlIGBJUFY2YCBqdXN0IGluIGNhc2UuXG5cbldoaWxlIHVzdWFsbHkgYElORVRgIGFuZCBgTkVURklMVEVSYCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IGFueXdheSwgaXQncyBhbHdheXMgc2FmZXIgdG8gZXhwbGljaXRseSBpbmNsdWRlIHRoZW0gdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgY29tcGlsYXRpb24gcHJvYmxlbXMuIFN5emthbGxlciB0ZW5kcyB0byBoYXZlIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgZW5hYmxlZCwgc28gSSB0aGluayBJJ20gc2FmZSB0byBpbmNsdWRlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCwganVzdCBpbiBjYXNlLlxuXG5Ob3csIGxldCdzIGtlZXAgdHJhY2sgb2YgdGhvc2Uga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYW5kIGBpcF92c19pY21wX3htaXRgLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHN1cmUsIGxldCdzIGRvdWJsZSBjaGVjayBpZiBgaXBfdnNfbmF0X2ljbXBfdjZgIGlzIG5vbi1zdGF0aWM7IHRoYXQncyBzb21ldGhpbmcgSSBkb24ndCB3YW50IHRvIG92ZXJsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE3OSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNToxMC41MTc0ODM0MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODUxMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX25hdF9pY21wX3Y2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05NTM9dm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05OTYtI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5OTc6dm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk4LVxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTEwNDk9c3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwODEtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA4MjpcXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwODMtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNToxMC41NzAzNzI0MDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMjMyNzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYGlwX3ZzX25hdF9pY21wX3Y2YCBhbmQgSSBhbHJlYWR5IGtub3cgdGhhdCBvbmUgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgaGF2ZSwgaXQgbG9va3MgbGlrZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYWxsIGludGVyYWN0IGluIHRoaXMgbm9uLXN0YXRpYyBjb250ZXh0LCBhbmQgSSBrbm93IEkgaGF2ZSB0byBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiBgaXBfdnNfaWNtcF94bWl0X3Y2YCBzaGFyZXMgdGhlIHNhbWUgcHJvcGVydGllcyBvZiBiZWluZyBub24tc3RhdGljLCBnaXZlbiB0aGF0IGl0cyBsaWtlbHkgcmVsYXRlZCB0byB0aGVzZSBvdGhlcnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNToxNC42MDI3MDIxNDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTg1NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2ljbXBfeG1pdF92NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTU5Nz1pbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTg6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE1OTktXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjE0LjY2MDY5MzY1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ1MjM5NjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgSUNNUCBOQVQgYW5kIENoZWNrc3VtIFBhdGNoKipcblxuT2theSwgc28gYGlwX3ZzX2ljbXBfeG1pdF92NmAgaXMgZGVmaW5pdGVseSAqbm90KiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIFRoYXQncyBnb29kIHRvIGNsYXJpZnkuIExldCdzIHNlZS4uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3ZzX2ljbXBfeG1pdGAgaW4gYGlwX3ZzX3htaXQuY2AuICBJIHNlZSB0aGUgZGlmZjogaXQncyB1cGRhdGluZyBgaXBfdnNfbmF0X2ljbXBgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBjaXBoYCB0byB0aGUgZnVuY3Rpb24gY2FsbC4gIFJpZ2h0LCBpdCBvbmx5IG1vZGlmaWVzIHRoZSBjYWxsLlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiBgaXBfdnNfbmF0X2ljbXBgLiBBaGEsIHRoYXQncyBpbiBgaXBfdnNfY29yZS5jYC4gVGhlIHNpZ25hdHVyZSBvZiBgaXBfdnNfbmF0X2ljbXBgIGlzIGJlaW5nIHVwZGF0ZWQgdGhlcmUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaXBfdnNfbmF0X2ljbXBfdjZgIGluIHRoYXQgc2FtZSBmaWxlIGlzbid0IGNoYW5nZWQuIEFuZCwgZnVydGhlciBkb3duLCB0aGUgY2FsbCBpbiBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgICphbHNvKiBnZXRzIHRoZSB1cGRhdGUuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCwgdGhlIGZvY3VzIGZvciBmdXp6aW5nLCBhcmU6XG5cbiogICBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCAodGhhdCdzIG5vbi1zdGF0aWMsIHJlbWVtYmVyKVxuKiAgIGBpcF92c19uYXRfaWNtcGAgKHRoZSBhY3R1YWwgY2hhbmdlKVxuKiAgIGBpcF92c19pY21wX3htaXRgXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBiZWluZyBub24tc3RhdGljLi4uIFl1cCwgSSBjYW4gc2VlIHRoZSBkZWNsYXJhdGlvbi4gSXQncyBwdWJsaWMsIG5vdCBzdGF0aWMuXG5cbkFuZCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlbGwsIHRoaXMgdG91Y2hlcyBnZW5lcmFsIElQVlMgSUNNUCBmdW5jdGlvbmFsaXR5LCBzbyB3ZSdsbCBuZWVkIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYW5kIHByb2JhYmx5IGBJUF9WU19QUk9UT19TQ1RQYCBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBTQ1RQIGFuZCBJQ01QIGVycm9ycy5cblxuVGhlIHBhdGNoIGFsdGVycyBjb3JlIElQVlMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaGFzIG5ldHdvcmstZmFjaW5nIGxvZ2ljLCB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCBwbGFjZSB0byB0cnkgc29tZSBmdXp6aW5nLiBJdCdzIGNoYW5naW5nIGhvdyBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIHNvIHdlIGNhbiBsaWtlbHkgY3JlYXRlIHNvbWUgaW50ZXJlc3RpbmcgZnV6emluZyBzY2VuYXJpb3MuXG5cbkkgdGhpbmsgSSd2ZSBnb3QgdGhpcy4gTGV0J3Mgc2VuZCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYzOCwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjI2LjExMzA5MzE1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjkxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja1wiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHBhcnNlZCBhbmQgTkFULWVkLCBhbmQgZml4ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBzdWJzeXN0ZW0uIEl0IGNoYW5nZXMgaG93IElDTVAgcGFja2V0cyBhcmUgcGFyc2VkIGFuZCBOQVQtZWQsIGFuZCBmaXhlcyBjaGVja3N1bSB2YWxpZGF0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 01:59:51 +0000 UTC FinishedAt: 2026-07-30 02:05:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_SCTP" ], "series_id": "aa671c46-d6db-490f-b6e6-8efd9a6088df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_checksum_common_check", "ip_vs_nat_icmp", "ip_vs_icmp_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBzdWJzeXN0ZW0uIEl0IGNoYW5nZXMgaG93IElDTVAgcGFja2V0cyBhcmUgcGFyc2VkIGFuZCBOQVQtZWQsIGFuZCBmaXhlcyBjaGVja3N1bSB2YWxpZGF0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZmY1ZjA1ZmVhYzZmYTczOGZlZGQ5ZDY1M2I3YjI4ODc0ZGNmNTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDI6MDQ6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IGU2Y2E5MzBhMzUwN2IuLjEwZjVjZTc2YTBhZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsOSAmIzQzOzI1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVx0XHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVx0XHRcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xuLSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC0yMDYyLDcgJiM0MzsyMDYwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxuLVx0XHQgICAgYm9vbCBoYXNfcG9ydHMpO1xuJiM0MztcdFx0ICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbkBAIC0yMDk1LDMyICYjNDM7MjA5Myw4IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4gXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4te1xuLVx0LyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovXG4tXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0LyogTE9DQUxfT1VUID8gKi9cbi1cdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdC8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqL1xuLVx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVx1MDAzZXJ0NmlfZmxhZ3MgXHUwMDI2IFJURl9MT0NBTCkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXG4te1xuLVx0aWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcbi19XG4mIzQzO2Jvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBwcm90byxcbiYjNDM7XHRcdFx0XHQgaW50IGFmKTtcbiBcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCA2Yjc5ZTBjNGQ5ZTI4Li5hNTE0MThhNDQ5Y2NiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTg3Miw2ICYjNDM7ODcyLDMzIEBAIHN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4gXHRyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xuIH1cbiBcbiYjNDM7Ym9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgaW50IHByb3RvLFxuJiM0MztcdFx0XHRcdCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRfX3dzdW0gY3N1bTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKVxuJiM0MztcdFx0Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgMCk7XG4mIzQzO1x0ZWxzZSBpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiYjNDM7XHRcdGNzdW0gPSBjc3VtX3N1Yihza2ItXHUwMDNlY3N1bSwgc2tiX2NoZWNrc3VtKHNrYiwgMCwgb2Zmc2V0LCAwKSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiYjNDM7XHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4mIzQzO1x0XHRyZXR1cm4gIWNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbiYjNDM7XHRcdFx0XHRcdHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRwcm90bywgY3N1bSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGlmIChwcm90byA9PSBJUFBST1RPX0lDTVApXG4mIzQzO1x0XHRyZXR1cm4gIWNzdW1fZm9sZChjc3VtKTtcbiYjNDM7XHRyZXR1cm4gIWNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLCBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbiYjNDM7XHRcdFx0XHQgIHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQsIHByb3RvLCBjc3VtKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiBcdGlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pXG5AQCAtOTI1LDI4ICYjNDM7OTUyLDI3IEBAIHN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXG4gICovXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuLVx0XHQgICAgYm9vbCBoYXNfcG9ydHMpXG4mIzQzO1x0XHQgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbi1cdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbi1cdHVuc2lnbmVkIGludCBjb2ZmIF9fbWF5YmVfdW51c2VkID0gdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xuJiM0MztcdHN0cnVjdCBpcGhkciAqY2loXHQgPSAoc3RydWN0IGlwaGRyICopKGljbXBoICYjNDM7IDEpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuIFx0XHRpcF9zZW5kX2NoZWNrKGlwaCk7XG4tXHRcdGNpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbi1cdFx0aXBfc2VuZF9jaGVjayhjaXBoKTtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuJiM0MztcdFx0aXBfc2VuZF9jaGVjayhjaWgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4gXHRcdGlwX3NlbmRfY2hlY2soaXBoKTtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuLVx0XHRpcF9zZW5kX2NoZWNrKGNpcGgpO1xuJiM0MztcdFx0Y2loLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4mIzQzO1x0XHRpcF9zZW5kX2NoZWNrKGNpaCk7XG4gXHR9XG4gXG4gXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cbiBcdGlmIChoYXNfcG9ydHMpIHtcbi1cdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCAmIzQzOyBjaXBoLVx1MDAzZWlobCo0O1xuJiM0MztcdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGNpcGgtXHUwMDNlbGVuKTtcbiBcbiBcdFx0aWYgKGlub3V0KVxuIFx0XHRcdHBvcnRzWzFdID0gY3AtXHUwMDNldnBvcnQ7XG5AQCAtOTYwLDEwICYjNDM7OTg2LDEwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCYjMzQ7KTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG5AQCAtMTA1Niw3ICYjNDM7MTA4Miw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cyk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTIsNyAmIzQzOzExMTgsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG4gXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XG4gXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLVx0dW5zaWduZWQgaW50IG9mZnNldCwgaWhsO1xuJiM0MztcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbkBAIC0xMTA1LDcgJiM0MzsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aWhsID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG5AQCAtMTEzMSwxMSAmIzQzOzExNTYsMTUgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpO1xuJiM0MztcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4mIzQzO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbiYjNDM7XHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgY2lwaC5sZW4gLSBjaXBoLm9mZiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4gXG4tXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXHUwMDNlcHJvdG9jb2wpO1xuJiM0MztcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpcGgucHJvdG9jb2wpO1xuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbkBAIC0xMTQ2LDggJiM0MzsxMTc1LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbiBcdFx0ICAgICAgXCYjMzQ7Q2hlY2tpbmcgb3V0Z29pbmcgSUNNUCBmb3JcJiMzNDspO1xuIFxuLVx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpO1xuLVxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlciAqL1xuIFx0Y3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtXHUwMDNlY29ubl9vdXRfZ2V0LCBpcF92c19jb25uX291dF9nZXRfcHJvdG8sXG4gXHRcdFx0ICAgICBpcHZzLCBBRl9JTkVULCBza2IsIFx1MDAyNmNpcGgpO1xuQEAgLTExNTUsOCAmIzQzOzExODIsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pcCA9IGlwdnNoLVx1MDAzZXNhZGRyLmlwO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLCBpaGwsXG4tXHRcdFx0XHQgICAgaG9va251bSk7XG4mIzQzO1x0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xODAzLDEwICYjNDM7MTgzMCwxMiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTtcbiBcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4mIzQzO1x0aWYgKCFjaWgpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuLVx0cmFkZHIgPSAodW5pb24gbmZfaW5ldF9hZGRyICopXHUwMDI2Y2loLVx1MDAzZWRhZGRyO1xuIFx0aGxlbl9pcGlwID0gY2loLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0aWYgKCEoY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgaGxlbl9pcGlwIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4mIzQzO1x0cmFkZHIgPSAodW5pb24gbmZfaW5ldF9hZGRyICopXHUwMDI2Y2loLVx1MDAzZWRhZGRyO1xuIFxuIFx0LyogU3BlY2lhbCBjYXNlIGZvciBlcnJvcnMgZm9yIElQSVAvVURQL0dSRSB0dW5uZWwgcGFja2V0cyAqL1xuIFx0dHVubmVsID0gZmFsc2U7XG5AQCAtMTgyMyw5ICYjNDM7MTg1Miw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdFx0aWYgKCFkZXN0IHx8IGRlc3QtXHUwMDNldHVuX3R5cGUgIT0gSVBfVlNfQ09OTl9GX1RVTk5FTF9UWVBFX0lQSVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0b2Zmc2V0ICYjNDM7PSBobGVuX2lwaXA7XG4tXHRcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0XHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbi1cdFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcdFx0dHVubmVsID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAoKGNpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFx0LyogQ2FuIGJlIFVEUCBlbmNhcCAqL1xuIFx0XHQgICAgY2loLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fR1JFKSBcdTAwMjZcdTAwMjZcdC8qIENhbiBiZSBHUkUgZW5jYXAgKi9cbkBAIC0xODUwLDIxICYjNDM7MTg3NiwyNSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRcdFx0LyogU2tpcCBJUCBhbmQgVURQL0dSRSB0dW5uZWwgaGVhZGVycyAqL1xuIFx0XHRcdG9mZnNldCA9IG9mZnNldDIgJiM0MzsgdWxlbjtcbiBcdFx0XHQvKiBOb3cgd2Ugc2hvdWxkIGJlIGF0IHRoZSBvcmlnaW5hbCBJUCBoZWFkZXIgKi9cbi1cdFx0XHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksXG4tXHRcdFx0XHRcdFx0IFx1MDAyNl9jaXBoKTtcbi1cdFx0XHRpZiAoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaXByb3RvID09IElQUFJPVE9fSVBJUClcbiYjNDM7XHRcdFx0aWYgKGlwcm90byA9PSBJUFBST1RPX0lQSVApXG4gXHRcdFx0XHR0dW5uZWwgPSB0cnVlO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQoaXB2cywgY2loLVx1MDAzZXByb3RvY29sKTtcbiYjNDM7XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCBcdTAwMjZjaXBoKSlcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1x0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaXBoLnByb3RvY29sKTtcbiBcdGlmICghcGQpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRwcCA9IHBkLVx1MDAzZXBwO1xuIFxuJiM0MztcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuJiM0MztcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBjaXBoLmxlbiAtIGNpcGgub2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4mIzQzO1xuIFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuIFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbkBAIC0xODcyLDkgJiM0MzsxOTAyLDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxuIFx0XHQgICAgICBcJiMzNDtDaGVja2luZyBpbmNvbWluZyBJQ01QIGZvclwmIzM0Oyk7XG4gXG4tXHRvZmZzZXQyID0gb2Zmc2V0O1xuLVx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cbiBcdCAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuXG4gXHQgKi9cbkBAIC0xOTA0LDExICYjNDM7MTkzMSwxMiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR9XG4gXG4gXHRpZiAodHVubmVsKSB7XG4tXHRcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaWgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaXBoLmxlbiAtIGNpcGgub2ZmO1xuIFx0XHRfX2JlMzIgaW5mbyA9IGljLVx1MDAzZXVuLmdhdGV3YXk7XG4gXHRcdF9fdTggdHlwZSA9IGljLVx1MDAzZXR5cGU7XG4gXHRcdF9fdTggY29kZSA9IGljLVx1MDAzZWNvZGU7XG4gXG4mIzQzO1x0XHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0XHQvKiBVcGRhdGUgdGhlIE1UVSAqL1xuIFx0XHRpZiAoaWMtXHUwMDNldHlwZSA9PSBJQ01QX0RFU1RfVU5SRUFDSCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGljLVx1MDAzZWNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXG5pbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTE5Myw3ICYjNDM7MTkzLDcgQEAgc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdHN0cnVjdCBzY3RwaGRyICpzaDtcbiBcdF9fbGUzMiBjbXAsIHZhbDtcbiBcbi1cdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCAwYjBjNTMwNDk5M2E5Li5jNDUwOGYzZjQzZGQzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1ODAsNyAmIzQzOzE1ODAsNyBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0aWYgKHNrYl9jb3coc2tiLCBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4tXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzKTtcbiYjNDM7XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwYXJzZWQgYW5kIE5BVC1lZCwgYW5kIGZpeGVzIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmZjVmMDVmZWFjNmZhNzM4ZmVkZDlkNjUzYjdiMjg4NzRkY2Y1MGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMjowNDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IGU2Y2E5MzBhMzUwN2IuLjEwZjVjZTc2YTBhZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMjUsOSAmIzQzOzI1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIuaCZndDsJCS8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi8KICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsJCQkvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi8KLSNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXB2Ni5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9pcDZfZmliLmgmZ3Q7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKQogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgmZ3Q7CiAjZW5kaWYKQEAgLTIwNjIsNyAmIzQzOzIwNjAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLAotCQkgICAgYm9vbCBoYXNfcG9ydHMpOwomIzQzOwkJICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpOwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKQEAgLTIwOTUsMzIgJiM0MzsyMDkzLDggQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSkKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpCi17Ci0JLyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovCi0JaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCi0JCXJldHVybiBmYWxzZTsKLQkvKiBMT0NBTF9PVVQgPyAqLwotCWlmICghc2tiLSZndDtkZXYgfHwgc2tiLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9MT09QQkFDSykKLQkJcmV0dXJuIGZhbHNlOwotCS8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqLwotCWlmIChhZiA9PSBBRl9JTkVUNikgewotCQlpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS0mZ3Q7cnQ2aV9mbGFncyAmYW1wOyBSVEZfTE9DQUwpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCWlmICghKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZikKLXsKLQlpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTsKLX0KJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sCiYjNDM7CQkJCSBpbnQgYWYpOwogCiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCA2Yjc5ZTBjNGQ5ZTI4Li5hNTE0MThhNDQ5Y2NiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg3Miw2ICYjNDM7ODcyLDMzIEBAIHN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiAJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKSk7CiB9CiAKJiM0Mztib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sCiYjNDM7CQkJCSBpbnQgYWYpCiYjNDM7ewomIzQzOwlfX3dzdW0gY3N1bTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpCiYjNDM7CQljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItJmd0O2xlbiAtIG9mZnNldCwgMCk7CiYjNDM7CWVsc2UgaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKQomIzQzOwkJY3N1bSA9IGNzdW1fc3ViKHNrYi0mZ3Q7Y3N1bSwgc2tiX2NoZWNrc3VtKHNrYiwgMCwgb2Zmc2V0LCAwKSk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVDYpCiYjNDM7CQlyZXR1cm4gIWNzdW1faXB2Nl9tYWdpYygmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyLAomIzQzOwkJCQkJJmFtcDtpcHY2X2hkcihza2IpLSZndDtkYWRkciwKJiM0MzsJCQkJCXNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LAomIzQzOwkJCQkJcHJvdG8sIGNzdW0pOwomIzQzOyNlbmRpZgomIzQzOwlpZiAocHJvdG8gPT0gSVBQUk9UT19JQ01QKQomIzQzOwkJcmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7CiYjNDM7CXJldHVybiAhY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktJmd0O3NhZGRyLCBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCiYjNDM7CQkJCSAgc2tiLSZndDtsZW4gLSBvZmZzZXQsIHByb3RvLCBjc3VtKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGVudW0gaXBfZGVmcmFnX3VzZXJzIGlwX3ZzX2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtKQogewogCWlmIChORl9JTkVUX0xPQ0FMX0lOID09IGhvb2tudW0pCkBAIC05MjUsMjggJiM0Mzs5NTIsMjcgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwKICAqLwogdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLAotCQkgICAgYm9vbCBoYXNfcG9ydHMpCiYjNDM7CQkgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCkKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaAkgPSBpcF9oZHIoc2tiKTsKIAlzdHJ1Y3QgaWNtcGhkciAqaWNtcGgJID0gKHN0cnVjdCBpY21waGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyB0b2ZmKTsKLQlzdHJ1Y3QgaXBoZHIgKmNpcGgJID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTsKLQl1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTsKJiM0MzsJc3RydWN0IGlwaGRyICpjaWgJID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTsKIAogCWlmIChpbm91dCkgewogCQlpcGgtJmd0O3NhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwogCQlpcF9zZW5kX2NoZWNrKGlwaCk7Ci0JCWNpcGgtJmd0O2RhZGRyID0gY3AtJmd0O3ZhZGRyLmlwOwotCQlpcF9zZW5kX2NoZWNrKGNpcGgpOwomIzQzOwkJY2loLSZndDtkYWRkciA9IGNwLSZndDt2YWRkci5pcDsKJiM0MzsJCWlwX3NlbmRfY2hlY2soY2loKTsKIAl9IGVsc2UgewogCQlpcGgtJmd0O2RhZGRyID0gY3AtJmd0O2RhZGRyLmlwOwogCQlpcF9zZW5kX2NoZWNrKGlwaCk7Ci0JCWNpcGgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmlwOwotCQlpcF9zZW5kX2NoZWNrKGNpcGgpOwomIzQzOwkJY2loLSZndDtzYWRkciA9IGNwLSZndDtkYWRkci5pcDsKJiM0MzsJCWlwX3NlbmRfY2hlY2soY2loKTsKIAl9CiAKIAkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KIAlpZiAoaGFzX3BvcnRzKSB7Ci0JCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKWNpcGggJiM0MzsgY2lwaC0mZ3Q7aWhsKjQ7CiYjNDM7CQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O2xlbik7CiAKIAkJaWYgKGlub3V0KQogCQkJcG9ydHNbMV0gPSBjcC0mZ3Q7dnBvcnQ7CkBAIC05NjAsMTAgJiM0Mzs5ODYsMTAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAlpZiAoaW5vdXQpCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLSZndDtvZmYsCiAJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QJiMzNDspOwogCWVsc2UKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZiwKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVAmIzM0Oyk7CiB9CiAKQEAgLTEwNTYsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7CiAJZWxzZQogI2VuZGlmCi0JCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMpOwomIzQzOwkJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7CiAKIAlpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLSZndDtpcHZzLCBhZiwgc2tiLCBob29rbnVtKSkKIAkJZ290byBvdXQ7CkBAIC0xMDkyLDcgJiM0MzsxMTE4LDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7CiAJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpaGw7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7CiAKIAkqcmVsYXRlZCA9IDE7CkBAIC0xMTA1LDcgJiM0MzsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCi0JaWhsID0gaXB2c2gtJmd0O2xlbjsKIAlvZmZzZXQgPSBpcHZzaC0mZ3Q7bGVuOwogCWljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwogCWlmIChpYyA9PSBOVUxMKQpAQCAtMTEzMSwxMSAmIzQzOzExNTYsMTUgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCS8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovCiAJb2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTsKJiM0MzsJaWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgdHJ1ZSwgJmFtcDtjaXBoKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqLwomIzQzOwogCWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7Ci0JaWYgKCEoY2loICZhbXA7JmFtcDsgY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBjaWgtJmd0O2lobCAmZ3Q7PSA1KSkKJiM0MzsJaWYgKCEoY2loICZhbXA7JmFtcDsgY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOwomIzQzOwkgICAgICBjaXBoLmxlbiAtIGNpcGgub2ZmICZndDs9IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAKLQlwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtJmd0O3Byb3RvY29sKTsKJiM0MzsJcHAgPSBpcF92c19wcm90b19nZXQoY2lwaC5wcm90b2NvbCk7CiAJaWYgKCFwcCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIApAQCAtMTE0Niw4ICYjNDM7MTE3NSw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LAogCQkgICAgICAmIzM0O0NoZWNraW5nIG91dGdvaW5nIElDTVAgZm9yJiMzNDspOwogCi0JaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsICZhbXA7Y2lwaCk7Ci0KIAkvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovCiAJY3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtJmd0O2Nvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLAogCQkJICAgICBpcHZzLCBBRl9JTkVULCBza2IsICZhbXA7Y2lwaCk7CkBAIC0xMTU1LDggJiM0MzsxMTgyLDggQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCXNuZXQuaXAgPSBpcHZzaC0mZ3Q7c2FkZHIuaXA7Ci0JcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwgaWhsLAotCQkJCSAgICBob29rbnVtKTsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwKJiM0MzsJCQkJICAgIGlwdnNoLSZndDtsZW4sIGhvb2tudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTE4MDMsMTAgJiM0MzsxODMwLDEyIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAkvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqLwogCW9mZnNldCAmIzQzOz0gc2l6ZW9mKF9pY21waCk7CiAJY2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCAmYW1wO19jaXBoKTsKLQlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQomIzQzOwlpZiAoIWNpaCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCi0JcmFkZHIgPSAodW5pb24gbmZfaW5ldF9hZGRyICopJmFtcDtjaWgtJmd0O2RhZGRyOwogCWhsZW5faXBpcCA9IGNpaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWYgKCEoY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBobGVuX2lwaXAgJmd0Oz0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiYjNDM7CXJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKSZhbXA7Y2loLSZndDtkYWRkcjsKIAogCS8qIFNwZWNpYWwgY2FzZSBmb3IgZXJyb3JzIGZvciBJUElQL1VEUC9HUkUgdHVubmVsIHBhY2tldHMgKi8KIAl0dW5uZWwgPSBmYWxzZTsKQEAgLTE4MjMsOSAmIzQzOzE4NTIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJCWlmICghZGVzdCB8fCBkZXN0LSZndDt0dW5fdHlwZSAhPSBJUF9WU19DT05OX0ZfVFVOTkVMX1RZUEVfSVBJUCkKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiAJCW9mZnNldCAmIzQzOz0gaGxlbl9pcGlwOwotCQljaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksICZhbXA7X2NpcGgpOwotCQlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQotCQkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAJCXR1bm5lbCA9IHRydWU7CiAJfSBlbHNlIGlmICgoY2loLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAkvKiBDYW4gYmUgVURQIGVuY2FwICovCiAJCSAgICBjaWgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fR1JFKSAmYW1wOyZhbXA7CS8qIENhbiBiZSBHUkUgZW5jYXAgKi8KQEAgLTE4NTAsMjEgJiM0MzsxODc2LDI1IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAkJCS8qIFNraXAgSVAgYW5kIFVEUC9HUkUgdHVubmVsIGhlYWRlcnMgKi8KIAkJCW9mZnNldCA9IG9mZnNldDIgJiM0MzsgdWxlbjsKIAkJCS8qIE5vdyB3ZSBzaG91bGQgYmUgYXQgdGhlIG9yaWdpbmFsIElQIGhlYWRlciAqLwotCQkJY2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLAotCQkJCQkJICZhbXA7X2NpcGgpOwotCQkJaWYgKGNpaCAmYW1wOyZhbXA7IGNpaC0mZ3Q7dmVyc2lvbiA9PSA0ICZhbXA7JmFtcDsgY2loLSZndDtpaGwgJmd0Oz0gNSAmYW1wOyZhbXA7Ci0JCQkgICAgaXByb3RvID09IElQUFJPVE9fSVBJUCkKJiM0MzsJCQlpZiAoaXByb3RvID09IElQUFJPVE9fSVBJUCkKIAkJCQl0dW5uZWwgPSB0cnVlOwogCQkJZWxzZQogCQkJCXJldHVybiBORl9BQ0NFUFQ7CiAJCX0KIAl9CiAKLQlwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KGlwdnMsIGNpaC0mZ3Q7cHJvdG9jb2wpOwomIzQzOwlpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCAmYW1wO2NpcGgpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsJcGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaXBoLnByb3RvY29sKTsKIAlpZiAoIXBkKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCXBwID0gcGQtJmd0O3BwOwogCiYjNDM7CWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7CiYjNDM7CWlmICghKGNpaCAmYW1wOyZhbXA7IGNpaC0mZ3Q7dmVyc2lvbiA9PSA0ICZhbXA7JmFtcDsKJiM0MzsJICAgICAgY2lwaC5sZW4gLSBjaXBoLm9mZiAmZ3Q7PSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi8KJiM0MzsKIAkvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovCiAJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtMTg3Miw5ICYjNDM7MTkwMiw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsCiAJCSAgICAgICYjMzQ7Q2hlY2tpbmcgaW5jb21pbmcgSUNNUCBmb3ImIzM0Oyk7CiAKLQlvZmZzZXQyID0gb2Zmc2V0OwotCWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCAmYW1wO2NpcGgpOwotCiAJLyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci4KIAkgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LgogCSAqLwpAQCAtMTkwNCwxMSAmIzQzOzE5MzEsMTIgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCX0KIAogCWlmICh0dW5uZWwpIHsKLQkJdW5zaWduZWQgaW50IGhsZW5fb3JpZyA9IGNpaC0mZ3Q7aWhsICogNDsKJiM0MzsJCXVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaXBoLmxlbiAtIGNpcGgub2ZmOwogCQlfX2JlMzIgaW5mbyA9IGljLSZndDt1bi5nYXRld2F5OwogCQlfX3U4IHR5cGUgPSBpYy0mZ3Q7dHlwZTsKIAkJX191OCBjb2RlID0gaWMtJmd0O2NvZGU7CiAKJiM0MzsJCW9mZnNldDIgPSBvZmZzZXQ7CiAJCS8qIFVwZGF0ZSB0aGUgTVRVICovCiAJCWlmIChpYy0mZ3Q7dHlwZSA9PSBJQ01QX0RFU1RfVU5SRUFDSCAmYW1wOyZhbXA7CiAJCSAgICBpYy0mZ3Q7Y29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwppbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTE5Myw3ICYjNDM7MTkzLDcgQEAgc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7CiAJX19sZTMyIGNtcCwgdmFsOwogCi0JaWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpCiYjNDM7CWlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKQogCQlyZXR1cm4gMTsKIAlzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2N0cGhvZmYpOwogCWNtcCA9IHNoLSZndDtjaGVja3N1bTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCmluZGV4IDBiMGM1MzA0OTkzYTkuLmM0NTA4ZjNmNDNkZDMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtMTU4MCw3ICYjNDM7MTU4MCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJaWYgKHNrYl9jb3coc2tiLCBydC0mZ3Q7ZHN0LmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAotCWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpOwomIzQzOwlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTsKIAogCS8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovCiAJc2tiLSZndDtpZ25vcmVfZGYgPSAxOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBJUFZTIElDTVAgTkFUIGFuZCBDaGVja3N1bSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgSVBWUyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNgIGFuZCBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY2AsIHdpdGggc29tZSBtaW5vciB0b3VjaGVzIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jYCBhbmQgYGluY2x1ZGUvbmV0L2lwX3ZzLmhgLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIElDTVAgTkFUIGlzc3VlcyB3aXRoaW4gSVBWUywgdGhlIElQIFZpcnR1YWwgU2VydmVyIGNvbXBvbmVudC4gVGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcvbmV0ZmlsdGVyIHNwYWNlLCBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIE5BVCBhbmQgY2hlY2tzdW1zLCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIHBhY2tldCBtYW5pcHVsYXRpb24uCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlbGV2YW50KiB0byBmdXp6aW5nPyBXZWxsLCBkdWghIElQVlMgaXMgYSBsb2FkIGJhbGFuY2VyIHRoYXQmIzM5O3MgYWJzb2x1dGVseSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JrIHBhY2tldHMsIGhlYXZpbHkgdXNlZCBpbiByZWFsLXdvcmxkIGRlcGxveW1lbnRzLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHBhY2tldCBwYXJzaW5nIGFuZCBOQVQgbG9naWMgZGlyZWN0bHksIGFuZCBJQ01QIHBhcnNpbmcgaXMgKm5vdG9yaW91cyogZm9yIGJlaW5nIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgdGFyZ2V0LgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgdG8gYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gVGhvc2UgZnVuY3Rpb25zIGFyZSBrZXksIHNvIEkmIzM5O2xsIGJlIGtlZXBpbmcgYSBjbG9zZSBleWUgb24gdGhvc2UuIEVzcGVjaWFsbHkgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYW5kIGBpcF92c19pY21wX3htaXRgIGFyZSBteSBmb2N1cyBzeW1ib2xzLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIElQVlMuIFVzdWFsbHksIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIGBDT05GSUdfSVBfVlNgLiBUaW1lIHRvIHJ1biBhIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjb25maXJtLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyBmb3IgcHJvcGVyIGJ1aWxkIGFuZCBmdXp6IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgSVBfVlNgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBJUF9WU2Agbm93LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIGp1c3QgdGhlIG9idmlvdXMga2VybmVsIG1vZHVsZXMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbmV0d29yayBzdGFjayBmZWF0dXJlcywgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgb3Igcm91dGluZyB0aGF0IGl0IHJlbGllcyB1cG9uPyBJIGFsc28gbmVlZCB0byBjb25zaWRlciB1c2VyLXNwYWNlIHRvb2xzLiBEb2VzIGBpcHZzYWRtYCBoYXZlIGFueSBub24tb2J2aW91cyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGZ1bmN0aW9uYWxpdHkgb3IgY29uZmlndXJhdGlvbj8gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSB0byB0cnVseSB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBlY29zeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgY29uZmxpY3RzIGNvdWxkIGFyaXNlIGlmIHRoaXMgbW9kdWxlIG9yIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG5vdCB3b3JraW5nIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTU9bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODpcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjk9Y29uZmlnXHRJUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzM3PWNvbmZpZ1x0SVBfVlNfTkZDVFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzM5Olx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0MC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0OS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNTI9Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBmb3IgSVBWU1wmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzU0Olx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaXMgdGhhdCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBgSVBfVlNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpbXBsaWVkIGJ5IHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoaXMgcGF0Y2ggYWxzbyBpbnZvbHZlcyBJUHY2IGNvZGU7IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IGAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZgLCBhcmUgcHJldHR5IGV4cGxpY2l0IGFib3V0IHRoYXQuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byB3YW50IGBJUF9WU19JUFY2YCBkZWZpbmVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCB3YWl0LCBJJiMzOTttIHNlZWluZyB0aGlzIGFsc28gdG91Y2hlcyBgaXBfdnNfcHJvdG9fc2N0cC5jYCEgUmlnaHQsIFNDVFAsIGludGVyZXN0aW5nLiBTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlJiMzOTtsbCByZXF1aXJlIGBJUF9WU19QUk9UT19TQ1RQYCB0b28uIExldCBtZSBjb25maXJtIHRoYXQgZXhpc3RzLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIG5lZWQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlNfUFJPVE9fU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpZ2dpbmcgaW50byBJUFZTIGFuZCBTQ1RQIFN1cHBvcnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFNDVFAgKFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCkgYW5kIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLCBpcyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGVzLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgYnVpbGQtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIFRoZSBkaXJlY3RvcnkgYG5ldC9uZXRmaWx0ZXIvaXB2c2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgSVBWUyBsaXZlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gaXQgKnNob3VsZCogYmUgaW4gdGhlcmUuIFNvLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IFNDVFAgc3VwcG9ydC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGhvcGluZyBmb3Igc29tZSBkaXJlY3QgcmVmZXJlbmNlcywgcGVyaGFwcyBhIGBjb25maWdgIG9wdGlvbiBvciBzb21lIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLi4uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMDA9Y29uZmlnXHRJUF9WU19QUk9UT19BSFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNzpcdGJvb2wgXCYjMzQ7U0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDgtXHRzZWxlY3QgTkVUX0NSQzMyQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA5LVx0aGVscFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTEwOlx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFNDVFAgdHJhbnNwb3J0XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTEtXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKklQVlMgU0NUUCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLiBBbmQgaW1tZWRpYXRlbHksIEkmIzM5O20gYWxyZWFkeSBzcG90dGluZyBhIG1pbm9yIGNvZGUgc3R5bGUgaXNzdWUg4oCTIHRoYXQgZG91YmxlIHNwYWNlIGFmdGVyIGBjb25maWdgLiBBbHdheXMgc29tZXRoaW5nLCBpc24mIzM5O3QgdGhlcmU/CgpNeSBicmFpbiYjMzk7cyBhbHJlYWR5IGdvaW5nIGRvd24gdGhlIGNoZWNrbGlzdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzbyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgY29yZSBvZiB0aGUgSVBWUyBTQ1RQIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb25zIGluIGJvdGggYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNgIGZvciBzZXR1cCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGFuZCBhbHNvIHBlZWsgYXQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB0cmFuc21pc3Npb24gbG9naWMuIEkgd2FudCB0byBzZWUgaG93IFNDVFAgdHJhZmZpYyBpcyBiZWluZyBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGFuZGFyZCBJUFZTIGZyYW1ld29yay4gSSBzdXNwZWN0IHRoZXJlIG1heSBoYXZlIGJlZW4gdHdlYWtzIG5lY2Vzc2FyeSBnaXZlbiB0aGUgaW5oZXJlbnQgY29tcGxleGl0aWVzIG9mIFNDVFAmIzM5O3MgbXVsdGktaG9taW5nIGFuZCBtdWx0aS1zdHJlYW0gbmF0dXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHR3ZWFrcyBhcmUgaW1wbGVtZW50ZWQgc2FmZWx5IGFuZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKmlwX3ZzXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz04OT1jb25zdCBjaGFyICppcF92c19wcm90b19uYW1lKHVuc2lnbmVkIGludCBwcm90bylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExMy1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTE0OnZvaWQgaXBfdnNfaW5pdF9oYXNoX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKnRhYmxlLCBpbnQgcm93cylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTE1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTYxOnZvaWQgaXBfdnNfcmh0X2ZyZWUoc3RydWN0IGlwX3ZzX3JodCAqdClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY5OnZvaWQgaXBfdnNfcmh0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTcwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE3Nz1zdHJ1Y3QgaXBfdnNfcmh0ICppcF92c19yaHRfYWxsb2MoaW50IGJ1Y2tldHMsIGludCBzY291bnRzLCBpbnQgbG9ja3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzQtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNTppbnQgaXBfdnNfcmh0X2Rlc2lyZWRfc2l6ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IG4sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNi1cdFx0XHQgICBpbnQgbGZhY3RvciwgaW50IG1pbl9iaXRzLCBpbnQgbWF4X2JpdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNjMtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI2NDp2b2lkIGlwX3ZzX3JodF9zZXRfdGhyZXNob2xkcyhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBpbnQgc2l6ZSwgaW50IGxmYWN0b3IsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI2NS1cdFx0XHQgICAgICBpbnQgbWluX2JpdHMsIGludCBtYXhfYml0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTc0OD1zdGF0aWMgaW5saW5lIGludCBpcF92c19hZGRyX2lzX3VuaWNhc3Qoc3RydWN0IG5ldCAqbmV0LCBpbnQgYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NjItICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjc2MzppbnQgaXBfdnNfbGVhdmUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtNzY0LVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODcwPXN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjg3NTpib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3Ni1cdFx0XHRcdCBpbnQgYWYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05MjU9c3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk1Mi0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6OTUzOnZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTU0LVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk2LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5OTc6dm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05OTgtXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQ0MjppbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDcwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDcxOnZvaWQgaXBfdnNfdW5yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGFmKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBlbGVtZW50cywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkluaXRpYWwgRnVuY3Rpb24gQnJlYWtkb3duIGFuZCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSBzZWVpbmc6IGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBjbGVhcmx5IHJlbGF0ZWQgdG8gY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBjb21tb24gdG8gdGhlIElQIFZpcnR1YWwgU2VydmVyLiBOZXh0LCB3ZSBoYXZlIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGFuZCBgaXBfdnNfb3V0X2ljbXBgLiBUaGVzZSBzdHJvbmdseSBzdWdnZXN0IE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBvcGVyYXRpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIElDTVAgcGFja2V0cywgYW5kIHRoZSB2NiB2YXJpYW50IGluZGljYXRlcyBJUHY2IGhhbmRsaW5nLiBgaXBfdnNfb3V0X2ljbXBgIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RhdGljYWxseSBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGEgZml4ZWQgcGFydCBvZiB0aGUgY29yZSBmdW5jdGlvbi4gSSB3b25kZXIgd2hhdCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZT8gTm93LCB0aGUgY3VyaW91cyBvbmUgaXMgYGlwX3ZzX2luX2ljbXBgLiBJcyB0aGlzIGZ1bmN0aW9uIGFsc28gc3RhdGljYWxseSBkZWZpbmVkLCBvciBpcyBpdCBkeW5hbWljYWxseSBib3VuZD8gTGV0JiMzOTtzIHZlcmlmeSBpZiB0aGVyZSBpcyBhbnkgZHluYW1pYyBuYXR1cmUgdG8gaXRzIGFwcGxpY2F0aW9uLiBJIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGNvbmNlcm5pbmcgaW5jb21pbmcgSUNNUCB0cmFmZmljIGluIHRoZSBjb250ZXh0IG9mIElQVlMuIEkgYXNzdW1lIHRoaXMgd291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBhdHRhY2sgZm9yIG1hbGljaW91cyBhY3RvcnMsIHNvIHByb3BlciBpbnNwZWN0aW9uIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzc5PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTc4MDppcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE3ODEtXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMDA5LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDEwOnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjAxMS1cdFx0XHQgICAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMTY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTY1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTY2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNjctXHRcdFx0XHRcdFx0ICAgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTc1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTc2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNzctXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzEwLSAqICAgICAgYnV0IElDTVAgZGVzdGluZWQgZm9yIDAuMC4wLjAvMCBjYW5ub3Qgbm90IGJlIGVhc2lseSBtYXJrZWQgYW5kXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTE6ICogICAgICBzZW50IHRvIGlwX3ZzX2luX2ljbXAuIFNvLCBjYXRjaCB0aGVtIGF0IHRoZSBORl9JTkVUX0ZPUldBUkQgY2hhaW5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMxMjogKiAgICAgIGFuZCBzZW5kIHRoZW0gdG8gaXBfdnNfaW5faWNtcC5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMxMy0gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIzMTU9aXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzM2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzM3Olx0XHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMzOC0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNDAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNDE6XHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJQ01QIEhhbmRsaW5nIGluIElQVlMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBJQ01QLXJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgYGlwX3ZzX2luX2ljbXBgIGFuZCBgaXBfdnNfb3V0X2ljbXBgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBnZW5lcmFsbHkgaW5kaWNhdGVzIHRoZXkmIzM5O3JlIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIFRoYXQgc3VnZ2VzdHMgdGhleSYjMzk7cmUgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGNvcmUgbG9naWMuCgpOb3csIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgaWYgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIElDTVAgcHJvY2Vzc2luZyBwaXBlbGluZS4KCkdpdmVuIHRoZSBvcHRpb25zLCBteSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgaXBfdnNfaWNtcF94bWl0YCwgd2hpY2ggSSBzZWUgcmVzaWRlcyBpbiBgaXBfdnNfeG1pdC5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBpcF92c19pY21wX3htaXRgIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiBJQ01QIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gd2lsbCBkZWZpbml0ZWx5IGJlIGEgcHJpbWFyeSBmb2N1cyBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1MDM9aW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1MDQ6aXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTUwNS1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNTk3PWludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzoxNTk4OmlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE1OTktXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkNoZWNraW5nIHRoZSBTQ1RQIENoZWNrc3VtIFZlcmlmaWNhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBTQ1RQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzY3RwX2NzdW1fY2hlY2tgIGZ1bmN0aW9uLiBJIGltYWdpbmUgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBJUFZTIHV0aWxpemVzIFNDVFAgZm9yIGxvYWQgYmFsYW5jaW5nLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IGl0IHZhbGlkYXRlcyB0aGUgY2hlY2tzdW0gdG8gZGV0ZXJtaW5lIHBhY2tldCBpbnRlZ3JpdHkgYXMgaXQgcmVsYXRlcyB0byB0aGUgdmlydHVhbCBzZXJ2ZXImIzM5O3MgZnVuY3Rpb24uIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBjaGVja3N1bSBlcnJvcnMgYW5kIGlmIHRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IElQVlMgaGFuZGxlcyBTQ1RQIHRyYWZmaWMgaW4gdGhlIGNvbnRleHQgb2YgbG9hZCBiYWxhbmNpbmcuIFRoaXMgbWlnaHQgYmUgYSByZWZyZXNoZXIgYnV0IGl0IGFsd2F5cyBoZWxwcyB0byBkb3VibGUgY2hlY2sgdGhlc2UgYXNwZWN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBTQ1RQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiB0aGUgSVBWUyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxMzpzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNC1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExMS1cdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjExMjpcdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExMy1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTU5LVx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTYwOlx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTYxLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTg4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTg5OnNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE5MC1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTQ1RQIENoZWNrc3VtIEhhbmRsaW5nIGluIElQVlMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IFNDVFAgY2hlY2tzdW1zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGNvZGUuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc2N0cF9jc3VtX2NoZWNrYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBteSBmb2N1cy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGFuZCBoYW5kbGluZy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWF5IGFsc28gYmUgcmVsZXZhbnQuIEdvb2QsIGNvbmZpcm1lZCwgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBpbmRlZWQgbm9uLXN0YXRpYy4KCk5vdywgSSYjMzk7bSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc3RhdGljIG5hdHVyZSBvZiBhIGZldyByZWxhdGVkIGZ1bmN0aW9ucy4gYGlwX3ZzX2luX2ljbXBgIGlzIHN0YXRpYy4gYGlwX3ZzX291dF9pY21wYCBpcyBhbHNvIHN0YXRpYy4gUGVyZmVjdC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgSVBWUy4gSSYjMzk7dmUgZm91bmQgdGhhdCBgSVBfVlNgIGl0c2VsZiBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYC4gYElQX1ZTX0lQVjZgIHJlcXVpcmVzIGBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZgLiBgSVBfVlNfUFJPVE9fU0NUUGAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIGJleW9uZCBgSVBfVlNgLiBUaGlzIGlzIHVzZWZ1bCwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIG1ha2UgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZlYXR1cmVzIG11Y2ggbW9yZSBzdHJhaWdodCBmb3J3YXJkLgoKVGhlcmVmb3JlLCB0byBlbmFibGUgU0NUUCBzdXBwb3J0LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCwgY3J1Y2lhbGx5LCBgSVBfVlNfUFJPVE9fU0NUUGAuIEkmIzM5O2xsIHdhbnQgdG8gdmVyaWZ5IHRoaXMgZmluYWwgb3B0aW9uLCBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbjoKCioqRXhhbWluaW5nIHRoZSBTQ1RQIExvYWQgQmFsYW5jaW5nIE9wdGlvbioqCgpBbHJpZ2h0LCBJIHJlbWVtYmVyIHNlYXJjaGluZyBmb3IgJiMzNDtTQ1RQJiMzNDsgbm90IHRvbyBsb25nIGFnbywgYW5kIEkgY2FtZSBhY3Jvc3MgdGhhdCBgY29uZmlnIElQX1ZTX1BST1RPX1NDVFBgIGVudHJ5LiBBIHF1aWNrIHZpc3VhbCBjaGVjaywgYW5kIEkgbm90aWNlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGluZSB1c2VzIHR3byBzcGFjZXMgYWZ0ZXIgYGNvbmZpZ2AuIEkgd2lsbCBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIGFkZHJlc3MgdGhpcyBpbiBteSBzdHlsZSBndWlkZWxpbmVzLgoKTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaXRzIGRlcGVuZGVuY2llcy4gSXMgdGhpcyBgSVBfVlNfUFJPVE9fU0NUUGAgb3B0aW9uIGNvbnRpbmdlbnQgdXBvbiBgSVBfU0NUUGAgYmVpbmcgZW5hYmxlZD8gT3IgcGVyaGFwcyBzb21lIG90aGVyIHJlbGF0ZWQgbW9kdWxlPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IGNvbmZpZ3VyaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWRpbmcgYW55IGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMDA9Y29uZmlnXHRJUF9WU19QUk9UT19BSFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNjpjb25maWcgIElQX1ZTX1BST1RPX1NDVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cdGJvb2wgXCYjMzQ7U0NUUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBoYXZlIGhlcmUuCgoqKklQVlMgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpIbW0sIGJhc2VkIG9uIHRoaXMgaW5pdGlhbCBnbGFuY2UsIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSB0aGlzIGNoYW5nZSBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgSVBfU0NUUGAgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcsIHNvIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggbW9kaWZpZWQgYGlwX3ZzX2NvcmUuY2AsIGBpcF92c194bWl0LmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3NjdHAuY2AuIFRob3NlIGZpbGVzIGFyZSBhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBgSVBfVlNgIHN1YnN5c3RlbS4gVGhhdCByZWluZm9yY2VzIHRoZSBpbml0aWFsIGFzc3VtcHRpb24sIGJ1dCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKTm93LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBNYWtlZmlsZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9gLiBJIHdhbnQgdG8gdmVyaWZ5IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGVzZSBmaWxlcyB0byBgSVBfVlNgLiBUaGlzIHNob3VsZCBkZWZpbml0aXZlbHkgc2V0dGxlIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfcHJvdG9fc2N0cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTA9aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICYjNDM7PSBpcF92c19wcm90b19haF9lc3Aub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjExOmlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3NjdHAub1xubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKk5hdmlnYXRpbmcgdGhlIElQVlMgU0NUUCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBg4oCUdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHNldHRpbmcgbG9va3MgcmlnaHQgb24gdGhlIHN1cmZhY2UuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGltcGxpY2F0aW9ucyBieSByZXZpZXdpbmcgdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCBob3cgU0NUUCBzdXBwb3J0IGlzIGludGVncmF0ZWQgaW50byB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgZnJhbWV3b3JrLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBydWxlcyBhc3NvY2lhdGVkIHdpdGggYGlwX3ZzX2NvcmUuY2AgYW5kIGBpcF92c194bWl0LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU0NUUCBwcm90b2NvbCBpcyBzcGVjaWZpY2FsbHkgaGFuZGxlZCB3aXRoaW4gdGhlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgSVBWUyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IFNDVFAgdHJhZmZpYyBpcyB0cmFuc21pdHRlZC4gVGhlIE1ha2VmaWxlcyBzaG91bGQgY2xhcmlmeSBob3cgdGhlIFNDVFAgbW9kdWxlIGlzIGJ1aWx0IGFuZCBsaW5rZWQgaW50byB0aGUgSVBWUyBzeXN0ZW0gYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTQ9aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSAmIzQzOz0gaXBfdnNfbmZjdC5vXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTY6aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlc2Ugb2JqZWN0cyB3aXRoaW4gYGlwX3ZzLW9ianNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIHRoaW5ncyBhcmUgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lQX1ZTYCBpcyBlbmFibGVkLiBTaW1wbGUgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkLgoKUmlnaHQsIHNvIHRoYXQgYm9pbHMgZG93biB0byBlbmFibGluZyBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYElQX1ZTYCBpdHNlbGYgZGVwZW5kcyBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIHByZXNlbnQgYXMgd2VsbC4gQW5kIGBJUF9WU19JUFY2YCBoYXMgYSBkZXBlbmRlbmN5IG9uIGVpdGhlciBgSVBWNiA9IHlgIG9yIGBJUF9WUyA9IElQVjZgLCBzbyBJIGJldHRlciBpbmNsdWRlIGBJUFY2YCBqdXN0IGluIGNhc2UuCgpXaGlsZSB1c3VhbGx5IGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBhbnl3YXksIGl0JiMzOTtzIGFsd2F5cyBzYWZlciB0byBleHBsaWNpdGx5IGluY2x1ZGUgdGhlbSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBjb21waWxhdGlvbiBwcm9ibGVtcy4gU3l6a2FsbGVyIHRlbmRzIHRvIGhhdmUgYElORVRgIGFuZCBgTkVURklMVEVSYCBlbmFibGVkLCBzbyBJIHRoaW5rIEkmIzM5O20gc2FmZSB0byBpbmNsdWRlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCwganVzdCBpbiBjYXNlLgoKTm93LCBsZXQmIzM5O3Mga2VlcCB0cmFjayBvZiB0aG9zZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb246IGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdGAuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgaWYgYGlwX3ZzX25hdF9pY21wX3Y2YCBpcyBub24tc3RhdGljOyB0aGF0JiMzOTtzIHNvbWV0aGluZyBJIGRvbiYjMzk7dCB3YW50IHRvIG92ZXJsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05NTM9dm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk2LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5OTc6dm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05OTgtXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMDQ5PXN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTA4MS1cdGlmIChhZiA9PSBBRl9JTkVUNilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA4MjpcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwODMtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTgwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBpcF92c19uYXRfaWNtcF92NmAgYW5kIEkgYWxyZWFkeSBrbm93IHRoYXQgb25lIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgaGF2ZSwgaXQgbG9va3MgbGlrZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYWxsIGludGVyYWN0IGluIHRoaXMgbm9uLXN0YXRpYyBjb250ZXh0LCBhbmQgSSBrbm93IEkgaGF2ZSB0byBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiBgaXBfdnNfaWNtcF94bWl0X3Y2YCBzaGFyZXMgdGhlIHNhbWUgcHJvcGVydGllcyBvZiBiZWluZyBub24tc3RhdGljLCBnaXZlbiB0aGF0IGl0cyBsaWtlbHkgcmVsYXRlZCB0byB0aGVzZSBvdGhlcnMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTE1OTc9aW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTg6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTU5OS1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjM4CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDExMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTkFUIGFuZCBDaGVja3N1bSBQYXRjaCoqCgpPa2F5LCBzbyBgaXBfdnNfaWNtcF94bWl0X3Y2YCBpcyBkZWZpbml0ZWx5ICpub3QqIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyBnb29kIHRvIGNsYXJpZnkuIExldCYjMzk7cyBzZWUuLi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBpcF92c19pY21wX3htaXRgIGluIGBpcF92c194bWl0LmNgLiAgSSBzZWUgdGhlIGRpZmY6IGl0JiMzOTtzIHVwZGF0aW5nIGBpcF92c19uYXRfaWNtcGAsIHNwZWNpZmljYWxseSBhZGRpbmcgYGNpcGhgIHRvIHRoZSBmdW5jdGlvbiBjYWxsLiAgUmlnaHQsIGl0IG9ubHkgbW9kaWZpZXMgdGhlIGNhbGwuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgYGlwX3ZzX25hdF9pY21wYC4gQWhhLCB0aGF0JiMzOTtzIGluIGBpcF92c19jb3JlLmNgLiBUaGUgc2lnbmF0dXJlIG9mIGBpcF92c19uYXRfaWNtcGAgaXMgYmVpbmcgdXBkYXRlZCB0aGVyZS4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBpcF92c19uYXRfaWNtcF92NmAgaW4gdGhhdCBzYW1lIGZpbGUgaXNuJiMzOTt0IGNoYW5nZWQuIEFuZCwgZnVydGhlciBkb3duLCB0aGUgY2FsbCBpbiBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgICphbHNvKiBnZXRzIHRoZSB1cGRhdGUuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQsIHRoZSBmb2N1cyBmb3IgZnV6emluZywgYXJlOgoKKiAgIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgICh0aGF0JiMzOTtzIG5vbi1zdGF0aWMsIHJlbWVtYmVyKQoqICAgYGlwX3ZzX25hdF9pY21wYCAodGhlIGFjdHVhbCBjaGFuZ2UpCiogICBgaXBfdnNfaWNtcF94bWl0YAoKSSBzaG91bGQgZG91YmxlLWNoZWNrIGFib3V0IGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgIGJlaW5nIG5vbi1zdGF0aWMuLi4gWXVwLCBJIGNhbiBzZWUgdGhlIGRlY2xhcmF0aW9uLiBJdCYjMzk7cyBwdWJsaWMsIG5vdCBzdGF0aWMuCgpBbmQgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB3ZWxsLCB0aGlzIHRvdWNoZXMgZ2VuZXJhbCBJUFZTIElDTVAgZnVuY3Rpb25hbGl0eSwgc28gd2UmIzM5O2xsIG5lZWQgYElQX1ZTYCwgYElQX1ZTX0lQVjZgLCBhbmQgcHJvYmFibHkgYElQX1ZTX1BST1RPX1NDVFBgIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIFNDVFAgYW5kIElDTVAgZXJyb3JzLgoKVGhlIHBhdGNoIGFsdGVycyBjb3JlIElQVlMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaGFzIG5ldHdvcmstZmFjaW5nIGxvZ2ljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gdHJ5IHNvbWUgZnV6emluZy4gSXQmIzM5O3MgY2hhbmdpbmcgaG93IHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgc28gd2UgY2FuIGxpa2VseSBjcmVhdGUgc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHNjZW5hcmlvcy4KCkkgdGhpbmsgSSYjMzk7dmUgZ290IHRoaXMuIExldCYjMzk7cyBzZW5kIHRoZXNlIHJlc3VsdHMgYW5kIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHBhcnNlZCBhbmQgTkFULWVkLCBhbmQgZml4ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHBhcnNlZCBhbmQgTkFULWVkLCBhbmQgZml4ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MDcuNDk0NDY1NDgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MDQ5NDIwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19pY21wX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwYXJzZWQgYW5kIE5BVC1lZCwgYW5kIGZpeGVzIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MDcuNDk0NDczMDExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTMxMTYyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZmY1ZjA1ZmVhYzZmYTczOGZlZGQ5ZDY1M2I3YjI4ODc0ZGNmNTBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjA0OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuaW5kZXggZTZjYTkzMGEzNTA3Yi4uMTBmNWNlNzZhMGFlMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbkBAIC0yNSw5ICsyNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXHRcXHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcdFxcdFxcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9maWIuaFxcdTAwM2VcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICNlbmRpZlxcbkBAIC0yMDYyLDcgKzIwNjAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4tXFx0XFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcXG4rXFx0XFx0ICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5AQCAtMjA5NSwzMiArMjA5Myw4IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIFxcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcXG4te1xcbi1cXHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cXG4tXFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0LyogTE9DQUxfT1VUID8gKi9cXG4tXFx0aWYgKCFza2ItXFx1MDAzZWRldiB8fCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXFxuLVxcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbi1cXHRcXHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cXHUwMDNlcnQ2aV9mbGFncyBcXHUwMDI2IFJURl9MT0NBTCkpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IFJUQ0ZfTE9DQUwpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKVxcbi17XFxuLVxcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcXG4tfVxcbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCBpbnQgYWYpO1xcbiBcXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuaW5kZXggNmI3OWUwYzRkOWUyOC4uYTUxNDE4YTQ0OWNjYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbkBAIC04NzIsNiArODcyLDMzIEBAIHN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIFxcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xcbiB9XFxuIFxcbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXFxuK1xcdFxcdFxcdFxcdCBpbnQgYWYpXFxuK3tcXG4rXFx0X193c3VtIGNzdW07XFxuK1xcbitcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKVxcbitcXHRcXHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXFx1MDAzZWxlbiAtIG9mZnNldCwgMCk7XFxuK1xcdGVsc2UgaWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbitcXHRcXHRjc3VtID0gY3N1bV9zdWIoc2tiLVxcdTAwM2Vjc3VtLCBza2JfY2hlY2tzdW0oc2tiLCAwLCBvZmZzZXQsIDApKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbitcXHRpZiAoYWYgPT0gQUZfSU5FVDYpXFxuK1xcdFxcdHJldHVybiAhY3N1bV9pcHY2X21hZ2ljKFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWxlbiAtIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0cHJvdG8sIGNzdW0pO1xcbisjZW5kaWZcXG4rXFx0aWYgKHByb3RvID09IElQUFJPVE9fSUNNUClcXG4rXFx0XFx0cmV0dXJuICFjc3VtX2ZvbGQoY3N1bSk7XFxuK1xcdHJldHVybiAhY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXFx1MDAzZXNhZGRyLCBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQsIHByb3RvLCBjc3VtKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBlbnVtIGlwX2RlZnJhZ191c2VycyBpcF92c19kZWZyYWdfdXNlcih1bnNpZ25lZCBpbnQgaG9va251bSlcXG4ge1xcbiBcXHRpZiAoTkZfSU5FVF9MT0NBTF9JTiA9PSBob29rbnVtKVxcbkBAIC05MjUsMjggKzk1MiwyNyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxcbiAgKi9cXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbi1cXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpXFxuK1xcdFxcdCAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxcbiB7XFxuIFxcdHN0cnVjdCBpcGhkciAqaXBoXFx0ID0gaXBfaGRyKHNrYik7XFxuIFxcdHN0cnVjdCBpY21waGRyICppY21waFxcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0b2ZmKTtcXG4tXFx0c3RydWN0IGlwaGRyICpjaXBoXFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xcbi1cXHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmNpaFxcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbiBcXHRcXHRpcF9zZW5kX2NoZWNrKGlwaCk7XFxuLVxcdFxcdGNpcGgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbi1cXHRcXHRpcF9zZW5kX2NoZWNrKGNpcGgpO1xcbitcXHRcXHRjaWgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbitcXHRcXHRpcF9zZW5kX2NoZWNrKGNpaCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlwaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuIFxcdFxcdGlwX3NlbmRfY2hlY2soaXBoKTtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuLVxcdFxcdGlwX3NlbmRfY2hlY2soY2lwaCk7XFxuK1xcdFxcdGNpaC1cXHUwMDNlc2FkZHIgPSBjcC1cXHUwMDNlZGFkZHIuaXA7XFxuK1xcdFxcdGlwX3NlbmRfY2hlY2soY2loKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXFxuIFxcdGlmIChoYXNfcG9ydHMpIHtcXG4tXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCArIGNpcGgtXFx1MDAzZWlobCo0O1xcbitcXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVxcdTAwM2VkYXRhICsgY2lwaC1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdFxcdGlmIChpbm91dClcXG4gXFx0XFx0XFx0cG9ydHNbMV0gPSBjcC1cXHUwMDNldnBvcnQ7XFxuQEAgLTk2MCwxMCArOTg2LDEwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcXG4gXFxuIFxcdGlmIChpbm91dClcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVBcXFwiKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUFxcXCIpO1xcbiB9XFxuIFxcbkBAIC0xMDU2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XFxuIFxcdGVsc2VcXG4gI2VuZGlmXFxuLVxcdFxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFxuIFxcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXFx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5Miw3ICsxMTE4LDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuIFxcdHN0cnVjdCBpcF92c19jb25uICpjcDtcXG4gXFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldCwgaWhsO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbiBcXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcXG4gXFxuIFxcdCpyZWxhdGVkID0gMTtcXG5AQCAtMTEwNSw3ICsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0fVxcbiBcXG4tXFx0aWhsID0gaXB2c2gtXFx1MDAzZWxlbjtcXG4gXFx0b2Zmc2V0ID0gaXB2c2gtXFx1MDAzZWxlbjtcXG4gXFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcXHUwMDI2X2ljbXBoKTtcXG4gXFx0aWYgKGljID09IE5VTEwpXFxuQEAgLTExMzEsMTEgKzExNTYsMTUgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuIFxcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcXG4rXFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgdHJ1ZSwgXFx1MDAyNmNpcGgpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4rXFxuIFxcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4tXFx0aWYgKCEoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNlaWhsIFxcdTAwM2U9IDUpKVxcbitcXHRpZiAoIShjaWggXFx1MDAyNlxcdTAwMjYgY2loLVxcdTAwM2V2ZXJzaW9uID09IDQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgY2lwaC5sZW4gLSBjaXBoLm9mZiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xcbiBcXG4tXFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVxcdTAwM2Vwcm90b2NvbCk7XFxuK1xcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpcGgucHJvdG9jb2wpO1xcbiBcXHRpZiAoIXBwKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG5AQCAtMTE0Niw4ICsxMTc1LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxcbiBcXHRcXHQgICAgICBcXFwiQ2hlY2tpbmcgb3V0Z29pbmcgSUNNUCBmb3JcXFwiKTtcXG4gXFxuLVxcdGlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCB0cnVlLCBcXHUwMDI2Y2lwaCk7XFxuLVxcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXFxuIFxcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVxcdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG4gXFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVULCBza2IsIFxcdTAwMjZjaXBoKTtcXG5AQCAtMTE1NSw4ICsxMTgyLDggQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdHNuZXQuaXAgPSBpcHZzaC1cXHUwMDNlc2FkZHIuaXA7XFxuLVxcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFxcdTAwMjZzbmV0LCBjcCwgcHAsIFxcdTAwMjZjaXBoLCBpaGwsXFxuLVxcdFxcdFxcdFxcdCAgICBob29rbnVtKTtcXG4rXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuQEAgLTE4MDMsMTAgKzE4MzAsMTIgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XFxuIFxcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4tXFx0aWYgKCEoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNlaWhsIFxcdTAwM2U9IDUpKVxcbitcXHRpZiAoIWNpaClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuLVxcdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVxcdTAwMjZjaWgtXFx1MDAzZWRhZGRyO1xcbiBcXHRobGVuX2lwaXAgPSBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlmICghKGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGhsZW5faXBpcCBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xcbitcXHRyYWRkciA9ICh1bmlvbiBuZl9pbmV0X2FkZHIgKilcXHUwMDI2Y2loLVxcdTAwM2VkYWRkcjtcXG4gXFxuIFxcdC8qIFNwZWNpYWwgY2FzZSBmb3IgZXJyb3JzIGZvciBJUElQL1VEUC9HUkUgdHVubmVsIHBhY2tldHMgKi9cXG4gXFx0dHVubmVsID0gZmFsc2U7XFxuQEAgLTE4MjMsOSArMTg1Miw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0XFx0aWYgKCFkZXN0IHx8IGRlc3QtXFx1MDAzZXR1bl90eXBlICE9IElQX1ZTX0NPTk5fRl9UVU5ORUxfVFlQRV9JUElQKVxcbiBcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRcXHRvZmZzZXQgKz0gaGxlbl9pcGlwO1xcbi1cXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFxcdTAwMjZfY2lwaCk7XFxuLVxcdFxcdGlmICghKGNpaCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZWlobCBcXHUwMDNlPSA1KSlcXG4tXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuIFxcdFxcdHR1bm5lbCA9IHRydWU7XFxuIFxcdH0gZWxzZSBpZiAoKGNpaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcXHQvKiBDYW4gYmUgVURQIGVuY2FwICovXFxuIFxcdFxcdCAgICBjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fR1JFKSBcXHUwMDI2XFx1MDAyNlxcdC8qIENhbiBiZSBHUkUgZW5jYXAgKi9cXG5AQCAtMTg1MCwyMSArMTg3NiwyNSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdFxcdFxcdC8qIFNraXAgSVAgYW5kIFVEUC9HUkUgdHVubmVsIGhlYWRlcnMgKi9cXG4gXFx0XFx0XFx0b2Zmc2V0ID0gb2Zmc2V0MiArIHVsZW47XFxuIFxcdFxcdFxcdC8qIE5vdyB3ZSBzaG91bGQgYmUgYXQgdGhlIG9yaWdpbmFsIElQIGhlYWRlciAqL1xcbi1cXHRcXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2X2NpcGgpO1xcbi1cXHRcXHRcXHRpZiAoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNlaWhsIFxcdTAwM2U9IDUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGlwcm90byA9PSBJUFBST1RPX0lQSVApXFxuK1xcdFxcdFxcdGlmIChpcHJvdG8gPT0gSVBQUk9UT19JUElQKVxcbiBcXHRcXHRcXHRcXHR0dW5uZWwgPSB0cnVlO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaWgtXFx1MDAzZXByb3RvY29sKTtcXG4rXFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgIXR1bm5lbCwgXFx1MDAyNmNpcGgpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXHRwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KGlwdnMsIGNpcGgucHJvdG9jb2wpO1xcbiBcXHRpZiAoIXBkKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRwcCA9IHBkLVxcdTAwM2VwcDtcXG4gXFxuK1xcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXFx1MDAyNl9jaXBoKTtcXG4rXFx0aWYgKCEoY2loIFxcdTAwMjZcXHUwMDI2IGNpaC1cXHUwMDNldmVyc2lvbiA9PSA0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIGNpcGgubGVuIC0gY2lwaC5vZmYgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4rXFxuIFxcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4gXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2ICFwcC1cXHUwMDNlZG9udF9kZWZyYWcpKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbkBAIC0xODcyLDkgKzE5MDIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcXG4gXFx0XFx0ICAgICAgXFxcIkNoZWNraW5nIGluY29taW5nIElDTVAgZm9yXFxcIik7XFxuIFxcbi1cXHRvZmZzZXQyID0gb2Zmc2V0O1xcbi1cXHRpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgIXR1bm5lbCwgXFx1MDAyNmNpcGgpO1xcbi1cXG4gXFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cXG4gXFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cXG4gXFx0ICovXFxuQEAgLTE5MDQsMTEgKzE5MzEsMTIgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodHVubmVsKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBobGVuX29yaWcgPSBjaXBoLmxlbiAtIGNpcGgub2ZmO1xcbiBcXHRcXHRfX2JlMzIgaW5mbyA9IGljLVxcdTAwM2V1bi5nYXRld2F5O1xcbiBcXHRcXHRfX3U4IHR5cGUgPSBpYy1cXHUwMDNldHlwZTtcXG4gXFx0XFx0X191OCBjb2RlID0gaWMtXFx1MDAzZWNvZGU7XFxuIFxcbitcXHRcXHRvZmZzZXQyID0gb2Zmc2V0O1xcbiBcXHRcXHQvKiBVcGRhdGUgdGhlIE1UVSAqL1xcbiBcXHRcXHRpZiAoaWMtXFx1MDAzZXR5cGUgPT0gSUNNUF9ERVNUX1VOUkVBQ0ggXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGljLVxcdTAwM2Vjb2RlID09IElDTVBfRlJBR19ORUVERUQpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG5pbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTE5Myw3ICsxOTMsNyBAQCBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRzdHJ1Y3Qgc2N0cGhkciAqc2g7XFxuIFxcdF9fbGUzMiBjbXAsIHZhbDtcXG4gXFxuLVxcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxcbitcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDBiMGM1MzA0OTkzYTkuLmM0NTA4ZjNmNDNkZDMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNcXG5AQCAtMTU4MCw3ICsxNTgwLDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xcbitcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFxuIFxcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXFxuIFxcdHNrYi1cXHUwMDNlaWdub3JlX2RmID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MDcuOTA4MTgzNjI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzgyOTEyMDczMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19pY21wX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpIHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwYXJzZWQgYW5kIE5BVC1lZCwgYW5kIGZpeGVzIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWZmNWYwNWZlYWM2ZmE3MzhmZWRkOWQ2NTNiN2IyODg3NGRjZjUwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjA0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IGU2Y2E5MzBhMzUwN2IuLjEwZjVjZTc2YTBhZTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsOSArMjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTIwNjIsNyArMjA2MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbi1cdFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcbitcdFx0ICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbkBAIC0yMDk1LDMyICsyMDkzLDggQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbiBcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcbi17XG4tXHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cbi1cdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHQvKiBMT0NBTF9PVVQgPyAqL1xuLVx0aWYgKCFza2ItXHUwMDNlZGV2IHx8IHNrYi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSylcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXG4tXHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0aWYgKCEoZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSktXHUwMDNlcnQ2aV9mbGFncyBcdTAwMjYgUlRGX0xPQ0FMKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoIShza2JfcnRhYmxlKHNrYiktXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IFJUQ0ZfTE9DQUwpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbi17XG4tXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xuLX1cbitib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXG4rXHRcdFx0XHQgaW50IGFmKTtcbiBcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCA2Yjc5ZTBjNGQ5ZTI4Li5hNTE0MThhNDQ5Y2NiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTg3Miw2ICs4NzIsMzMgQEAgc3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuIFxuK2Jvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBwcm90byxcbitcdFx0XHRcdCBpbnQgYWYpXG4re1xuK1x0X193c3VtIGNzdW07XG4rXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKVxuK1x0XHRjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKTtcbitcdGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG4rXHRcdGNzdW0gPSBjc3VtX3N1Yihza2ItXHUwMDNlY3N1bSwgc2tiX2NoZWNrc3VtKHNrYiwgMCwgb2Zmc2V0LCAwKSk7XG4rXHRlbHNlXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuK1x0aWYgKGFmID09IEFGX0lORVQ2KVxuK1x0XHRyZXR1cm4gIWNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0XHRcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuK1x0XHRcdFx0XHRza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LFxuK1x0XHRcdFx0XHRwcm90bywgY3N1bSk7XG4rI2VuZGlmXG4rXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JQ01QKVxuK1x0XHRyZXR1cm4gIWNzdW1fZm9sZChjc3VtKTtcbitcdHJldHVybiAhY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuK1x0XHRcdFx0ICBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCBwcm90bywgY3N1bSk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgZW51bSBpcF9kZWZyYWdfdXNlcnMgaXBfdnNfZGVmcmFnX3VzZXIodW5zaWduZWQgaW50IGhvb2tudW0pXG4ge1xuIFx0aWYgKE5GX0lORVRfTE9DQUxfSU4gPT0gaG9va251bSlcbkBAIC05MjUsMjggKzk1MiwyNyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbi1cdFx0ICAgIGJvb2wgaGFzX3BvcnRzKVxuK1x0XHQgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSArIHRvZmYpO1xuLVx0c3RydWN0IGlwaGRyICpjaXBoXHQgPSAoc3RydWN0IGlwaGRyICopKGljbXBoICsgMSk7XG4tXHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xuK1x0c3RydWN0IGlwaGRyICpjaWhcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiBcdFx0aXBfc2VuZF9jaGVjayhpcGgpO1xuLVx0XHRjaXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG4tXHRcdGlwX3NlbmRfY2hlY2soY2lwaCk7XG4rXHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmlwO1xuK1x0XHRpcF9zZW5kX2NoZWNrKGNpaCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2VkYWRkci5pcDtcbiBcdFx0aXBfc2VuZF9jaGVjayhpcGgpO1xuLVx0XHRjaXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaXA7XG4tXHRcdGlwX3NlbmRfY2hlY2soY2lwaCk7XG4rXHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuK1x0XHRpcF9zZW5kX2NoZWNrKGNpaCk7XG4gXHR9XG4gXG4gXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cbiBcdGlmIChoYXNfcG9ydHMpIHtcbi1cdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCArIGNpcGgtXHUwMDNlaWhsKjQ7XG4rXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlbGVuKTtcbiBcbiBcdFx0aWYgKGlub3V0KVxuIFx0XHRcdHBvcnRzWzFdID0gY3AtXHUwMDNldnBvcnQ7XG5AQCAtOTYwLDEwICs5ODYsMTAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuIH1cbiBcbkBAIC0xMDU2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXHRlbHNlXG4gI2VuZGlmXG4tXHRcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMpO1xuK1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTIsNyArMTExOCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDtcbiBcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbiBcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpaGw7XG4rXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7XG4gXG4gXHQqcmVsYXRlZCA9IDE7XG5AQCAtMTEwNSw3ICsxMTMxLDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aWhsID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG5AQCAtMTEzMSwxMSArMTE1NiwxNSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0LyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi9cbiBcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcbitcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbitcbiBcdGNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgXHUwMDI2X2NpcGgpO1xuLVx0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4rXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2XG4rXHQgICAgICBjaXBoLmxlbiAtIGNpcGgub2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcbi1cdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC1cdTAwM2Vwcm90b2NvbCk7XG4rXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaXBoLnByb3RvY29sKTtcbiBcdGlmICghcHApXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG5AQCAtMTE0Niw4ICsxMTc1LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbiBcdFx0ICAgICAgXCJDaGVja2luZyBvdXRnb2luZyBJQ01QIGZvclwiKTtcbiBcbi1cdGlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCB0cnVlLCBcdTAwMjZjaXBoKTtcbi1cbiBcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXIgKi9cbiBcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxuIFx0XHRcdCAgICAgaXB2cywgQUZfSU5FVCwgc2tiLCBcdTAwMjZjaXBoKTtcbkBAIC0xMTU1LDggKzExODIsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pcCA9IGlwdnNoLVx1MDAzZXNhZGRyLmlwO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLCBpaGwsXG4tXHRcdFx0XHQgICAgaG9va251bSk7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsXG4rXHRcdFx0XHQgICAgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTgwMywxMCArMTgzMCwxMiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbitcdGlmICghY2loKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbi1cdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVx1MDAyNmNpaC1cdTAwM2VkYWRkcjtcbiBcdGhsZW5faXBpcCA9IGNpaC1cdTAwM2VpaGwgKiA0O1xuK1x0aWYgKCEoY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgaGxlbl9pcGlwIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbitcdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVx1MDAyNmNpaC1cdTAwM2VkYWRkcjtcbiBcbiBcdC8qIFNwZWNpYWwgY2FzZSBmb3IgZXJyb3JzIGZvciBJUElQL1VEUC9HUkUgdHVubmVsIHBhY2tldHMgKi9cbiBcdHR1bm5lbCA9IGZhbHNlO1xuQEAgLTE4MjMsOSArMTg1Miw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdFx0aWYgKCFkZXN0IHx8IGRlc3QtXHUwMDNldHVuX3R5cGUgIT0gSVBfVlNfQ09OTl9GX1RVTk5FTF9UWVBFX0lQSVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0b2Zmc2V0ICs9IGhsZW5faXBpcDtcbi1cdFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZWlobCBcdTAwM2U9IDUpKVxuLVx0XHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuIFx0XHR0dW5uZWwgPSB0cnVlO1xuIFx0fSBlbHNlIGlmICgoY2loLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XHQvKiBDYW4gYmUgVURQIGVuY2FwICovXG4gXHRcdCAgICBjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19HUkUpIFx1MDAyNlx1MDAyNlx0LyogQ2FuIGJlIEdSRSBlbmNhcCAqL1xuQEAgLTE4NTAsMjEgKzE4NzYsMjUgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHRcdC8qIFNraXAgSVAgYW5kIFVEUC9HUkUgdHVubmVsIGhlYWRlcnMgKi9cbiBcdFx0XHRvZmZzZXQgPSBvZmZzZXQyICsgdWxlbjtcbiBcdFx0XHQvKiBOb3cgd2Ugc2hvdWxkIGJlIGF0IHRoZSBvcmlnaW5hbCBJUCBoZWFkZXIgKi9cbi1cdFx0XHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksXG4tXHRcdFx0XHRcdFx0IFx1MDAyNl9jaXBoKTtcbi1cdFx0XHRpZiAoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaXByb3RvID09IElQUFJPVE9fSVBJUClcbitcdFx0XHRpZiAoaXByb3RvID09IElQUFJPVE9fSVBJUClcbiBcdFx0XHRcdHR1bm5lbCA9IHRydWU7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaWgtXHUwMDNlcHJvdG9jb2wpO1xuK1x0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVULCBza2IsIG9mZnNldCwgIXR1bm5lbCwgXHUwMDI2Y2lwaCkpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXHRwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KGlwdnMsIGNpcGgucHJvdG9jb2wpO1xuIFx0aWYgKCFwZClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4rXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFx1MDAyNl9jaXBoKTtcbitcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjZcbitcdCAgICAgIGNpcGgubGVuIC0gY2lwaC5vZmYgXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwaGRyKSkpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuK1xuIFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuIFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbkBAIC0xODcyLDkgKzE5MDIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG4gXHRcdCAgICAgIFwiQ2hlY2tpbmcgaW5jb21pbmcgSUNNUCBmb3JcIik7XG4gXG4tXHRvZmZzZXQyID0gb2Zmc2V0O1xuLVx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cbiBcdCAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuXG4gXHQgKi9cbkBAIC0xOTA0LDExICsxOTMxLDEyIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdH1cbiBcbiBcdGlmICh0dW5uZWwpIHtcbi1cdFx0dW5zaWduZWQgaW50IGhsZW5fb3JpZyA9IGNpaC1cdTAwM2VpaGwgKiA0O1xuK1x0XHR1bnNpZ25lZCBpbnQgaGxlbl9vcmlnID0gY2lwaC5sZW4gLSBjaXBoLm9mZjtcbiBcdFx0X19iZTMyIGluZm8gPSBpYy1cdTAwM2V1bi5nYXRld2F5O1xuIFx0XHRfX3U4IHR5cGUgPSBpYy1cdTAwM2V0eXBlO1xuIFx0XHRfX3U4IGNvZGUgPSBpYy1cdTAwM2Vjb2RlO1xuIFxuK1x0XHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0XHQvKiBVcGRhdGUgdGhlIE1UVSAqL1xuIFx0XHRpZiAoaWMtXHUwMDNldHlwZSA9PSBJQ01QX0RFU1RfVU5SRUFDSCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGljLVx1MDAzZWNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXG5pbmRleCAzZGJkMzA5NmUxNjM3Li5kZDU0YTM3ZGVlMjkzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTE5Myw3ICsxOTMsNyBAQCBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0c3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0X19sZTMyIGNtcCwgdmFsO1xuIFxuLVx0aWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCAwYjBjNTMwNDk5M2E5Li5jNDUwOGYzZjQzZGQzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1ODAsNyArMTU4MCw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuK1x0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXG4gXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xuIFx0c2tiLVx1MDAzZWlnbm9yZV9kZiA9IDE7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDowNy45MDgxODU1MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgwNDc5NTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgSVBWUyBJQ01QIE5BVCBhbmQgQ2hlY2tzdW0gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gdGhlIElQVlMgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNgLCB3aXRoIHNvbWUgbWlub3IgdG91Y2hlcyBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY2AgYW5kIGBpbmNsdWRlL25ldC9pcF92cy5oYC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGl0J3MgYWRkcmVzc2luZyBzb21lIElDTVAgTkFUIGlzc3VlcyB3aXRoaW4gSVBWUywgdGhlIElQIFZpcnR1YWwgU2VydmVyIGNvbXBvbmVudC4gVGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcvbmV0ZmlsdGVyIHNwYWNlLCBjb3JlIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggTkFUIGFuZCBjaGVja3N1bXMsIEknbSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgZ29pbmcgdG8gaW52b2x2ZSBwYWNrZXQgbWFuaXB1bGF0aW9uLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlbGV2YW50KiB0byBmdXp6aW5nPyBXZWxsLCBkdWghIElQVlMgaXMgYSBsb2FkIGJhbGFuY2VyIHRoYXQncyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgcGFja2V0cywgaGVhdmlseSB1c2VkIGluIHJlYWwtd29ybGQgZGVwbG95bWVudHMuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgcGFja2V0IHBhcnNpbmcgYW5kIE5BVCBsb2dpYyBkaXJlY3RseSwgYW5kIElDTVAgcGFyc2luZyBpcyAqbm90b3Jpb3VzKiBmb3IgYmVpbmcgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSB0YXJnZXQuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBtb2RpZmllZC4gSSdtIHNlZWluZyBjaGFuZ2VzIHRvIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBzY3RwX2NzdW1fY2hlY2tgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdGAuIFRob3NlIGZ1bmN0aW9ucyBhcmUga2V5LCBzbyBJJ2xsIGJlIGtlZXBpbmcgYSBjbG9zZSBleWUgb24gdGhvc2UuIEVzcGVjaWFsbHkgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYW5kIGBpcF92c19pY21wX3htaXRgIGFyZSBteSBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIGtub3cgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgSVBWUy4gVXN1YWxseSwgSSdkIGV4cGVjdCBpdCB0byBiZSBgQ09ORklHX0lQX1ZTYC4gVGltZSB0byBydW4gYSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY29uZmlybS4gSSdsbCBuZWVkIHRvIGtub3cgdGhpcyBmb3IgcHJvcGVyIGJ1aWxkIGFuZCBmdXp6IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDoxOS43MTI5ODQ1MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNTQ3ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDoxOS45NzY1MzcwNjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA4NTQ2ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYElQX1ZTYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYElQX1ZTYCBub3cuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIGJleW9uZCBqdXN0IHRoZSBvYnZpb3VzIGtlcm5lbCBtb2R1bGVzLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIG5ldHdvcmsgc3RhY2sgZmVhdHVyZXMsIHBlcmhhcHMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIG9yIHJvdXRpbmcgdGhhdCBpdCByZWxpZXMgdXBvbj8gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdXNlci1zcGFjZSB0b29scy4gRG9lcyBgaXB2c2FkbWAgaGF2ZSBhbnkgbm9uLW9idmlvdXMgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW1wYWN0IGl0cyBmdW5jdGlvbmFsaXR5IG9yIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmsgZWNvc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIGNvbmZsaWN0cyBjb3VsZCBhcmlzZSBpZiB0aGlzIG1vZHVsZSBvciBpdHMgZGVwZW5kZW5jaWVzIGFyZSBub3Qgd29ya2luZyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjIzLjA4NTA4NTYxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY1NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI5PWNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcXHRJUF9WU19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBoZWxwZXJcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cXHRcXHRORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXFx0SVBfVlNfTkZDVFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZ1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDAtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDg6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM1NDpcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MjMuMTI2NzQ1Njg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNDU1OTE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaGVyZSBpcyB0aGF0IHdlJ3JlIGdvaW5nIHRvIG5lZWQgYElQX1ZTYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpbXBsaWVkIGJ5IHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoaXMgcGF0Y2ggYWxzbyBpbnZvbHZlcyBJUHY2IGNvZGU7IHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IGAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZgLCBhcmUgcHJldHR5IGV4cGxpY2l0IGFib3V0IHRoYXQuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHdhbnQgYElQX1ZTX0lQVjZgIGRlZmluZWQuIFRoYXQncyBhIGdpdmVuLiBBbmQgd2FpdCwgSSdtIHNlZWluZyB0aGlzIGFsc28gdG91Y2hlcyBgaXBfdnNfcHJvdG9fc2N0cC5jYCEgUmlnaHQsIFNDVFAsIGludGVyZXN0aW5nLiBTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHdlJ2xsIHJlcXVpcmUgYElQX1ZTX1BST1RPX1NDVFBgIHRvby4gTGV0IG1lIGNvbmZpcm0gdGhhdCBleGlzdHMuIExldCdzIHNlZSBpZiB3ZSBuZWVkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MjYuNTUxMzA4NzkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzI0NzIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNfUFJPVE9fU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MjYuNTk0MDQyODMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMjYxNjQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRpZ2dpbmcgaW50byBJUFZTIGFuZCBTQ1RQIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSBhbmQgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGVzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGJ1aWxkLXRpbWUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGUgZGlyZWN0b3J5IGBuZXQvbmV0ZmlsdGVyL2lwdnNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIElQVlMgbGl2ZXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGl0ICpzaG91bGQqIGJlIGluIHRoZXJlLiBTbywgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IFNDVFAgc3VwcG9ydC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEknbSBob3BpbmcgZm9yIHNvbWUgZGlyZWN0IHJlZmVyZW5jZXMsIHBlcmhhcHMgYSBgY29uZmlnYCBvcHRpb24gb3Igc29tZSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4uLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDozMC4xMTY2NjEyNjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzkwNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTAwPWNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwNzpcXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA4LVxcdHNlbGVjdCBORVRfQ1JDMzJDXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA5LVxcdGhlbHBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMTA6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFNDVFAgdHJhbnNwb3J0XFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTExLVxcdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MzAuMTU4MDYwMjQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTEyNjUxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSVBWUyBTQ1RQIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYElQX1ZTX1BST1RPX1NDVFBgIGFnYWluLiBBbmQgaW1tZWRpYXRlbHksIEknbSBhbHJlYWR5IHNwb3R0aW5nIGEgbWlub3IgY29kZSBzdHlsZSBpc3N1ZSDigJMgdGhhdCBkb3VibGUgc3BhY2UgYWZ0ZXIgYGNvbmZpZ2AuIEFsd2F5cyBzb21ldGhpbmcsIGlzbid0IHRoZXJlP1xuXG5NeSBicmFpbidzIGFscmVhZHkgZ29pbmcgZG93biB0aGUgY2hlY2tsaXN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBjb3JlIG9mIHRoZSBJUFZTIFNDVFAgaGFuZGxpbmcuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9ucyBpbiBib3RoIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYCBmb3Igc2V0dXAgYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgYWxzbyBwZWVrIGF0IGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jYCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgdHJhbnNtaXNzaW9uIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIGhvdyBTQ1RQIHRyYWZmaWMgaXMgYmVpbmcgaGFuZGxlZCwgcGFydGljdWxhcmx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhbmRhcmQgSVBWUyBmcmFtZXdvcmsuIEkgc3VzcGVjdCB0aGVyZSBtYXkgaGF2ZSBiZWVuIHR3ZWFrcyBuZWNlc3NhcnkgZ2l2ZW4gdGhlIGluaGVyZW50IGNvbXBsZXhpdGllcyBvZiBTQ1RQJ3MgbXVsdGktaG9taW5nIGFuZCBtdWx0aS1zdHJlYW0gbmF0dXJlLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHR3ZWFrcyBhcmUgaW1wbGVtZW50ZWQgc2FmZWx5IGFuZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDozMy45MDkzMjg1MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODk3MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKmlwX3ZzX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODk9Y29uc3QgY2hhciAqaXBfdnNfcHJvdG9fbmFtZSh1bnNpZ25lZCBpbnQgcHJvdG8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTExMy1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjExNDp2b2lkIGlwX3ZzX2luaXRfaGFzaF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICp0YWJsZSwgaW50IHJvd3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xMTUte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjE6dm9pZCBpcF92c19yaHRfZnJlZShzdHJ1Y3QgaXBfdnNfcmh0ICp0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTYyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTY4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY5OnZvaWQgaXBfdnNfcmh0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE3MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE3Nz1zdHJ1Y3QgaXBfdnNfcmh0ICppcF92c19yaHRfYWxsb2MoaW50IGJ1Y2tldHMsIGludCBzY291bnRzLCBpbnQgbG9ja3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzNTppbnQgaXBfdnNfcmh0X2Rlc2lyZWRfc2l6ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IG4sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzYtXFx0XFx0XFx0ICAgaW50IGxmYWN0b3IsIGludCBtaW5fYml0cywgaW50IG1heF9iaXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNjMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNjQ6dm9pZCBpcF92c19yaHRfc2V0X3RocmVzaG9sZHMoc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IHNpemUsIGludCBsZmFjdG9yLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjY1LVxcdFxcdFxcdCAgICAgIGludCBtaW5fYml0cywgaW50IG1heF9iaXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz03NDg9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfYWRkcl9pc191bmljYXN0KHN0cnVjdCBuZXQgKm5ldCwgaW50IGFmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NjItICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3NjM6aW50IGlwX3ZzX2xlYXZlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03NjQtXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9ODcwPXN0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTg3NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjg3NTpib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04NzYtXFx0XFx0XFx0XFx0IGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9OTI1PXN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk1Mi0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjk1Mzp2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05NTQtXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk2LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6OTk3OnZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTk5OC1cXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNltdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDQxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQ0MjppbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NDMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDcwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjQ3MTp2b2lkIGlwX3ZzX3VucmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDozMy45NTMyMzAyMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NTI4ODQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIGVsZW1lbnRzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipJbml0aWFsIEZ1bmN0aW9uIEJyZWFrZG93biBhbmQgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZnVuY3Rpb25zLiBJJ20gc2VlaW5nOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgY2xlYXJseSByZWxhdGVkIHRvIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiwgY29tbW9uIHRvIHRoZSBJUCBWaXJ0dWFsIFNlcnZlci4gTmV4dCwgd2UgaGF2ZSBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBhbmQgYGlwX3ZzX291dF9pY21wYC4gVGhlc2Ugc3Ryb25nbHkgc3VnZ2VzdCBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBJQ01QIHBhY2tldHMsIGFuZCB0aGUgdjYgdmFyaWFudCBpbmRpY2F0ZXMgSVB2NiBoYW5kbGluZy4gYGlwX3ZzX291dF9pY21wYCBsb29rcyBsaWtlIGl0J3Mgc3RhdGljYWxseSBkZWZpbmVkLCB3aGljaCBpbXBsaWVzIGl0J3MgYSBmaXhlZCBwYXJ0IG9mIHRoZSBjb3JlIGZ1bmN0aW9uLiBJIHdvbmRlciB3aGF0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlPyBOb3csIHRoZSBjdXJpb3VzIG9uZSBpcyBgaXBfdnNfaW5faWNtcGAuIElzIHRoaXMgZnVuY3Rpb24gYWxzbyBzdGF0aWNhbGx5IGRlZmluZWQsIG9yIGlzIGl0IGR5bmFtaWNhbGx5IGJvdW5kPyBMZXQncyB2ZXJpZnkgaWYgdGhlcmUgaXMgYW55IGR5bmFtaWMgbmF0dXJlIHRvIGl0cyBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBjb25jZXJuaW5nIGluY29taW5nIElDTVAgdHJhZmZpYyBpbiB0aGUgY29udGV4dCBvZiBJUFZTLiBJIGFzc3VtZSB0aGlzIHdvdWxkIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgYXR0YWNrIGZvciBtYWxpY2lvdXMgYWN0b3JzLCBzbyBwcm9wZXIgaW5zcGVjdGlvbiBpcyBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzgzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6MzguMjE4NTIxMTAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU2NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19pbl9pY21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzc5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE3ODA6aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTc4MS1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIwMDktI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMDEwOnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIwMTEtXFx0XFx0XFx0ICAgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIxMTY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNjUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTY2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE2Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNzUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTc2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMTAtICogICAgICBidXQgSUNNUCBkZXN0aW5lZCBmb3IgMC4wLjAuMC8wIGNhbm5vdCBub3QgYmUgZWFzaWx5IG1hcmtlZCBhbmRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTE6ICogICAgICBzZW50IHRvIGlwX3ZzX2luX2ljbXAuIFNvLCBjYXRjaCB0aGVtIGF0IHRoZSBORl9JTkVUX0ZPUldBUkQgY2hhaW5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMTI6ICogICAgICBhbmQgc2VuZCB0aGVtIHRvIGlwX3ZzX2luX2ljbXAuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzEzLSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMzE1PWlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMzNzpcXHRcXHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMzgtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzNDAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzQxOlxcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXFx1MDAyNnIsIHN0YXRlLVxcdTAwM2Vob29rLCBcXHUwMDI2aXBoZHIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjM0Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjM4LjI2MTA5MjU3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMzMTUyMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJQ01QIEhhbmRsaW5nIGluIElQVlMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgSUNNUC1yZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIElQVlMgZnJhbWV3b3JrLiBJJ3ZlIG5vdGVkIHRoYXQgYGlwX3ZzX2luX2ljbXBgIGFuZCBgaXBfdnNfb3V0X2ljbXBgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBnZW5lcmFsbHkgaW5kaWNhdGVzIHRoZXkncmUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gVGhhdCBzdWdnZXN0cyB0aGV5J3JlIG5vdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgb3IgdGhlIG9uZXMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBjb3JlIGxvZ2ljLlxuXG5Ob3csIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcuIEkndmUgaWRlbnRpZmllZCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYW5kIGBpcF92c19pY21wX3htaXRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBpZiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgSUNNUCBwcm9jZXNzaW5nIHBpcGVsaW5lLlxuXG5HaXZlbiB0aGUgb3B0aW9ucywgbXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYGlwX3ZzX2ljbXBfeG1pdGAsIHdoaWNoIEkgc2VlIHJlc2lkZXMgaW4gYGlwX3ZzX3htaXQuY2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgaXBfdnNfaWNtcF94bWl0YCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgSUNNUCBwYWNrZXRzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVmaW5pdGVseSBiZSBhIHByaW1hcnkgZm9jdXMgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjUyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjQyLjE5NDI0NzE2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNzQ1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz0xNTAzPWludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6MTUwNDppcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtMTUwNS1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTU5Nz1pbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTg6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE1OTktXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjQyLjIzODUyOTE4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyOTk1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkNoZWNraW5nIHRoZSBTQ1RQIENoZWNrc3VtIFZlcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFNDVFAgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEknbGwgbmVlZCB0byBnbyB0byBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc2N0cF9jc3VtX2NoZWNrYCBmdW5jdGlvbi4gSSBpbWFnaW5lIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBJUFZTIHV0aWxpemVzIFNDVFAgZm9yIGxvYWQgYmFsYW5jaW5nLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBob3cgaXQgdmFsaWRhdGVzIHRoZSBjaGVja3N1bSB0byBkZXRlcm1pbmUgcGFja2V0IGludGVncml0eSBhcyBpdCByZWxhdGVzIHRvIHRoZSB2aXJ0dWFsIHNlcnZlcidzIGZ1bmN0aW9uLiBJIHNob3VsZCBxdWlja2x5IHJldmlldyBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgY2hlY2tzdW0gZXJyb3JzIGFuZCBpZiB0aGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJUFZTIGhhbmRsZXMgU0NUUCB0cmFmZmljIGluIHRoZSBjb250ZXh0IG9mIGxvYWQgYmFsYW5jaW5nLiBUaGlzIG1pZ2h0IGJlIGEgcmVmcmVzaGVyIGJ1dCBpdCBhbHdheXMgaGVscHMgdG8gZG91YmxlIGNoZWNrIHRoZXNlIGFzcGVjdHMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBTQ1RQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiB0aGUgSVBWUyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjQ1LjQzMTUyNjgyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NzU3MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfY3N1bV9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTI9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTM6c2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE0LVxcdFxcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTExLVxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM6MTEyOlxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExMy1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTQwPXNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE1OS1cXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjE2MDpcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNjEtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE4OD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxODk6c2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTE5MC1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6NDUuNjE5MjkxNzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzQzMTc5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgQ2hlY2tzdW0gSGFuZGxpbmcgaW4gSVBWUyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IFNDVFAgY2hlY2tzdW1zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGNvZGUuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc2N0cF9jc3VtX2NoZWNrYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBteSBmb2N1cy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGFuZCBoYW5kbGluZy5cblxuSSd2ZSBpZGVudGlmaWVkIGBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdGAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJJ20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBtYXkgYWxzbyBiZSByZWxldmFudC4gR29vZCwgY29uZmlybWVkLCB0aG9zZSB0aHJlZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBub24tc3RhdGljLlxuXG5Ob3csIEknbSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc3RhdGljIG5hdHVyZSBvZiBhIGZldyByZWxhdGVkIGZ1bmN0aW9ucy4gYGlwX3ZzX2luX2ljbXBgIGlzIHN0YXRpYy4gYGlwX3ZzX291dF9pY21wYCBpcyBhbHNvIHN0YXRpYy4gUGVyZmVjdC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBJUFZTLiBJJ3ZlIGZvdW5kIHRoYXQgYElQX1ZTYCBpdHNlbGYgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYC4gYElQX1ZTX0lQVjZgIHJlcXVpcmVzIGBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZgLiBgSVBfVlNfUFJPVE9fU0NUUGAgZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgYmV5b25kIGBJUF9WU2AuIFRoaXMgaXMgdXNlZnVsLCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgbWFrZSBlbmFibGluZyB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgbXVjaCBtb3JlIHN0cmFpZ2h0IGZvcndhcmQuXG5cblRoZXJlZm9yZSwgdG8gZW5hYmxlIFNDVFAgc3VwcG9ydCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIGFyZTogYElQX1ZTYCwgYElQX1ZTX0lQVjZgLCBhbmQsIGNydWNpYWxseSwgYElQX1ZTX1BST1RPX1NDVFBgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoaXMgZmluYWwgb3B0aW9uLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTU2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjUxLjQ1MzYxMTk2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxODEwNTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19QUk9UT19TQ1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNDo1MS41MjE4MDA3MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDQxODMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb246XG5cbioqRXhhbWluaW5nIHRoZSBTQ1RQIExvYWQgQmFsYW5jaW5nIE9wdGlvbioqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgc2VhcmNoaW5nIGZvciBcIlNDVFBcIiBub3QgdG9vIGxvbmcgYWdvLCBhbmQgSSBjYW1lIGFjcm9zcyB0aGF0IGBjb25maWcgSVBfVlNfUFJPVE9fU0NUUGAgZW50cnkuIEEgcXVpY2sgdmlzdWFsIGNoZWNrLCBhbmQgSSBub3RpY2UgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBsaW5lIHVzZXMgdHdvIHNwYWNlcyBhZnRlciBgY29uZmlnYC4gSSB3aWxsIG5lZWQgdG8gbWFrZSBhIG5vdGUgdG8gYWRkcmVzcyB0aGlzIGluIG15IHN0eWxlIGd1aWRlbGluZXMuXG5cbk5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgYElQX1ZTX1BST1RPX1NDVFBgIG9wdGlvbiBjb250aW5nZW50IHVwb24gYElQX1NDVFBgIGJlaW5nIGVuYWJsZWQ/IE9yIHBlcmhhcHMgc29tZSBvdGhlciByZWxhdGVkIG1vZHVsZT8gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBjcnVjaWFsIGZvciBwcm9wZXJseSBjb25maWd1cmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIGF2b2lkaW5nIGFueSBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA0OjU2LjA4NjIyMjI1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1NDUxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfUFJPVE9fU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0xMDA9Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIlNDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDQ6NTYuMTQxNzczMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MDI5MTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLlxuXG4qKklQVlMgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkhtbSwgYmFzZWQgb24gdGhpcyBpbml0aWFsIGdsYW5jZSwgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhpcyBjaGFuZ2UgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUgYElQX1NDVFBgIGZsYWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcsIHNvIGxldCdzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29uZmlndXJhdGlvbi5cblxuQWxyaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVkIGBpcF92c19jb3JlLmNgLCBgaXBfdnNfeG1pdC5jYCwgYW5kIGBpcF92c19wcm90b19zY3RwLmNgLiBUaG9zZSBmaWxlcyBhcmUgYWxsIHNxdWFyZWx5IHdpdGhpbiB0aGUgYElQX1ZTYCBzdWJzeXN0ZW0uIFRoYXQgcmVpbmZvcmNlcyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uLCBidXQgbGV0J3MgYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5Ob3csIEknbGwgZXhhbWluZSB0aGUgTWFrZWZpbGUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYC4gSSB3YW50IHRvIHZlcmlmeSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlc2UgZmlsZXMgdG8gYElQX1ZTYC4gVGhpcyBzaG91bGQgZGVmaW5pdGl2ZWx5IHNldHRsZSB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyOTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNTowMS42ODIwNjkwODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzg5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3Byb3RvX3NjdHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xMD1pcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUCkgKz0gaXBfdnNfcHJvdG9fYWhfZXNwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU6MTE6aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjAxLjczNTg2NDA2NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk3MDM4MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhpcyBsZXZlbCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBJUFZTIFNDVFAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBg4oCUdGhhdCdzIHRoZSBrZXkuIFRoYXQgc2V0dGluZyBsb29rcyByaWdodCBvbiB0aGUgc3VyZmFjZS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW1wbGljYXRpb25zIGJ5IHJldmlld2luZyB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyBTQ1RQIHN1cHBvcnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBmcmFtZXdvcmsuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBNYWtlZmlsZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGBpcF92c19jb3JlLmNgIGFuZCBgaXBfdnNfeG1pdC5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFNDVFAgcHJvdG9jb2wgaXMgc3BlY2lmaWNhbGx5IGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIElQVlMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBTQ1RQIHRyYWZmaWMgaXMgdHJhbnNtaXR0ZWQuIFRoZSBNYWtlZmlsZXMgc2hvdWxkIGNsYXJpZnkgaG93IHRoZSBTQ1RQIG1vZHVsZSBpcyBidWlsdCBhbmQgbGlua2VkIGludG8gdGhlIElQVlMgc3lzdGVtIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MDU6MDUuMTMyOTA1NjI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0ODExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTQ9aXBfdnMtZXh0cmFfb2Jqcy0kKENPTkZJR19JUF9WU19ORkNUKSArPSBpcF92c19uZmN0Lm9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTUtXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE2OmlwX3ZzLW9ianMgOj1cXHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cXHQgICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE3LVxcdFxcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cXHQgICBcXHRcXHQgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjA1LjE3OTg1ODIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM3NjIyOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGVzZSBvYmplY3RzIHdpdGhpbiBgaXBfdnMtb2Jqc2AuIFRoYXQgdGVsbHMgbWUgdGhlc2UgdGhpbmdzIGFyZSBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfSVBfVlNgIGlzIGVuYWJsZWQuIFNpbXBsZSBlbm91Z2gsIGJ1dCBsZXQncyBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBzb2xpZC5cblxuUmlnaHQsIHNvIHRoYXQgYm9pbHMgZG93biB0byBlbmFibGluZyBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYElQX1ZTYCBpdHNlbGYgZGVwZW5kcyBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIHByZXNlbnQgYXMgd2VsbC4gQW5kIGBJUF9WU19JUFY2YCBoYXMgYSBkZXBlbmRlbmN5IG9uIGVpdGhlciBgSVBWNiA9IHlgIG9yIGBJUF9WUyA9IElQVjZgLCBzbyBJIGJldHRlciBpbmNsdWRlIGBJUFY2YCBqdXN0IGluIGNhc2UuXG5cbldoaWxlIHVzdWFsbHkgYElORVRgIGFuZCBgTkVURklMVEVSYCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IGFueXdheSwgaXQncyBhbHdheXMgc2FmZXIgdG8gZXhwbGljaXRseSBpbmNsdWRlIHRoZW0gdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgY29tcGlsYXRpb24gcHJvYmxlbXMuIFN5emthbGxlciB0ZW5kcyB0byBoYXZlIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAgZW5hYmxlZCwgc28gSSB0aGluayBJJ20gc2FmZSB0byBpbmNsdWRlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCwganVzdCBpbiBjYXNlLlxuXG5Ob3csIGxldCdzIGtlZXAgdHJhY2sgb2YgdGhvc2Uga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYW5kIGBpcF92c19pY21wX3htaXRgLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHN1cmUsIGxldCdzIGRvdWJsZSBjaGVjayBpZiBgaXBfdnNfbmF0X2ljbXBfdjZgIGlzIG5vbi1zdGF0aWM7IHRoYXQncyBzb21ldGhpbmcgSSBkb24ndCB3YW50IHRvIG92ZXJsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE3OSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNToxMC41MTc0ODM0MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODUxMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX25hdF9pY21wX3Y2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz05NTM9dm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy05OTYtI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo5OTc6dm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtOTk4LVxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTEwNDk9c3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwODEtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTA4MjpcXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEwODMtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNToxMC41NzAzNzI0MDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMjMyNzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYGlwX3ZzX25hdF9pY21wX3Y2YCBhbmQgSSBhbHJlYWR5IGtub3cgdGhhdCBvbmUgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgaGF2ZSwgaXQgbG9va3MgbGlrZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGFuZCBgaXBfdnNfaWNtcF94bWl0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYWxsIGludGVyYWN0IGluIHRoaXMgbm9uLXN0YXRpYyBjb250ZXh0LCBhbmQgSSBrbm93IEkgaGF2ZSB0byBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiBgaXBfdnNfaWNtcF94bWl0X3Y2YCBzaGFyZXMgdGhlIHNhbWUgcHJvcGVydGllcyBvZiBiZWluZyBub24tc3RhdGljLCBnaXZlbiB0aGF0IGl0cyBsaWtlbHkgcmVsYXRlZCB0byB0aGVzZSBvdGhlcnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4MCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjowNToxNC42MDI3MDIxNDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTg1NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2ljbXBfeG1pdF92NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9MTU5Nz1pbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjE1OTg6aXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTE1OTktXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjE0LjY2MDY5MzY1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ1MjM5NjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgSUNNUCBOQVQgYW5kIENoZWNrc3VtIFBhdGNoKipcblxuT2theSwgc28gYGlwX3ZzX2ljbXBfeG1pdF92NmAgaXMgZGVmaW5pdGVseSAqbm90KiB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIFRoYXQncyBnb29kIHRvIGNsYXJpZnkuIExldCdzIHNlZS4uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlwX3ZzX2ljbXBfeG1pdGAgaW4gYGlwX3ZzX3htaXQuY2AuICBJIHNlZSB0aGUgZGlmZjogaXQncyB1cGRhdGluZyBgaXBfdnNfbmF0X2ljbXBgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBjaXBoYCB0byB0aGUgZnVuY3Rpb24gY2FsbC4gIFJpZ2h0LCBpdCBvbmx5IG1vZGlmaWVzIHRoZSBjYWxsLlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiBgaXBfdnNfbmF0X2ljbXBgLiBBaGEsIHRoYXQncyBpbiBgaXBfdnNfY29yZS5jYC4gVGhlIHNpZ25hdHVyZSBvZiBgaXBfdnNfbmF0X2ljbXBgIGlzIGJlaW5nIHVwZGF0ZWQgdGhlcmUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaXBfdnNfbmF0X2ljbXBfdjZgIGluIHRoYXQgc2FtZSBmaWxlIGlzbid0IGNoYW5nZWQuIEFuZCwgZnVydGhlciBkb3duLCB0aGUgY2FsbCBpbiBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgICphbHNvKiBnZXRzIHRoZSB1cGRhdGUuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCwgdGhlIGZvY3VzIGZvciBmdXp6aW5nLCBhcmU6XG5cbiogICBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCAodGhhdCdzIG5vbi1zdGF0aWMsIHJlbWVtYmVyKVxuKiAgIGBpcF92c19uYXRfaWNtcGAgKHRoZSBhY3R1YWwgY2hhbmdlKVxuKiAgIGBpcF92c19pY21wX3htaXRgXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCBgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrYCBiZWluZyBub24tc3RhdGljLi4uIFl1cCwgSSBjYW4gc2VlIHRoZSBkZWNsYXJhdGlvbi4gSXQncyBwdWJsaWMsIG5vdCBzdGF0aWMuXG5cbkFuZCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlbGwsIHRoaXMgdG91Y2hlcyBnZW5lcmFsIElQVlMgSUNNUCBmdW5jdGlvbmFsaXR5LCBzbyB3ZSdsbCBuZWVkIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYW5kIHByb2JhYmx5IGBJUF9WU19QUk9UT19TQ1RQYCBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBTQ1RQIGFuZCBJQ01QIGVycm9ycy5cblxuVGhlIHBhdGNoIGFsdGVycyBjb3JlIElQVlMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24uIFRoaXMgaGFzIG5ldHdvcmstZmFjaW5nIGxvZ2ljLCB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCBwbGFjZSB0byB0cnkgc29tZSBmdXp6aW5nLiBJdCdzIGNoYW5naW5nIGhvdyBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIHNvIHdlIGNhbiBsaWtlbHkgY3JlYXRlIHNvbWUgaW50ZXJlc3RpbmcgZnV6emluZyBzY2VuYXJpb3MuXG5cbkkgdGhpbmsgSSd2ZSBnb3QgdGhpcy4gTGV0J3Mgc2VuZCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYzOCwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjA1OjI2LjExMzA5MzE1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjkxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja1wiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHBhcnNlZCBhbmQgTkFULWVkLCBhbmQgZml4ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBzdWJzeXN0ZW0uIEl0IGNoYW5nZXMgaG93IElDTVAgcGFja2V0cyBhcmUgcGFyc2VkIGFuZCBOQVQtZWQsIGFuZCBmaXhlcyBjaGVja3N1bSB2YWxpZGF0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[1] Phase: Succeeded StartedAt: 2026-07-30 02:05:50 +0000 UTC FinishedAt: 2026-07-30 02:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 02:05:50 +0000 UTC FinishedAt: 2026-07-30 02:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2] Phase: Succeeded StartedAt: 2026-07-30 02:05:50 +0000 UTC FinishedAt: 2026-07-30 06:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 02:05:50 +0000 UTC FinishedAt: 2026-07-30 06:00:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 02:05:50 +0000 UTC FinishedAt: 2026-07-30 02:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 02:05:50 +0000 UTC FinishedAt: 2026-07-30 02:05:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow8r89m/series-workflow8r89m-convert-artifact-541582184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 02:06:00 +0000 UTC FinishedAt: 2026-07-30 02:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 02:06:00 +0000 UTC FinishedAt: 2026-07-30 02:29:35 +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:*b414d4c5-4508-446f-8ed1-0495194c3f64,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-workflow8r89m/series-workflow8r89m-convert-artifact-541582184/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": "5793316b-9012-46e8-aaac-303025f70938", "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-workflow8r89m/series-workflow8r89m-build-action-3481037022/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 02:06:00 +0000 UTC FinishedAt: 2026-07-30 02:29:25 +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:*b414d4c5-4508-446f-8ed1-0495194c3f64,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-workflow8r89m/series-workflow8r89m-convert-artifact-541582184/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": "5793316b-9012-46e8-aaac-303025f70938", "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-workflow8r89m/series-workflow8r89m-build-action-3481037022/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 02:29:35 +0000 UTC FinishedAt: 2026-07-30 02:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 02:29:35 +0000 UTC FinishedAt: 2026-07-30 02:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 02:29:35 +0000 UTC FinishedAt: 2026-07-30 02:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 02:29:35 +0000 UTC FinishedAt: 2026-07-30 02:29:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow8r89m/series-workflow8r89m-convert-artifact-1389804879/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 02:29:45 +0000 UTC FinishedAt: 2026-07-30 02:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 02:29:45 +0000 UTC FinishedAt: 2026-07-30 02:31:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5793316b-9012-46e8-aaac-303025f70938,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-workflow8r89m/series-workflow8r89m-build-action-3481037022/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-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 02:31:49 +0000 UTC FinishedAt: 2026-07-30 02:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 02:31:49 +0000 UTC FinishedAt: 2026-07-30 02:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 02:31:49 +0000 UTC FinishedAt: 2026-07-30 02:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 02:31:49 +0000 UTC FinishedAt: 2026-07-30 02:55:29 +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:*b414d4c5-4508-446f-8ed1-0495194c3f64,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-workflow8r89m/series-workflow8r89m-convert-artifact-1389804879/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": "40d520db-d4e5-4fc8-bc5b-11614393b36f", "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-workflow8r89m/series-workflow8r89m-build-action-496125283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 02:31:49 +0000 UTC FinishedAt: 2026-07-30 02:55:19 +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:*b414d4c5-4508-446f-8ed1-0495194c3f64,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-workflow8r89m/series-workflow8r89m-convert-artifact-1389804879/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": "40d520db-d4e5-4fc8-bc5b-11614393b36f", "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-workflow8r89m/series-workflow8r89m-build-action-496125283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 02:55:29 +0000 UTC FinishedAt: 2026-07-30 02:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 02:55:29 +0000 UTC FinishedAt: 2026-07-30 02:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 02:55:29 +0000 UTC FinishedAt: 2026-07-30 02:57:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 02:55:29 +0000 UTC FinishedAt: 2026-07-30 02:57:17 +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:*40d520db-d4e5-4fc8-bc5b-11614393b36f,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-workflow8r89m/series-workflow8r89m-build-action-496125283/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-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 02:57:27 +0000 UTC FinishedAt: 2026-07-30 06:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 02:57:27 +0000 UTC FinishedAt: 2026-07-30 06:00:09 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"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:*5793316b-9012-46e8-aaac-303025f70938,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40d520db-d4e5-4fc8-bc5b-11614393b36f,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-workflow8r89m/series-workflow8r89m-build-action-3481037022/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-workflow8r89m/series-workflow8r89m-build-action-496125283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 02:57:27 +0000 UTC FinishedAt: 2026-07-30 02:57:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 02:57:27 +0000 UTC FinishedAt: 2026-07-30 02:57:43 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"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-workflow8r89m/series-workflow8r89m-convert-artifact-1658747400/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 02:57:27 +0000 UTC FinishedAt: 2026-07-30 02:57:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 02:57:27 +0000 UTC FinishedAt: 2026-07-30 02:57:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 02:57:27 +0000 UTC FinishedAt: 2026-07-30 02:57:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 02:57:51 +0000 UTC FinishedAt: 2026-07-30 06:00:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8r89m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_checksum_common_check","ip_vs_nat_icmp","ip_vs_icmp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_SCTP"],"series_id":"aa671c46-d6db-490f-b6e6-8efd9a6088df","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 02:57:51 +0000 UTC FinishedAt: 2026-07-30 05:59:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5793316b-9012-46e8-aaac-303025f70938,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40d520db-d4e5-4fc8-bc5b-11614393b36f,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-workflow8r89m/series-workflow8r89m-build-action-3481037022/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-workflow8r89m/series-workflow8r89m-build-action-496125283/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-workflow8r89m/series-workflow8r89m-convert-artifact-1658747400/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,}