Name: series-workflowsdvbq Phase: Succeeded StartedAt: 2026-09-05 17:43:43 +0000 UTC FinishedAt: 2026-09-05 21:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[0] Phase: Succeeded StartedAt: 2026-09-05 17:43:43 +0000 UTC FinishedAt: 2026-09-05 17:46:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 17:43:43 +0000 UTC FinishedAt: 2026-09-05 17:46:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "254c881fe0554c5efb16d355c273702a27a32a20", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "254c881fe0554c5efb16d355c273702a27a32a20", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "f418c9f0-cd3d-45de-989d-ce5118e2bd2c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "map_kptr_match_type", "check_ptr_to_btf_access", "process_spin_lock", "invalidate_rcu_protected_refs", "check_kfunc_args" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFwX2twdHJfbWF0Y2hfdHlwZSYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX3NwaW5fbG9jayYjMzQ7LAogICAgJiMzNDtpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgYW5kIHNhZmV0eSBjaGVja3MgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGFuZCBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgUFRSX1VOVFJVU1RFRCBmbGFncyBmb3IgYWxsb2NhdGVkIG9iamVjdHMsIEJQRl9LUFRSX1BFUkNQVSBtYXRjaGluZywgZmF1bHQtdG9sZXJhbnQgQlRGIGxvYWRzLCByZWZlcmVuY2UgaW52YWxpZGF0aW9uIG9yZGVyIGR1cmluZyBzcGluIHVubG9jayAvIFJDVSB1bmxvY2ssIGFuZCBvd25pbmcgcmVmZXJlbmNlIGNoZWNrcyBpbiBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2RhYWQ2ODNkNTMzNGRhNWZiYjQxYTRhYWUyODY5ZWNkOGUyMGI0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6NDU6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDEzMzljMmYwMjhkYjAuLjM2YjY1Nzk3ODc3ZDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTM4MSw3ICYjNDM7MTM4MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyh1MzIgdHlwZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuIHtcbi1cdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBNRU1fQUxMT0M7XG4mIzQzO1x0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQ0ODgsNiAmIzQzOzQ0ODgsMTMgQEAgc3RhdGljIGludCBtYXBfa3B0cl9tYXRjaF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgfnBlcm1fZmxhZ3MpXG4gXHRcdGdvdG8gYmFkX3R5cGU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlXG4mIzQzO1x0ICogc3RvcmVkIGluIGl0IG11c3QgY2FycnkgdGhlIHNhbWUgZmxhZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGtwdHJfZmllbGQtXHUwMDNldHlwZSA9PSBCUEZfS1BUUl9QRVJDUFUpICE9ICEhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSlcbiYjNDM7XHRcdGdvdG8gYmFkX3R5cGU7XG4mIzQzO1xuIFx0LyogV2UgbmVlZCB0byB2ZXJpZnkgcmVnLVx1MDAzZXR5cGUgYW5kIHJlZy1cdTAwM2VidGYsIGJlZm9yZSBhY2Nlc3NpbmcgcmVnLVx1MDAzZWJ0ZiAqL1xuIFx0cmVnX25hbWUgPSBidGZfdHlwZV9uYW1lKHJlZy1cdTAwM2VidGYsIHJlZy1cdTAwM2VidGZfaWQpO1xuIFxuQEAgLTYwMzEsNyAmIzQzOzYwMzgsMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4gXG4tXHRcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdCBtYXkgc3RpbGwgYmUgcmVhZCB0aHJvdWdoIGFcbiYjNDM7XHRcdCAqIEJQRl9QUk9CRV9NRU0gbG9hZCBhZnRlciBpdHMgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLiBXcml0ZXNcbiYjNDM7XHRcdCAqIHRocm91Z2ggc3VjaCBwb2ludGVycyB3ZXJlIHJlamVjdGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2FsbG9jYXRlZCBvYmplY3QgbXVzdCBoYXZlIGEgcmVmZXJlbmNlZCBpZFwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzQwOSwxMCAmIzQzOzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxuIFx0XHRcdFx0bG9jayk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJbnZhbGlkYXRlIG5vbi1vd25pbmcgcmVmcyBiZWZvcmUgUkNVIGRlbW90aW9uIGNsZWFycyB0aGVpclxuJiM0MztcdFx0ICogTk9OX09XTl9SRUYgZmxhZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbiYjNDM7XG4gXHRcdGlmICghaW5fcmN1X2NzKGVudikpXG4gXHRcdFx0aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTtcbi1cbi1cdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NTEyLDcgJiM0Mzs5NTI5LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XG4gXHRcdGlmIChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1JDVSkge1xuIFx0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIHJlZywgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0XHRyZWctXHUwMDNldHlwZSBcdTAwMjY9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTtcbiYjNDM7XHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCB8IE5PTl9PV05fUkVGKTtcbiBcdFx0XHRyZWctXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuIFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiBcdFx0fVxuQEAgLTEzMTcxLDcgJiM0MzsxMzE4OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRcdFx0ICAgICAgYnBmX2RpYWdfcmVnX3R5cGVfcGxhaW4oZW52LCByZWctXHUwMDNldHlwZSkpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4mIzQzO1x0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbiBcdFx0XHRcdG1ldGEtXHUwMDNlYXJnX293bmluZ19yZWYgPSB0cnVlO1xuIFxuIFx0XHRcdHJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xuaW5kZXggMDgzNzljM2I2YTAzOC4uMzcwMWY0ZWE1OGM3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xuQEAgLTMzLDYgJiM0MzszMywyMCBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7XG4gfSBhcnJheSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtIHtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19wZXJjcHVfa3B0ciAqdGFzaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSk7XG4mIzQzO30ga2VybmVsX3BlcmNwdV9hcnJheSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7XG4gbG9uZyByZXQ7XG4gXG4gU0VDKFwmIzM0Oz9mZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbkBAIC0xMzcsNiAmIzQzOzE1MSw1MSBAQCBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT10cnVzdGVkX3B0cl8gZXhwZWN0ZWQ9cHRyX3Rhc2tfc3RydWN0XCYjMzQ7KVxuJiM0MztpbnQgcmVqZWN0X2tlcm5lbF9wdHJfaW50b19wZXJjcHVfa3B0cih2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtICplO1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDtcbiYjNDM7XHRpbnQgaW5kZXggPSAwO1xuJiM0MztcbiYjNDM7XHRlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZrZXJuZWxfcGVyY3B1X2FycmF5LCBcdTAwMjZpbmRleCk7XG4mIzQzO1x0aWYgKCFlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHAgPSBicGZfdGFza19mcm9tX3BpZCgxKTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZlLVx1MDAzZXRhc2ssIHApO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRicGZfdGFza19yZWxlYXNlKG9sZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3RcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhyZWplY3RfcGxhaW5fYWxsb2NfaW50b19wZXJjcHVfa3B0cilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2YWxfdCBfX3BlcmNwdV9rcHRyICpvbGQ7XG4mIzQzO1x0c3RydWN0IHZhbF90ICpwO1xuJiM0MztcdHN0cnVjdCBlbGVtICplO1xuJiM0MztcdGludCBpbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZpbmRleCk7XG4mIzQzO1x0aWYgKCFlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHAgPSBicGZfb2JqX25ldyhzdHJ1Y3QgdmFsX3QpO1xuJiM0MztcdGlmICghcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNmUtXHUwMDNlcGMsIHApO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRicGZfcGVyY3B1X29ial9kcm9wKG9sZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDticGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcJiMzNDspXG4gaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcbmluZGV4IDMxZDQwODFjM2E5ZmQuLmNkYjI1NWFkZGJjMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG5AQCAtNTkyLDkgJiM0Mzs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eClcbiBcdH1cbiBcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiBcdC8qXG4tXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVEXG4tXHQgKiB8IE5PTl9PV05fUkVGLCBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTVxuLVx0ICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLlxuJiM0MztcdCAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURUQsXG4mIzQzO1x0ICogYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU0gcmV3cml0ZSBmb3IgaXQsXG4mIzQzO1x0ICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXG4gXHQgKi9cbiBcdG5vbl9vd25fcmVmX2tleSA9IG5vZGUtXHUwMDNla2V5O1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XG4gXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuIFx0X190eXBlKGtleSwgaW50KTtcbkBAIC0zMCw2ICYjNDM7MzksMTMgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7XG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRsb25nIGtleTtcbiBcdGxvbmcgZGF0YTtcbkBAIC04MzIsNiAmIzQzOzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuJiM0MztcbiYjNDM7XHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XG4mIzQzO1x0aWYgKCFuKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1x0YnBmX29ial9kcm9wKG4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghbSlcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KVxuIHtcbiBcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9ub2RlcywgXHUwMDI2aWR4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5AQCAtMTksNiAmIzQzOzE5LDI2IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQge1xuIFx0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCByY3VfZ3JhcGhfbm9kZSB7XG4mIzQzO1x0c3RydWN0IGJwZl9yYl9ub2RlIG5vZGU7XG4mIzQzO1x0bG9uZyBkYXRhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJjdV9ncmFwaF9ub2RlICpqdXN0X2hlcmVfYmVjYXVzZV9idGZfYnVnO1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGgge1xuJiM0MztcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSBfX2twdHIgKm5vZGU7XG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yNyw2ICYjNDM7NDcsMjIgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jaztcbiBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4mIzQzO3ByaXZhdGUoQykgc3RydWN0IGJwZl9zcGluX2xvY2sgZ3JhcGhfbG9jaztcbiYjNDM7cHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IHN0YXNoZWRfcmN1X2dyYXBoIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4gc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiB7XG5AQCAtODksNiAmIzQzOzEyNSwxMjAgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX25vbl9vYmplY3Qodm9pZCAqY3R4KVxuIFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKGN0eCkgIT0gTlVMTDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/c3lzY2FsbFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwmIzM0OylcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl91bmNoZWNrZWRfZHJvcCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovXG4mIzQzO1x0dG1wID0gYnBmX29ial9uZXcodHlwZW9mKCp0bXApKTtcbiYjNDM7XHRpZiAoIXRtcClcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcdGJwZl9vYmpfZHJvcCh0bXApO1xuJiM0MztcbiYjNDM7XHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbiYjNDM7XHRpZiAoIW1hcHZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbiYjNDM7XHRpZiAoIW4pIHtcbiYjNDM7XHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdH1cbiYjNDM7XHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3N5c2NhbGxcJiMzNDspXG4mIzQzO19fZmFpbHVyZVxuJiM0MztfX21zZyhcJiMzNDticGZfcmJ0cmVlX3JlbW92ZSBjYW4gb25seSB0YWtlIG5vbi1vd25pbmcgb3IgcmVmY291bnRlZCBcJiMzNDtcbiYjNDM7ICAgICAgXCYjMzQ7YnBmX3JiX25vZGUgcG9pbnRlclwmIzM0OylcbiYjNDM7bG9uZyByYnRyZWVfcmVtb3ZlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGggKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7XG4mIzQzO1x0c3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlO1xuJiM0MztcdGludCBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmN1X2dyYXBoLCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbm9kZSkge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbiYjNDM7XHRyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoXHUwMDI2Z3JhcGhfcm9vdCwgXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4mIzQzO1x0aWYgKHJiX25vZGUpXG4mIzQzO1x0XHRicGZfb2JqX2Ryb3AoY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCByY3VfZ3JhcGhfbm9kZSwgbm9kZSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm5vZGUsICpyZWY7XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbm9kZSkge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobm9kZSk7XG4mIzQzO1x0aWYgKHJlZilcbiYjNDM7XHRcdGJwZl9vYmpfZHJvcChyZWYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2xvbmcgZ3JhcGhfa3B0cl9hZnRlcl9zcGluX3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSAqbm9kZTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JjdV9ncmFwaCwgXHUwMDI2aWR4KTtcbiYjNDM7XHRpZiAoIW1hcHZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuJiM0MztcdG5vZGUgPSBtYXB2YWwtXHUwMDNlbm9kZTtcbiYjNDM7XHRpZiAoIW5vZGUpIHtcbiYjNDM7XHRcdGJwZl9zcGluX3VubG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlLVx1MDAzZWRhdGE7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0mIzQzO319XCYjMzQ7KVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFwX2twdHJfbWF0Y2hfdHlwZSYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX3NwaW5fbG9jayYjMzQ7LAogICAgJiMzNDtpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIGFuZCBzYWZldHkgY2hlY2tzIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBhbmQgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIFBUUl9VTlRSVVNURUQgZmxhZ3MgZm9yIGFsbG9jYXRlZCBvYmplY3RzLCBCUEZfS1BUUl9QRVJDUFUgbWF0Y2hpbmcsIGZhdWx0LXRvbGVyYW50IEJURiBsb2FkcywgcmVmZXJlbmNlIGludmFsaWRhdGlvbiBvcmRlciBkdXJpbmcgc3BpbiB1bmxvY2sgLyBSQ1UgdW5sb2NrLCBhbmQgb3duaW5nIHJlZmVyZW5jZSBjaGVja3MgaW4gY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdkYWFkNjgzZDUzMzRkYTVmYmI0MWE0YWFlMjg2OWVjZDhlMjBiNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE3OjQ1OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggMTMzOWMyZjAyOGRiMC4uMzZiNjU3OTc4NzdkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC0xMzgxLDcgJiM0MzsxMzgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKQogewotCXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7IHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBNRU1fQUxMT0M7CiYjNDM7CXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0eXBlX2ZsYWcodHlwZSkgJmFtcDsgTUVNX0FMTE9DICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICEodHlwZV9mbGFnKHR5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBkN2RkMGJlZmJkMTBlLi41NmExMGY3OWY5YTgxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC00NDg4LDYgJiM0Mzs0NDg4LDEzIEBAIHN0YXRpYyBpbnQgbWFwX2twdHJfbWF0Y2hfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWlmICh0eXBlX2ZsYWcocmVnLSZndDt0eXBlKSAmYW1wOyB+cGVybV9mbGFncykKIAkJZ290byBiYWRfdHlwZTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlCiYjNDM7CSAqIHN0b3JlZCBpbiBpdCBtdXN0IGNhcnJ5IHRoZSBzYW1lIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGtwdHJfZmllbGQtJmd0O3R5cGUgPT0gQlBGX0tQVFJfUEVSQ1BVKSAhPSAhIShyZWctJmd0O3R5cGUgJmFtcDsgTUVNX1BFUkNQVSkpCiYjNDM7CQlnb3RvIGJhZF90eXBlOwomIzQzOwogCS8qIFdlIG5lZWQgdG8gdmVyaWZ5IHJlZy0mZ3Q7dHlwZSBhbmQgcmVnLSZndDtidGYsIGJlZm9yZSBhY2Nlc3NpbmcgcmVnLSZndDtidGYgKi8KIAlyZWdfbmFtZSA9IGJ0Zl90eXBlX25hbWUocmVnLSZndDtidGYsIHJlZy0mZ3Q7YnRmX2lkKTsKIApAQCAtNjAzMSw3ICYjNDM7NjAzOCwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJfQogCi0JCWlmICh0eXBlX2lzX2FsbG9jKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctJmd0O3R5cGUpICZhbXA7JmFtcDsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGZhdWx0LXByb25lIGFsbG9jYXRlZCBvYmplY3QgbWF5IHN0aWxsIGJlIHJlYWQgdGhyb3VnaCBhCiYjNDM7CQkgKiBCUEZfUFJPQkVfTUVNIGxvYWQgYWZ0ZXIgaXRzIGxpZmV0aW1lIHByb3RlY3Rpb24gZW5kcy4gV3JpdGVzCiYjNDM7CQkgKiB0aHJvdWdoIHN1Y2ggcG9pbnRlcnMgd2VyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwogCQkgICAgIShyZWctJmd0O3R5cGUgJmFtcDsgTUVNX1JDVSkgJmFtcDsmYW1wOyAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7CiAJCQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O2FsbG9jYXRlZCBvYmplY3QgbXVzdCBoYXZlIGEgcmVmZXJlbmNlZCBpZCYjMzQ7KTsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNzQwOSwxMCAmIzQzOzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZQogCQkJCWxvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBJbnZhbGlkYXRlIG5vbi1vd25pbmcgcmVmcyBiZWZvcmUgUkNVIGRlbW90aW9uIGNsZWFycyB0aGVpcgomIzQzOwkJICogTk9OX09XTl9SRUYgZmxhZy4KJiM0MzsJCSAqLwomIzQzOwkJaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTsKJiM0MzsKIAkJaWYgKCFpbl9yY3VfY3MoZW52KSkKIAkJCWludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKGVudik7Ci0KLQkJaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC05NTEyLDcgJiM0Mzs5NTI5LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi0mZ3Q7Y3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHsKIAkJaWYgKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSB7CiAJCQlicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7Ci0JCQlyZWctJmd0O3R5cGUgJmFtcDs9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTsKJiM0MzsJCQlyZWctJmd0O3R5cGUgJmFtcDs9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMIHwgTk9OX09XTl9SRUYpOwogCQkJcmVnLSZndDt0eXBlIHw9IFBUUl9VTlRSVVNURUQ7CiAJCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiAJCX0KQEAgLTEzMTcxLDcgJiM0MzsxMzE4OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCQkJCQkgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy0mZ3Q7dHlwZSkpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkpCiYjNDM7CQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpCiAJCQkJbWV0YS0mZ3Q7YXJnX293bmluZ19yZWYgPSB0cnVlOwogCiAJCQlyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYwppbmRleCAwODM3OWMzYjZhMDM4Li4zNzAxZjRlYTU4Yzc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYwpAQCAtMzMsNiAmIzQzOzMzLDIwIEBAIHN0cnVjdCB7CiAJX190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7CiB9IGFycmF5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiYjNDM7c3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSB7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCBfX3BlcmNwdV9rcHRyICp0YXNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSk7CiYjNDM7fSBrZXJuZWxfcGVyY3B1X2FycmF5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfZnJvbV9waWQoczMyIHBpZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MzsKIGxvbmcgcmV0OwogCiBTRUMoJiMzNDs/ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKQEAgLTEzNyw2ICYjNDM7MTUxLDUxIEBAIGludCBCUEZfUFJPRyh0ZXN0X2FycmF5X21hcF81KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIGtwdHIgYWNjZXNzLCBSMiB0eXBlPXRydXN0ZWRfcHRyXyBleHBlY3RlZD1wdHJfdGFza19zdHJ1Y3QmIzM0OykKJiM0MztpbnQgcmVqZWN0X2tlcm5lbF9wdHJfaW50b19wZXJjcHVfa3B0cih2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtICplOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpvbGQ7CiYjNDM7CWludCBpbmRleCA9IDA7CiYjNDM7CiYjNDM7CWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7a2VybmVsX3BlcmNwdV9hcnJheSwgJmFtcDtpbmRleCk7CiYjNDM7CWlmICghZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwID0gYnBmX3Rhc2tfZnJvbV9waWQoMSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7ZS0mZ3Q7dGFzaywgcCk7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKG9sZCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0cocmVqZWN0X3BsYWluX2FsbG9jX2ludG9fcGVyY3B1X2twdHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmFsX3QgX19wZXJjcHVfa3B0ciAqb2xkOwomIzQzOwlzdHJ1Y3QgdmFsX3QgKnA7CiYjNDM7CXN0cnVjdCBlbGVtICplOwomIzQzOwlpbnQgaW5kZXggPSAwOwomIzQzOwomIzQzOwllID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2FycmF5LCAmYW1wO2luZGV4KTsKJiM0MzsJaWYgKCFlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXAgPSBicGZfb2JqX25ldyhzdHJ1Y3QgdmFsX3QpOwomIzQzOwlpZiAoIXApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO2UtJmd0O3BjLCBwKTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl9wZXJjcHVfb2JqX2Ryb3Aob2xkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P2ZlbnRyeS5zL2JwZl9mZW50cnlfdGVzdDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9wZXJjcHVfb2JqX25ldyB0eXBlIElEIGFyZ3VtZW50IG11c3QgYmUgb2YgYSBzdHJ1Y3Qgb2Ygc2NhbGFycyYjMzQ7KQogaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzYpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYwppbmRleCAzMWQ0MDgxYzNhOWZkLi5jZGIyNTVhZGRiYzMwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMKQEAgLTU5Miw5ICYjNDM7NTkyLDkgQEAgaW50IG5vbl9vd25fcmVmX3VudHJ1c3RlZF9sZCh2b2lkICpjdHgpCiAJfQogCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKIAkvKgotCSAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURUQKLQkgKiB8IE5PTl9PV05fUkVGLCBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTQotCSAqIHJld3JpdGUgZm9yIGl0LCBvdGhlcndpc2UgYSBiYWQgYWRkcmVzcyBwYW5pY3MgdGhlIGtlcm5lbC4KJiM0MzsJICogVGhlIHVubG9jayBsZWF2ZXMgbm9kZSBhcyBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgUFRSX1VOVFJVU1RFRCwKJiM0MzsJICogYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU0gcmV3cml0ZSBmb3IgaXQsCiYjNDM7CSAqIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLgogCSAqLwogCW5vbl9vd25fcmVmX2tleSA9IG5vZGUtJmd0O2tleTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYwppbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7CiAJc3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB7CiAJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiAJX190eXBlKGtleSwgaW50KTsKQEAgLTMwLDYgJiM0MzszOSwxMyBAQCBzdHJ1Y3QgewogCV9fdWludChtYXhfZW50cmllcywgMik7CiB9IHN0YXNoZWRfbm9kZXMgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwogc3RydWN0IG5vZGVfYWNxdWlyZSB7CiAJbG9uZyBrZXk7CiAJbG9uZyBkYXRhOwpAQCAtODMyLDYgJiM0Mzs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTsKJiM0MzsKJiM0MzsJbiA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpOwomIzQzOwlpZiAoIW4pCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CWJwZl9vYmpfZHJvcChuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9zeXNjYWxsJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIW0pCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpCiB7CiAJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKaW5kZXggZWFhZWQwODU5Zjk0Ni4uMzM4ZTQzODIyZmZlYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKQEAgLTE5LDYgJiM0MzsxOSwyNiBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHsKIAlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwogfTsKIAomIzQzO3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgewomIzQzOwlsb25nIGtleTsKJiM0MzsJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJjdV9ncmFwaF9ub2RlIHsKJiM0MzsJc3RydWN0IGJwZl9yYl9ub2RlIG5vZGU7CiYjNDM7CWxvbmcgZGF0YTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCByY3VfZ3JhcGhfbm9kZSAqanVzdF9oZXJlX2JlY2F1c2VfYnRmX2J1ZzsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCB7CiYjNDM7CXN0cnVjdCByY3VfZ3JhcGhfbm9kZSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltOwogCkBAIC0yNyw2ICYjNDM7NDcsMjIgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jazsKIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTsKIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7CiYjNDM7cHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBncmFwaF9sb2NrOwomIzQzO3ByaXZhdGUoQykgc3RydWN0IGJwZl9yYl9yb290IGdyYXBoX3Jvb3QgX19jb250YWlucyhyY3VfZ3JhcGhfbm9kZSwgbm9kZSk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JjdV9ncmFwaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAogc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKIHsKQEAgLTg5LDYgJiM0MzsxMjUsMTIwIEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9ub25fb2JqZWN0KHZvaWQgKmN0eCkKIAlyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMOwogfQogCiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CiYjNDM7CS8qIEZvcmNlIENsYW5nIHRvIGVtaXQgY29tcGxldGUgQlRGIGZvciBzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5LiAqLwomIzQzOwl0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpOwomIzQzOwlpZiAoIXRtcCkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlicGZfb2JqX2Ryb3AodG1wKTsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZQomIzQzO19fbXNnKCYjMzQ7YnBmX3JidHJlZV9yZW1vdmUgY2FuIG9ubHkgdGFrZSBub24tb3duaW5nIG9yIHJlZmNvdW50ZWQgJiMzNDsKJiM0MzsgICAgICAmIzM0O2JwZl9yYl9ub2RlIHBvaW50ZXImIzM0OykKJiM0Mztsb25nIHJidHJlZV9yZW1vdmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsOwomIzQzOwlzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7CiYjNDM7CXN0cnVjdCByY3VfZ3JhcGhfbm9kZSAqbm9kZTsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CiYjNDM7CW1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzdGFzaGVkX3JjdV9ncmFwaCwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwlub2RlID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW5vZGUpIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwlyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoJmFtcDtncmFwaF9yb290LCAmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtncmFwaF9sb2NrKTsKJiM0MzsJaWYgKHJiX25vZGUpCiYjNDM7CQlicGZfb2JqX2Ryb3AoY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCByY3VfZ3JhcGhfbm9kZSwgbm9kZSkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZiYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpub2RlLCAqcmVmOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwlub2RlID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW5vZGUpIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobm9kZSk7CiYjNDM7CWlmIChyZWYpCiYjNDM7CQlicGZfb2JqX2Ryb3AocmVmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9zeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0Mztsb25nIGdyYXBoX2twdHJfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGggKm1hcHZhbDsKJiM0MzsJc3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmN1X2dyYXBoLCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtncmFwaF9sb2NrKTsKJiM0MzsJbm9kZSA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFub2RlKSB7CiYjNDM7CQlicGZfc3Bpbl91bmxvY2soJmFtcDtncmFwaF9sb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9zcGluX3VubG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gbm9kZS0mZ3Q7ZGF0YTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fSYjMzQ7KQogbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFsb25nIHdpdGggc29tZSBhc3NvY2lhdGVkIHNlbGZ0ZXN0cy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBCUEYgc3Vic3lzdGVtIGlzIGluY3JlZGlibHkgaW1wb3J0YW50IGFuZCBnZXRzIGEgbG90IG9mIGV4cG9zdXJlLiBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZmFpcmx5IGZvY3VzZWQsIGJ1dCB0aGV5IHN0aWxsIHJlcHJlc2VudCBhIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4KClNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0bzoKCiogICBBIG5ldyBpbmxpbmUgZnVuY3Rpb24gYHR5cGVfaXNfcHRyX2FsbG9jX29iamAgdXNlZCBpbiB0aGUgdmVyaWZpZXIuCiogICBDaGFuZ2VzIHRvIGBtYXBfa3B0cl9tYXRjaF90eXBlYCByZWxhdGVkIHRvIE1FTVxfUEVSQ1BVIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBCUEZcX0tQVFJcX1BFUkNQVS4KKiAgIE5ldyBjaGVja3MgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgaW5jbHVkaW5nIGEgY29uZGl0aW9uIHRoYXQgbG9va3MgYXQgYWxsb2NhdGVkIG9iamVjdHMgYW5kIHRoZWlyIGxpZmV0aW1lLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGlzIHNlY3Rpb24sIGFzIHRoaXMgaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCYjMzk7cyBlYXN5IHRvIGdldCB3cm9uZyBhbmQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgYnVncy4gVGhpcyBpbnRyb2R1Y2VzIGNoZWNrcyBmb3Igd2hhdCBsb29rcyBsaWtlIG5ldyBsaWZldGltZSByZXN0cmljdGlvbnMuCiogICBUaGUgYHByb2Nlc3Nfc3Bpbl9sb2NrYCBmdW5jdGlvbiwgd2hpY2ggaGFzIHRoZSB2ZXJpZmllciBpbnRlcmFjdGluZyB3aXRoIG5vbi1vd25pbmcgcmVmcywgYW5kIFJDVSBwcm90ZWN0ZWQgcmVmcy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlc2UgcmVmcyBhcmUgaW52YWxpZGF0ZWQgZm9yIGNvcnJlY3RuZXNzLgoqICAgQW4gYWRkaXRpb25hbCBjaGVjayBpbiBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIHRoYXQgZXhwbGljaXRseSBkZWFscyB3aXRoIGludmFsaWRhdGluZyBNRU1cX1JDVSByZWZzLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBhYm92ZSBjaGFuZ2UsIGFuZCBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgYXQuCiogICBBbiB1cGRhdGUgdG8gYGNoZWNrX2tmdW5jX2FyZ3NgIHdoaWNoIG5vdyB0cmFja3MgJiMzOTthcmdfb3duaW5nX3JlZiYjMzk7IGJhc2VkIG9uIHdoZXRoZXIgd2UgaGF2ZSBhIG5vbi1vd25pbmcgcmVmLCBhbmQgYW4gZXhpc3RpbmcgcmVmZXJlbmNlLgoKVGhlIG1vZGlmaWNhdGlvbnMgc3BhbiB0aGUgdmVyaWZpZXIgbG9naWMgaXRzZWxmIGFuZCB0aGUgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgdmVyaWZpZXIsIHNvIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGZ1enppbmcgcnVsZXMsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0Oy4KCk5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZvcm0gYSBmdXp6aW5nIHN0cmF0ZWd5LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlnIG9wdGlvbnMgZW5hYmxlIHRoZXNlIG5ldyBmZWF0dXJlcyBvciB0cmlnZ2VyIHRoZXNlIHZlcmlmaWVyIHBhdGhzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdXNlIHRvb2xzIGxpa2UgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgZmlsZXMgdG8gaWRlbnRpZnkgc3BlY2lmaWMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdCBjb250cm9sIHRoZSByZWxldmFudCB2ZXJpZmllciBiZWhhdmlvcnMuIEkmIzM5O2xsIGZvY3VzIG9uIGNyYWZ0aW5nIGZ1enppbmcgaW5wdXRzIHRoYXQgc3BlY2lmaWNhbGx5IGV4ZXJjaXNlIHRoZSBuZXcgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGhlcmUsIGFuZCBhbHNvIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gbWVtb3J5IHNhZmV0eSBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMTQ1LVx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI0Njg9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDcxLVxua2VybmVsL2JwZi9jb3JlLmM6MjQ3MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMwMzY9dm9pZCBfX2JwZl9mcmVlX3VzZWRfYnRmcyhzdHJ1Y3QgYnRmX21vZF9wYWlyICp1c2VkX2J0ZnMsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcbmtlcm5lbC9icGYvY29yZS5jOjMwMzg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzAzOS1cdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzA1Nz1zdGF0aWMgdm9pZCBicGZfcHJvZ19mcmVlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYyLVx0YXV4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBicGZfcHJvZ19hdXgsIHdvcmspO1xua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDY0LVx0YnBmX2ZyZWVfa2Z1bmNfYnRmX3RhYihhdXgtXHUwMDNla2Z1bmNfYnRmX3RhYik7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzM4ND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg1LXtcbmtlcm5lbC9icGYvY29yZS5jOjMzODY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzM4Ny1cdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0MjQ9X193ZWFrIHU2NCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQyOC1cbmtlcm5lbC9icGYvY29yZS5jOjM0Mjk6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0NTU9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTCh4ZHBfYnVsa190eCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU2LVxua2VybmVsL2JwZi9jb3JlLmM6MzQ1NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU4LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MTQ9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUyMjogICAgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIzLVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3Njk9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDYtXHQgIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE4MDc6XHQgIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFZlcmlmaWVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBtb2RpZmljYXRpb25zIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZXhhbWluZToKCjEuICBgbWFwX2twdHJfbWF0Y2hfdHlwZWA6IEl0cyByb2xlIGluIHZlcmlmeWluZyBrcHRyIGNvbXBhdGliaWxpdHkgaXMgY3J1Y2lhbC4gQW55IGNoYW5nZXMgaGVyZSBjb3VsZCBoYXZlIGJyb2FkIGltcGxpY2F0aW9ucyBmb3IgbWFwIGFjY2VzcyBhbmQga3B0ciBoYW5kbGluZywgd2hpY2ggaXMgY29yZSBmdW5jdGlvbmFsaXR5LgoyLiAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYDogVGhpcyBpcyBvYnZpb3VzbHkga2V5IGZvciBCVEYtcmVsYXRlZCBwb2ludGVyIGNoZWNrcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hlY2tzIGhhdmUgYmVlbiByZWZpbmVkLCBhcyBCVEYgYWNjZXNzIGlzIGNyaXRpY2FsIGZvciBzYWZldHkuCjMuICBgcHJvY2Vzc19zcGluX2xvY2tgOiBTcGlubG9ja3Mgd2l0aGluIEJQRiBjb250ZXh0cyBhcmUgYSBjb21tb24gc291cmNlIG9mIGNvbnRlbnRpb24uIEkgbmVlZCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFzIGV2b2x2ZWQgaW4gdGhlIGZhY2Ugb2YgdGhlc2UgY2hhbmdlcy4KNC4gIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2A6IEVuc3VyaW5nIHByb3BlciBSQ1UgdXNhZ2UgaW4gQlBGIGlzIGltcGVyYXRpdmUgZm9yIG1lbW9yeSBzYWZldHkuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBoYXMgYmVlbiBhZGFwdGVkLgo1LiAgYGNoZWNrX2tmdW5jX2FyZ3NgOiBJIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGhhdmUgYmVlbiBtb2RpZmllZCBmb3IgdGhpcyBrZnVuYywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IHJlc3RyaWN0aW9ucyBvciBlbmhhbmNlbWVudHMuCgpJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGA6IGB0eXBlX2lzX3B0cl9hbGxvY19vYmpgLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlc2Ugb3RoZXIgZnVuY3Rpb25zLiBJJiMzOTtsbCBjaGVjayBpdHMgdXNhZ2UuIEl0cyBhcHBsaWNhdGlvbiBjb3VsZCBnaXZlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHlwZV9pc19wdHJfYWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTI5PWNvbnN0IGNoYXIgKmJwZl9kaWFnX3JlZ190eXBlX3BsYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1Mi1cdFx0XHRyZXR1cm4gXCYjMzQ7YSBib3Jyb3dlZCBhbGxvY2F0ZWQgb2JqZWN0IHBvaW50ZXJcJiMzNDs7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6OTUzOlx0XHRpZiAodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHR5cGUpKVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1NC1cdFx0XHRyZXR1cm4gXCYjMzQ7YW4gb3duZWQgYWxsb2NhdGVkIG9iamVjdCBwb2ludGVyXCYjMzQ7O1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yMDk4PXN0YXRpYyBjb25zdCBjaGFyICpkaWFnX3JlZ19zbmFwc2hvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMTUxLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjIxNTI6XHRpZiAodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHNuYXBzaG90LVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMjE1My1cdFx0aWYgKGJ0Zilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY4PXN0YXRpYyBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVnX2J0Zl9yZWNvcmQoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc0LVx0XHRyZWMgPSByZWctXHUwMDNlbWFwX3B0ci1cdTAwM2VyZWNvcmQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzc1Olx0fSBlbHNlIGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc2LVx0XHRtZXRhID0gYnRmX2ZpbmRfc3RydWN0X21ldGEocmVnLVx1MDAzZWJ0ZiwgcmVnLVx1MDAzZWJ0Zl9pZCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU5NTg9c3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDM1LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDM2Olx0XHRpZiAoYXR5cGUgIT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2ICF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAzNy1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7b25seSByZWFkIGlzIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1MDE9c3RhdGljIGludCBwcm9jZXNzX2twdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1MDktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzUxMDpcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzUxMS1cdFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2MDY9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxODAtXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxODE6XHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxODItXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXG5cJiMzNDssXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTU4PXN0YXRpYyB2b2lkIG1hcmtfcHRyX29yX251bGxfcmVnKHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NTcxLVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjU3MjpcdFx0aWYgKCEodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSB8fCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY1NzMtXHRcdCAgICBXQVJOX09OX09OQ0UoIXRudW1fZXF1YWxzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmLCAwKSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBGdW5jdGlvbiBTY29wZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzY29wZSBvZiB0aGVzZSByZWNlbnRseSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhleSYjMzk7cmUgc3RhdGljIG9yIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG90aGVyIEJQRiBwcm9ncmFtcy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb3Igb3RoZXJ3aXNlIG9mIHRoZSBmb2xsb3dpbmc6IGBtYXBfa3B0cl9tYXRjaF90eXBlYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYHByb2Nlc3Nfc3Bpbl9sb2NrYCwgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQsIGNydWNpYWxseSwgYGJwZl9jaGVja2AuIFRoZSBtYWluIHZlcmlmaWVyIGVudHJ5IHBvaW50LCBgYnBmX2NoZWNrYCwgd2FycmFudHMgZXh0cmEgYXR0ZW50aW9uLiBJIGFsc28gbmVlZCB0byBhc2NlcnRhaW4gdGhlIHN0YXRpYyBzdGF0dXMgb2YgdGhlIGBicGZfdmVyaWZpZXJfZW52YCBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7cyBvZnRlbiB0aWVkIHRvIHRoZSB2ZXJpZmljYXRpb24gY29udGV4dC4gS25vd2luZyB0aGlzIHdpbGwgZGlyZWN0bHkgaW5mb3JtIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFsIHN0cnVjdHVyZSBpcyBvcmdhbml6ZWQgYW5kIGhvdyBjaGFuZ2VzIGluIHRoZXNlIGZ1bmN0aW9ucyBhZmZlY3QgZXh0ZXJuYWwgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBicGZfY2hlY2tcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTM3PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA1My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTA1NDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA1NS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODkzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgb2NjdXJyaW5nIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGNvZGUuIFRoZSBpbml0aWFsIGxpc3QgcG9pbnRzIG1lIHRvIGBicGZfdmVyaWZpZXIuY2AsIGFuZCBzcGVjaWZpY2FsbHkgdGhlc2Ugc3ltYm9sczogYG1hcF9rcHRyX21hdGNoX3R5cGVgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgcHJvY2Vzc19zcGluX2xvY2tgLCBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBhbHNvIGBicGZfY2hlY2tgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBJcyBgYnBmX2NoZWNrYCB0aGUgZXBpY2VudGVyLCBvciBhcmUgdGhlc2UgbGlzdGVkIGZ1bmN0aW9ucyB0aGUgc3BlY2lmaWMgdGFyZ2V0cz8gTXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBmdXp6aW5nLCBhbmQgc3l6a2FsbGVyIGluIHBhcnRpY3VsYXIsIHN1Z2dlc3RzIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIG9uIGBCUEZfUFJPR19MT0FEYCwgbWFraW5nIGl0IGEgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBzZWVpbmcgZGlyZWN0IG1vZGlmaWNhdGlvbi4KClRoaXMgYWxpZ25zIHdpdGggZ3VpZGVsaW5lIDQ6ICYjMzQ7VEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTJiMzNDsuIFNvLCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0ICpkaXJlY3RseSogaW1wbGVtZW50IHRoZSBhZGRlZCBvciBhbHRlcmVkIGxvZ2ljLiBHdWlkZWxpbmUgNCBhbHNvIHdhcm5zIGFnYWluc3QgdWJpcXVpdG91cyBob3QtcGF0aHMsIHdoaWNoIGlzIGEgZ29vZCByZW1pbmRlci4KClRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWx0ZXJlZCBkaXJlY3RseSBhcmU6IGBjaGVja19rZnVuY19hcmdzYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYG1hcF9rcHRyX21hdGNoX3R5cGVgLCBgcHJvY2Vzc19zcGluX2xvY2tgLCBhbmQgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBhcmUgdGhvc2UgZml2ZSBmdW5jdGlvbnMgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UsIG9yIGlzIGBicGZfY2hlY2tgIGFsc28gaW1wYWN0ZWQgc2lnbmlmaWNhbnRseT8gSXQgbG9va3MgbGlrZSB0aG9zZSBmaXZlIGZ1bmN0aW9ucywgYWxsIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYXJlIHRoZSBwcmVjaXNlIGFyZWFzIHdoZXJlIHRoZSB2ZXJpZmllciBsb2dpYyBoYXMgYmVlbiBtb2RpZmllZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KClNvLCBJIHJlLWV4YW1pbmUgdGhlIGRpZmYgYW5kIHB1bGwgb3V0IHRoZSBmb2xsb3dpbmc6CgoxLiAgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgOiB0aGUgZnVuY3Rpb24gYHR5cGVfaXNfcHRyX2FsbG9jX29iamAgaXMgaW52b2x2ZWQuCjIuICBga2VybmVsL2JwZi92ZXJpZmllci5jYDogdGhlIGxpc3RlZCBmaXZlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCB0aGVpciBzcGVjaWZpYyBsaW5lIG51bWJlciByYW5nZXMgd2l0aGluIHRoZSBmaWxlLiBJIGFsc28gbm93IGhhdmUgdGhlIGNvcnJlY3QgY29udGV4dDoKICAgICogICBgbWFwX2twdHJfbWF0Y2hfdHlwZWAgKGxpbmVzIDQ0ODgtNDQ5NykKICAgICogICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIChsaW5lcyA2MDMxLTYwNDcpCiAgICAqICAgYHByb2Nlc3Nfc3Bpbl9sb2NrYCAobGluZXMgNzQwOS03NDMyKQogICAgKiAgIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2AgKGxpbmVzIDk1MTItOTUzNSkKICAgICogICBgY2hlY2tfa2Z1bmNfYXJnc2AgKGxpbmVzIDEzMTcxLTEzMTkyKQoKRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgYnVpbGQgY29udGV4dC4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQlBGX1NZU0NBTExgIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGVxdWl2YWxlbnQgc2VhcmNoLCBtYXliZSByZWZpbmVkIHdpdGggYSBgZmluZGAgb3IgYGdpdCBncmVwYCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG9wdGlvbiB0byBiZSBwcmV2YWxlbnQsIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGltcG9ydGFuY2Ugb2YgQlBGIGFuZCBzeXN0ZW0gY2FsbHMgd2l0aGluIHRoZSBrZXJuZWwuIEkgd2lsbCBtb3N0IGxpa2VseSB1c2UgYSBzZXJpZXMgb2YgcXVlcmllcy4gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhpcyBpcyBoYW5kbGVkIGFjcm9zcyBhcmNoaXRlY3R1cmVzIGFuZCBrZXJuZWwgdmVyc2lvbnMg4oCTIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYW55IGFzc3VtcHRpb25zIGJhc2VkIG9uIGEgc2luZ2xlIHNlYXJjaC4gT25jZSBJIGhhdmUgdGhlIHJlc3VsdHMsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGFueSBjb250ZXh0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHVzYWdlcyBpbiBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCBhbHNvIEMgY29kZSB3aGljaCByZWZlcmVuY2VzIHRoZSBtYWNybyBvciB1c2VzIGl0cyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBzZWN1cml0eSBmZWF0dXJlcywgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIGFuZCBvZiBjb3Vyc2UgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBkZXZlbG9wIGEgdmlldyBvZiB0aGUgZWNvc3lzdGVtIGFyb3VuZCBgQlBGX1NZU0NBTExgIHRvIGZpZ3VyZSBvdXQgaXRzIGN1cnJlbnQgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkJQRiBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hhdCBCUEYgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2hhdCBtb2R1bGVzIGFyZSBhdmFpbGFibGUsIGFuZCBwb3RlbnRpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIExpbmUgMjUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBzZXR0aW5nIHVwIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuIEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgc29tZSBkZXRhaWxzIG9uIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyB1c2luZyBCUEYsIG9yIHdoYXQgYXJlIGRlcGVuZGVudCBvbiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDU5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgQlRGIGZvciBCUEYgRmVhdHVyZSBBbmFseXNpcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoaXMgQlBGIGZlYXR1cmUgc2V0IGFuZCBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGFscmVhZHkgbG9va2luZyBhdCBrcHRyIGhhbmRsaW5nIOKAkyBjbGVhcmx5IGEgY3JpdGljYWwgYXNwZWN0IOKAkyBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBjb25uZWN0aW9ucyB0byBCVEYgKEJQRiBUeXBlIEZvcm1hdCkuIEdpdmVuIHRoZSB3YXkgdGhlc2UgZmVhdHVyZXMgb2Z0ZW4gaW50ZXJhY3Qgd2l0aCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgQlRGIHRvIGluZm9ybSB0aG9zZSBpbnRlcmFjdGlvbnMsIGl0IG1ha2VzIHNlbnNlIHRvIGV4cGxpY2l0bHkgY29uZmlybSBvdXIgY292ZXJhZ2Ugb2YgYERFQlVHX0lORk9fQlRGYC4gSXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlc2UgQlBGIGZlYXR1cmVzIGFuZCBob3cgdGhleSBwbGF5IHdpdGggdGhlIGtlcm5lbC4gSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG1pc3MgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19JTkZPX0JURiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xubGliL0tjb25maWcuZGVidWctNDI5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NDUKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBWZXJpZmljYXRpb24gVGhvdWdodHMqKgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBlc3NlbnRpYWxzIHN0cmFpZ2h0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkOyBpdCYjMzk7cyB0aGUgYmVkcm9jayBmb3IgY29tcGlsaW5nIGB2ZXJpZmllci5vYCwgYW5kIHRoZSBNYWtlZmlsZSBpbiBga2VybmVsL2JwZmAgYmFja3MgdGhhdCB1cC4gVGhlbiwgYERFQlVHX0lORk9fQlRGYCBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBCVEYgc3VwcG9ydCBpbiBCUEYuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgRm9jdXNTeW1ib2xzOyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgcG9pbnRzOgotICAgYG1hcF9rcHRyX21hdGNoX3R5cGVgCi0gICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgCi0gICBgcHJvY2Vzc19zcGluX2xvY2tgCi0gICBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgCi0gICBgY2hlY2tfa2Z1bmNfYXJnc2AKCk9rYXksIHRoZSBwYXRjaCBpcyBxdWl0ZSBpbnZvbHZlZCwgdG91Y2hpbmcgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYWNyb3NzIHRoZSBib2FyZCwgc28gbGV0IG1lIGJyZWFrIGl0IGRvd24uIEl0IGhhcyBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIHZlcmlmaWNhdGlvbiBzdGVwczoKCjEuICBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCBub3cgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVzIGBQVFJfVU5UUlVTVEVEYCBwb2ludGVycyBhcyB2YWxpZCBhbGxvY2F0ZWQgb2JqZWN0cy4KMi4gIGBtYXBfa3B0cl9tYXRjaF90eXBlYDogVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSBgQlBGX0tQVFJfUEVSQ1BVYCBmaWVsZHMgbGluZSB1cCB3aXRoIGBNRU1fUEVSQ1BVYCByZWdpc3RlcnMuCjMuICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgOiBUaGlzIG9uZSBhbGxvd3MgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdHMgKGBicGZfbWF5X2ZhdWx0X29uX2RlcmVmYCkgdG8gYmUgcmVhZCBhZnRlciB0aGVpciBsaWZldGltZSBwcm90ZWN0aW9uIGhhcyBlbmRlZCwgd2l0aG91dCB0cmlnZ2VyaW5nIGEgYHZlcmlmaWVyX2J1Z2AuCjQuICBgcHJvY2Vzc19zcGluX2xvY2tgOiBJdCYjMzk7cyBlbnN1cmluZyB0aGF0IHdlIGludmFsaWRhdGUgbm9uLW93bmluZyByZWZlcmVuY2VzICpiZWZvcmUqIGludmFsaWRhdGluZyBSQ1UgcHJvdGVjdGVkIHJlZmVyZW5jZXMuCjUuICBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgOiBJdCBjbGVhcnMgdGhlIGBOT05fT1dOX1JFRmAgZmxhZyBvbiBSQ1UtZGVtb3RlZCByZWdpc3RlcnMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgcmVnaXN0ZXIgc3RhdGUuCjYuICBgY2hlY2tfa2Z1bmNfYXJnc2A6IFRoaXMgaXMgdGhlIGNydWNpYWwgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYSByZWdpc3RlciBpcyBhY3R1YWxseSByZWZlcmVuY2VkIGJlZm9yZSB0cmVhdGluZyBpdCBhcyBhbiBvd25pbmcgcmVmZXJlbmNlIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLgoKU2luY2UgdGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbXBhY3QgdGhlIGBicGYoKWAgc3lzY2FsbCB0aHJvdWdoIGBCUEZfUFJPR19MT0FEYCwgSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIGZ1enppbmcgdG8gaHVudCBmb3IgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzLCBwcm9ibGVtcyBpbiBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgdHJhY2tlZCwgb3IgdGhlIHBvdGVudGlhbCBmb3IgY3Jhc2hlcy4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgdGhlIGxvZ2ljIHNlZW1zIHNvdW5kIGFuZCB0aGUgY2hhbmdlcyBhcmUgd2VsbC11bmRlcnN0b29kLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXBfa3B0cl9tYXRjaF90eXBlJiMzNDssCiAgICAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgICAmIzM0O3Byb2Nlc3Nfc3Bpbl9sb2NrJiMzNDssCiAgICAmIzM0O2ludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgYW5kIHNhZmV0eSBjaGVja3MgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGFuZCBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgUFRSX1VOVFJVU1RFRCBmbGFncyBmb3IgYWxsb2NhdGVkIG9iamVjdHMsIEJQRl9LUFRSX1BFUkNQVSBtYXRjaGluZywgZmF1bHQtdG9sZXJhbnQgQlRGIGxvYWRzLCByZWZlcmVuY2UgaW52YWxpZGF0aW9uIG9yZGVyIGR1cmluZyBzcGluIHVubG9jayAvIFJDVSB1bmxvY2ssIGFuZCBvd25pbmcgcmVmZXJlbmNlIGNoZWNrcyBpbiBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hcF9rcHRyX21hdGNoX3R5cGUmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19zcGluX2xvY2smIzM0OywKICAgICYjMzQ7aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfYXJncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciByZWdpc3RlciBzdGF0ZSB0cmFja2luZyBhbmQgc2FmZXR5IGNoZWNrcyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYW5kIGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBQVFJfVU5UUlVTVEVEIGZsYWdzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cywgQlBGX0tQVFJfUEVSQ1BVIG1hdGNoaW5nLCBmYXVsdC10b2xlcmFudCBCVEYgbG9hZHMsIHJlZmVyZW5jZSBpbnZhbGlkYXRpb24gb3JkZXIgZHVyaW5nIHNwaW4gdW5sb2NrIC8gUkNVIHVubG9jaywgYW5kIG93bmluZyByZWZlcmVuY2UgY2hlY2tzIGluIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIHJlZ2FyZGluZyByZWZlcmVuY2UgdHJhY2tpbmcgKG5vbi1vd25pbmcgcmVmZXJlbmNlcywgUkNVLXByb3RlY3RlZCByZWZlcmVuY2VzLCBhbmQgcGVyLUNQVSBrcHRycykgYW5kIHR5cGUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdmVyaWZpZXIgdHJhY2tpbmcgY291bGQgbGVhZCB0byBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyksIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2RhYWQ2ODNkNTMzNGRhNWZiYjQxYTRhYWUyODY5ZWNkOGUyMGI0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTc6NDU6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAxMzM5YzJmMDI4ZGIwLi4zNmI2NTc5Nzg3N2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTEzODEsNyAmIzQzOzEzODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3R5cGVfaGFzX3Vuc2FmZV9tb2RpZmllcnModTMyIHR5cGUpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpCiB7Ci0JcmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEICZhbXA7JmFtcDsgdHlwZV9mbGFnKHR5cGUpICZhbXA7IE1FTV9BTExPQzsKJiM0MzsJcmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBNRU1fQUxMT0MgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgJmFtcDsgUFRSX1VOVFJVU1RFRCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHUzMiB0eXBlKQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTQ0ODgsNiAmIzQzOzQ0ODgsMTMgQEAgc3RhdGljIGludCBtYXBfa3B0cl9tYXRjaF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKHR5cGVfZmxhZyhyZWctJmd0O3R5cGUpICZhbXA7IH5wZXJtX2ZsYWdzKQogCQlnb3RvIGJhZF90eXBlOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgQlBGX0tQVFJfUEVSQ1BVIGZpZWxkIGlzIHJlYWQgYmFjayBhcyBNRU1fUEVSQ1BVLCBzbyB0aGUgdmFsdWUKJiM0MzsJICogc3RvcmVkIGluIGl0IG11c3QgY2FycnkgdGhlIHNhbWUgZmxhZy4KJiM0MzsJICovCiYjNDM7CWlmICgoa3B0cl9maWVsZC0mZ3Q7dHlwZSA9PSBCUEZfS1BUUl9QRVJDUFUpICE9ICEhKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUEVSQ1BVKSkKJiM0MzsJCWdvdG8gYmFkX3R5cGU7CiYjNDM7CiAJLyogV2UgbmVlZCB0byB2ZXJpZnkgcmVnLSZndDt0eXBlIGFuZCByZWctJmd0O2J0ZiwgYmVmb3JlIGFjY2Vzc2luZyByZWctJmd0O2J0ZiAqLwogCXJlZ19uYW1lID0gYnRmX3R5cGVfbmFtZShyZWctJmd0O2J0ZiwgcmVnLSZndDtidGZfaWQpOwogCkBAIC02MDMxLDcgJiM0Mzs2MDM4LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiAKLQkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdCBtYXkgc3RpbGwgYmUgcmVhZCB0aHJvdWdoIGEKJiM0MzsJCSAqIEJQRl9QUk9CRV9NRU0gbG9hZCBhZnRlciBpdHMgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLiBXcml0ZXMKJiM0MzsJCSAqIHRocm91Z2ggc3VjaCBwb2ludGVycyB3ZXJlIHJlamVjdGVkIGFib3ZlLgomIzQzOwkJICovCiYjNDM7CQlpZiAodHlwZV9pc19hbGxvYyhyZWctJmd0O3R5cGUpICZhbXA7JmFtcDsgIWJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiAJCSAgICAhKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSAmYW1wOyZhbXA7ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpIHsKIAkJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7YWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkJiMzNDspOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC03NDA5LDEwICYjNDM7NzQyMiwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc3Bpbl9sb2NrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlCiAJCQkJbG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEludmFsaWRhdGUgbm9uLW93bmluZyByZWZzIGJlZm9yZSBSQ1UgZGVtb3Rpb24gY2xlYXJzIHRoZWlyCiYjNDM7CQkgKiBOT05fT1dOX1JFRiBmbGFnLgomIzQzOwkJICovCiYjNDM7CQlpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhlbnYpOwomIzQzOwogCQlpZiAoIWluX3JjdV9jcyhlbnYpKQogCQkJaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTsKLQotCQlpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhlbnYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk1MTIsNyAmIzQzOzk1MjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCWJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LSZndDtjdXJfc3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBjbGVhcl9tYXNrLCAoewogCQlpZiAocmVnLSZndDt0eXBlICZhbXA7IE1FTV9SQ1UpIHsKIAkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsIHJlZywgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTsKLQkJCXJlZy0mZ3Q7dHlwZSAmYW1wOz0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpOwomIzQzOwkJCXJlZy0mZ3Q7dHlwZSAmYW1wOz0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwgfCBOT05fT1dOX1JFRik7CiAJCQlyZWctJmd0O3R5cGUgfD0gUFRSX1VOVFJVU1RFRDsKIAkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKIAkJfQpAQCAtMTMxNzEsNyAmIzQzOzEzMTg4LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCQkJCSAgICAgIGJwZl9kaWFnX3JlZ190eXBlX3BsYWluKGVudiwgcmVnLSZndDt0eXBlKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSkKJiM0MzsJCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkKIAkJCQltZXRhLSZndDthcmdfb3duaW5nX3JlZiA9IHRydWU7CiAKIAkJCXJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jCmluZGV4IDA4Mzc5YzNiNmEwMzguLjM3MDFmNGVhNThjNzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jCkBAIC0zMyw2ICYjNDM7MzMsMjAgQEAgc3RydWN0IHsKIAlfX3R5cGUodmFsdWUsIHN0cnVjdCBlbGVtKTsKIH0gYXJyYXkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtIHsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0IF9fcGVyY3B1X2twdHIgKnRhc2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtKTsKJiM0Mzt9IGtlcm5lbF9wZXJjcHVfYXJyYXkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzOwogbG9uZyByZXQ7CiAKIFNFQygmIzM0Oz9mZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQpAQCAtMTM3LDYgJiM0MzsxNTEsNTEgQEAgaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9dHJ1c3RlZF9wdHJfIGV4cGVjdGVkPXB0cl90YXNrX3N0cnVjdCYjMzQ7KQomIzQzO2ludCByZWplY3Rfa2VybmVsX3B0cl9pbnRvX3BlcmNwdV9rcHRyKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0gKmU7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDsKJiM0MzsJaW50IGluZGV4ID0gMDsKJiM0MzsKJiM0MzsJZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtrZXJuZWxfcGVyY3B1X2FycmF5LCAmYW1wO2luZGV4KTsKJiM0MzsJaWYgKCFlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXAgPSBicGZfdGFza19mcm9tX3BpZCgxKTsKJiM0MzsJaWYgKCFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDtlLSZndDt0YXNrLCBwKTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2Uob2xkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT1wdHJfIGV4cGVjdGVkPXB0cl92YWxfdCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhyZWplY3RfcGxhaW5fYWxsb2NfaW50b19wZXJjcHVfa3B0cikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2YWxfdCBfX3BlcmNwdV9rcHRyICpvbGQ7CiYjNDM7CXN0cnVjdCB2YWxfdCAqcDsKJiM0MzsJc3RydWN0IGVsZW0gKmU7CiYjNDM7CWludCBpbmRleCA9IDA7CiYjNDM7CiYjNDM7CWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YXJyYXksICZhbXA7aW5kZXgpOwomIzQzOwlpZiAoIWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcCA9IGJwZl9vYmpfbmV3KHN0cnVjdCB2YWxfdCk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7ZS0mZ3Q7cGMsIHApOwomIzQzOwlpZiAob2xkKQomIzQzOwkJYnBmX3BlcmNwdV9vYmpfZHJvcChvbGQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7YnBmX3BlcmNwdV9vYmpfbmV3IHR5cGUgSUQgYXJndW1lbnQgbXVzdCBiZSBvZiBhIHN0cnVjdCBvZiBzY2FsYXJzJiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jCmluZGV4IDMxZDQwODFjM2E5ZmQuLmNkYjI1NWFkZGJjMzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYwpAQCAtNTkyLDkgJiM0Mzs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eCkKIAl9CiAJYnBmX3JjdV9yZWFkX3VubG9jaygpOwogCS8qCi0JICogVGhlIHVubG9jayBsZWF2ZXMgbm9kZSBhcyBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgUFRSX1VOVFJVU1RFRAotCSAqIHwgTk9OX09XTl9SRUYsIGFuZCB0aGUgbG9hZCBiZWxvdyBoYXMgdG8gZ2V0IHRoZSBCUEZfUFJPQkVfTUVNCi0JICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLgomIzQzOwkgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVELAomIzQzOwkgKiBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTSByZXdyaXRlIGZvciBpdCwKJiM0MzsJICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuCiAJICovCiAJbm9uX293bl9yZWZfa2V5ID0gbm9kZS0mZ3Q7a2V5OwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCmluZGV4IDYxOTA2ZjQ4MDI1Y2MuLmNhZTAwZjdiMGEyNDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKQEAgLTIzLDYgJiM0MzsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHsKIAlzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKIAlfX3R5cGUoa2V5LCBpbnQpOwpAQCAtMzAsNiAmIzQzOzM5LDEzIEBAIHN0cnVjdCB7CiAJX191aW50KG1heF9lbnRyaWVzLCAyKTsKIH0gc3Rhc2hlZF9ub2RlcyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHsKIAlsb25nIGtleTsKIAlsb25nIGRhdGE7CkBAIC04MzIsNiAmIzQzOzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwomIzQzOwluID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7CiYjNDM7CWlmICghbikKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWJwZl9vYmpfZHJvcChtKTsKJiM0MzsJYnBmX29ial9kcm9wKG4pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmICghbSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9ub2RlcywgJmFtcDtpZHgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwppbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwpAQCAtMTksNiAmIzQzOzE5LDI2IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgewogCXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgewomIzQzOwlzdHJ1Y3QgYnBmX3JiX25vZGUgbm9kZTsKJiM0MzsJbG9uZyBkYXRhOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJjdV9ncmFwaF9ub2RlICpqdXN0X2hlcmVfYmVjYXVzZV9idGZfYnVnOwomIzQzOwomIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoIHsKJiM0MzsJc3RydWN0IHJjdV9ncmFwaF9ub2RlIF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiAKQEAgLTI3LDYgJiM0Mzs0NywyMiBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdsb2NrOwogcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTsKJiM0Mztwcml2YXRlKEMpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdyYXBoX2xvY2s7CiYjNDM7cHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IHN0YXNoZWRfcmN1X2dyYXBoIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQogewpAQCAtODksNiAmIzQzOzEyNSwxMjAgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX25vbl9vYmplY3Qodm9pZCAqY3R4KQogCXJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShjdHgpICE9IE5VTEw7CiB9CiAKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJLyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovCiYjNDM7CXRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7CiYjNDM7CWlmICghdG1wKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWJwZl9vYmpfZHJvcCh0bXApOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWJwZl9vYmpfZHJvcChtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9zeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDticGZfcmJ0cmVlX3JlbW92ZSBjYW4gb25seSB0YWtlIG5vbi1vd25pbmcgb3IgcmVmY291bnRlZCAmIzM0OwomIzQzOyAgICAgICYjMzQ7YnBmX3JiX25vZGUgcG9pbnRlciYjMzQ7KQomIzQzO2xvbmcgcmJ0cmVlX3JlbW92ZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7CiYjNDM7CXN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTsKJiM0MzsJc3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmN1X2dyYXBoLCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW5vZGUgPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbm9kZSkgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7Z3JhcGhfbG9jayk7CiYjNDM7CXJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZSgmYW1wO2dyYXBoX3Jvb3QsICZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CWJwZl9zcGluX3VubG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwlpZiAocmJfbm9kZSkKJiM0MzsJCWJwZl9vYmpfZHJvcChjb250YWluZXJfb2YocmJfbm9kZSwgc3RydWN0IHJjdV9ncmFwaF9ub2RlLCBub2RlKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IxIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmJiMzNDspCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm5vZGUsICpyZWY7CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW5vZGUgPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbm9kZSkgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShub2RlKTsKJiM0MzsJaWYgKHJlZikKJiM0MzsJCWJwZl9vYmpfZHJvcChyZWYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2xvbmcgZ3JhcGhfa3B0cl9hZnRlcl9zcGluX3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsOwomIzQzOwlzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yY3VfZ3JhcGgsICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwlub2RlID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW5vZGUpIHsKJiM0MzsJCWJwZl9zcGluX3VubG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7Z3JhcGhfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlLSZndDtkYXRhOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0mIzQzO319JiMzNDspCiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjkKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMTQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgUGF0Y2ggQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIHNldmVyYWwgc3VidGxlIGJ1dCBjcml0aWNhbCBpc3N1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSBhcm91bmQgcmVmZXJlbmNlIHRyYWNraW5nLCBtZW1vcnkgc2FmZXR5LCBhbmQgdHlwZSBjb25zaXN0ZW5jeS4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyBhIHJlZmluZW1lbnQgb2YgYHR5cGVfaXNfcHRyX2FsbG9jX29iamAsIHdpdGggYW4gZXhwbGljaXQgZXhjbHVzaW9uIG9mIGBQVFJfVU5UUlVTVEVEYC4gVGhpcyBtYWtlcyBzZW5zZTsgd2UgZG9uJiMzOTt0IHdhbnQgdG8gY29uc2lkZXIgdW50cnVzdGVkIHBvaW50ZXJzIGFzIHZhbGlkIGZvciBhbGxvY2F0aW9uIHRyYWNraW5nLiBGb2xsb3dpbmcgdGhpcywgdGhlIGFkZGl0aW9uIHRvIGBtYXBfa3B0cl9tYXRjaF90eXBlYCBlbnN1cmVzIGNvbnNpc3RlbmN5IGJldHdlZW4gYEJQRl9LUFRSX1BFUkNQVWAgZmllbGRzIGFuZCB0aGUgYE1FTV9QRVJDUFVgIGZsYWcuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgdHlwZSBjb25mdXNpb24gZHVyaW5nIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLgoKVGhlIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgbW9kaWZpY2F0aW9uIGlzIGFsc28gaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBub3cgY29ycmVjdGx5IGhhbmRsaW5nIHBvdGVudGlhbGx5IGZhdWx0LXByb25lIGFsbG9jYXRlZCBvYmplY3RzIGJ5IGNoZWNraW5nIGBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy0mZ3Q7dHlwZSlgIGFuZCB0aGUgaW5jbHVzaW9uIG9mIGByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZylgIGluIGBjaGVja19rZnVuY19hcmdzYCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBhIGtleSBkZWZlbnNlIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhZnRlciB0aGUgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLgoKRnVydGhlcm1vcmUsIGNoYW5nZXMgdG8gYHByb2Nlc3Nfc3Bpbl9sb2NrYCBhbmQgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCBwcm92aWRlIGltcHJvdmVtZW50cyB0byBoYW5kbGluZyBub24tb3duaW5nIHJlZmVyZW5jZXMgYW5kIFJDVS1wcm90ZWN0ZWQgcG9pbnRlcnMsIGNvcnJlY3RpbmcgdGhlIGludmFsaWRhdGlvbiBvcmRlciBhbmQgY2xlYXJpbmcgYE5PTl9PV05fUkVGYCBhcHByb3ByaWF0ZWx5IGR1cmluZyBSQ1UgZGVtb3Rpb24gdG8gYXZvaWQgcG9zc2libGUgdXNlLWFmdGVyLWZyZWUgYnVncy4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggc3RyZW5ndGhlbnMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBhYmlsaXR5IHRvIGVuZm9yY2UgbWVtb3J5IHNhZmV0eSBieSBpbXByb3ZpbmcgcG9pbnRlciB0eXBlIHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZywgcHJldmVudGluZyBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGNoYW5nZXMgdG8gZGV0ZXJtaW5lIGlmIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZGF0YSBzdHJ1Y3R1cmUgY29ycnVwdGlvbiwgb3IgaW5mb3JtYXRpb24gbGVha3MgbWlnaHQgb2NjdXIuIEkgc2VlIG5vIGV2aWRlbmNlIG9mIHRoZXNlIGlzc3Vlcy4gSSBjaGVja2VkIGZvciBuZXcga2VybmVsIHN0cnVjdHVyZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgbm9uZSBvZiB0aGVzZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBwcmVzZW50LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtkIHNheSB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFzIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHZhbGlkYXRpb24gcnVsZXMgd2l0aGluIHRoZSB2ZXJpZmllciwgYW5kIHRoZXJlIGFyZSBubyBuZXcga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS4gU3RhbmRhcmQgdmVyaWZpZXIgdGVzdHMgYW5kIHN5emthbGxlciBjaGVja3MsIGFsb25nIHdpdGggS0FTQU4sIHdpbGwgZGV0ZWN0IGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLiBUaGlzIHJlaW5mb3JjZXMgbXkgY29uZmlkZW5jZSBpbiB0aGUgcGF0Y2gmIzM5O3Mgc2FmZXR5LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgcmVnYXJkaW5nIHJlZmVyZW5jZSB0cmFja2luZyAobm9uLW93bmluZyByZWZlcmVuY2VzLCBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMsIGFuZCBwZXItQ1BVIGtwdHJzKSBhbmQgdHlwZSB2YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGluIGEgd2F5IHRoYXQgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB2ZXJpZmllciB0cmFja2luZyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjQyLjYzMDMzMjkzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQ3MzM1OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hcF9rcHRyX21hdGNoX3R5cGVcIixcbiAgICBcImNoZWNrX3B0cl90b19idGZfYWNjZXNzXCIsXG4gICAgXCJwcm9jZXNzX3NwaW5fbG9ja1wiLFxuICAgIFwiaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNcIixcbiAgICBcImNoZWNrX2tmdW5jX2FyZ3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciByZWdpc3RlciBzdGF0ZSB0cmFja2luZyBhbmQgc2FmZXR5IGNoZWNrcyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYW5kIGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBQVFJfVU5UUlVTVEVEIGZsYWdzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cywgQlBGX0tQVFJfUEVSQ1BVIG1hdGNoaW5nLCBmYXVsdC10b2xlcmFudCBCVEYgbG9hZHMsIHJlZmVyZW5jZSBpbnZhbGlkYXRpb24gb3JkZXIgZHVyaW5nIHNwaW4gdW5sb2NrIC8gUkNVIHVubG9jaywgYW5kIG93bmluZyByZWZlcmVuY2UgY2hlY2tzIGluIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjQyLjYzMDM0MTA5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0ODk2Njc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkYWFkNjgzZDUzMzRkYTVmYmI0MWE0YWFlMjg2OWVjZDhlMjBiNGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzo0NTo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDEzMzljMmYwMjhkYjAuLjM2YjY1Nzk3ODc3ZDAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTM4MSw3ICsxMzgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfcHRyX2FsbG9jX29iaih1MzIgdHlwZSlcXG4ge1xcbi1cXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFxcdTAwMjYgTUVNX0FMTE9DO1xcbitcXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IE1FTV9BTExPQyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfbm9uX293bmluZ19yZWYodTMyIHR5cGUpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTQ0ODgsNiArNDQ4OCwxMyBAQCBzdGF0aWMgaW50IG1hcF9rcHRyX21hdGNoX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKHR5cGVfZmxhZyhyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjYgfnBlcm1fZmxhZ3MpXFxuIFxcdFxcdGdvdG8gYmFkX3R5cGU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlXFxuK1xcdCAqIHN0b3JlZCBpbiBpdCBtdXN0IGNhcnJ5IHRoZSBzYW1lIGZsYWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGtwdHJfZmllbGQtXFx1MDAzZXR5cGUgPT0gQlBGX0tQVFJfUEVSQ1BVKSAhPSAhIShyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUEVSQ1BVKSlcXG4rXFx0XFx0Z290byBiYWRfdHlwZTtcXG4rXFxuIFxcdC8qIFdlIG5lZWQgdG8gdmVyaWZ5IHJlZy1cXHUwMDNldHlwZSBhbmQgcmVnLVxcdTAwM2VidGYsIGJlZm9yZSBhY2Nlc3NpbmcgcmVnLVxcdTAwM2VidGYgKi9cXG4gXFx0cmVnX25hbWUgPSBidGZfdHlwZV9uYW1lKHJlZy1cXHUwMDNlYnRmLCByZWctXFx1MDAzZWJ0Zl9pZCk7XFxuIFxcbkBAIC02MDMxLDcgKzYwMzgsMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNiAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdCBtYXkgc3RpbGwgYmUgcmVhZCB0aHJvdWdoIGFcXG4rXFx0XFx0ICogQlBGX1BST0JFX01FTSBsb2FkIGFmdGVyIGl0cyBsaWZldGltZSBwcm90ZWN0aW9uIGVuZHMuIFdyaXRlc1xcbitcXHRcXHQgKiB0aHJvdWdoIHN1Y2ggcG9pbnRlcnMgd2VyZSByZWplY3RlZCBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjYgIWJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIShyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSBcXHUwMDI2XFx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7XFxuIFxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJhbGxvY2F0ZWQgb2JqZWN0IG11c3QgaGF2ZSBhIHJlZmVyZW5jZWQgaWRcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTc0MDksMTAgKzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxcbiBcXHRcXHRcXHRcXHRsb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW52YWxpZGF0ZSBub24tb3duaW5nIHJlZnMgYmVmb3JlIFJDVSBkZW1vdGlvbiBjbGVhcnMgdGhlaXJcXG4rXFx0XFx0ICogTk9OX09XTl9SRUYgZmxhZy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGludmFsaWRhdGVfbm9uX293bmluZ19yZWZzKGVudik7XFxuK1xcbiBcXHRcXHRpZiAoIWluX3JjdV9jcyhlbnYpKVxcbiBcXHRcXHRcXHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xcbi1cXG4tXFx0XFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05NTEyLDcgKzk1MjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHtcXG4gXFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9SQ1UpIHtcXG4gXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbi1cXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xcbitcXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwgfCBOT05fT1dOX1JFRik7XFxuIFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xcbiBcXHRcXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuIFxcdFxcdH1cXG5AQCAtMTMxNzEsNyArMTMxODgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cXHUwMDNldHlwZSkpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSlcXG4rXFx0XFx0XFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxcbiBcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XFxuIFxcbiBcXHRcXHRcXHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXFxuaW5kZXggMDgzNzljM2I2YTAzOC4uMzcwMWY0ZWE1OGM3NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXFxuQEAgLTMzLDYgKzMzLDIwIEBAIHN0cnVjdCB7XFxuIFxcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xcbiB9IGFycmF5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0ge1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19wZXJjcHVfa3B0ciAqdGFzaztcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0pO1xcbit9IGtlcm5lbF9wZXJjcHVfYXJyYXkgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07XFxuK3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcXG4rXFxuIGxvbmcgcmV0O1xcbiBcXG4gU0VDKFxcXCI/ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbkBAIC0xMzcsNiArMTUxLDUxIEBAIGludCBCUEZfUFJPRyh0ZXN0X2FycmF5X21hcF81KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCI/c3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT10cnVzdGVkX3B0cl8gZXhwZWN0ZWQ9cHRyX3Rhc2tfc3RydWN0XFxcIilcXG4raW50IHJlamVjdF9rZXJuZWxfcHRyX2ludG9fcGVyY3B1X2twdHIodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0gKmU7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDtcXG4rXFx0aW50IGluZGV4ID0gMDtcXG4rXFxuK1xcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZrZXJuZWxfcGVyY3B1X2FycmF5LCBcXHUwMDI2aW5kZXgpO1xcbitcXHRpZiAoIWUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cCA9IGJwZl90YXNrX2Zyb21fcGlkKDEpO1xcbitcXHRpZiAoIXApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2ZS1cXHUwMDNldGFzaywgcCk7XFxuK1xcdGlmIChvbGQpXFxuK1xcdFxcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP2ZlbnRyeS5zL2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3RcXFwiKVxcbitpbnQgQlBGX1BST0cocmVqZWN0X3BsYWluX2FsbG9jX2ludG9fcGVyY3B1X2twdHIpXFxuK3tcXG4rXFx0c3RydWN0IHZhbF90IF9fcGVyY3B1X2twdHIgKm9sZDtcXG4rXFx0c3RydWN0IHZhbF90ICpwO1xcbitcXHRzdHJ1Y3QgZWxlbSAqZTtcXG4rXFx0aW50IGluZGV4ID0gMDtcXG4rXFxuK1xcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZhcnJheSwgXFx1MDAyNmluZGV4KTtcXG4rXFx0aWYgKCFlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHAgPSBicGZfb2JqX25ldyhzdHJ1Y3QgdmFsX3QpO1xcbitcXHRpZiAoIXApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2ZS1cXHUwMDNlcGMsIHApO1xcbitcXHRpZiAob2xkKVxcbitcXHRcXHRicGZfcGVyY3B1X29ial9kcm9wKG9sZCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXFwiKVxcbiBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcXG5pbmRleCAzMWQ0MDgxYzNhOWZkLi5jZGIyNTVhZGRiYzMwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXFxuQEAgLTU5Miw5ICs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eClcXG4gXFx0fVxcbiBcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdC8qXFxuLVxcdCAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURURcXG4tXFx0ICogfCBOT05fT1dOX1JFRiwgYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU1cXG4tXFx0ICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLlxcbitcXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVELFxcbitcXHQgKiBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTSByZXdyaXRlIGZvciBpdCxcXG4rXFx0ICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXFxuIFxcdCAqL1xcbiBcXHRub25fb3duX3JlZl9rZXkgPSBub2RlLVxcdTAwM2VrZXk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xcbkBAIC0yMyw2ICsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHtcXG4gXFx0c3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7XFxuIH07XFxuIFxcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0bG9uZyBrZXk7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbiBcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbkBAIC0zMCw2ICszOSwxMyBAQCBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbiB9IHN0YXNoZWRfbm9kZXMgU0VDKFxcXCIubWFwc1xcXCIpO1xcbiBcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rfSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XFxuIFxcdGxvbmcga2V5O1xcbiBcXHRsb25nIGRhdGE7XFxuQEAgLTgzMiw2ICs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInRjXFxcIilcXG4rX19zdWNjZXNzXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XFxuK1xcbitcXHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XFxuK1xcdGlmICghbilcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFx0YnBmX29ial9kcm9wKG4pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3N5c2NhbGxcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICghbSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXFxuIHtcXG4gXFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9ub2RlcywgXFx1MDAyNmlkeCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5pbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtMTksNiArMTksMjYgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XFxuIFxcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuIH07XFxuIFxcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0bG9uZyBrZXk7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcXG4rfTtcXG4rXFxuK3N0cnVjdCByY3VfZ3JhcGhfbm9kZSB7XFxuK1xcdHN0cnVjdCBicGZfcmJfbm9kZSBub2RlO1xcbitcXHRsb25nIGRhdGE7XFxuK307XFxuK1xcbitzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKmp1c3RfaGVyZV9iZWNhdXNlX2J0Zl9idWc7XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCB7XFxuK1xcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSBfX2twdHIgKm5vZGU7XFxuK307XFxuK1xcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbiBcXG5AQCAtMjcsNiArNDcsMjIgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jaztcXG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XFxuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XFxuK3ByaXZhdGUoQykgc3RydWN0IGJwZl9zcGluX2xvY2sgZ3JhcGhfbG9jaztcXG4rcHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rfSBzdGFzaGVkX3JjdV9ncmFwaCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxcbiB7XFxuQEAgLTg5LDYgKzEyNSwxMjAgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX25vbl9vYmplY3Qodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMO1xcbiB9XFxuIFxcbitTRUMoXFxcIj9zeXNjYWxsXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XFxuK1xcdGludCBpZHggPSAwO1xcbitcXG4rXFx0LyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovXFxuK1xcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XFxuK1xcdGlmICghdG1wKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKHRtcCk7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj9zeXNjYWxsXFxcIilcXG4rX19mYWlsdXJlXFxuK19fbXNnKFxcXCJicGZfcmJ0cmVlX3JlbW92ZSBjYW4gb25seSB0YWtlIG5vbi1vd25pbmcgb3IgcmVmY291bnRlZCBcXFwiXFxuKyAgICAgIFxcXCJicGZfcmJfbm9kZSBwb2ludGVyXFxcIilcXG4rbG9uZyByYnRyZWVfcmVtb3ZlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7XFxuK1xcdHN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTtcXG4rXFx0c3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmN1X2dyYXBoLCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0bm9kZSA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFub2RlKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2Z3JhcGhfbG9jayk7XFxuK1xcdHJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZShcXHUwMDI2Z3JhcGhfcm9vdCwgXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNmdyYXBoX2xvY2spO1xcbitcXHRpZiAocmJfbm9kZSlcXG4rXFx0XFx0YnBmX29ial9kcm9wKGNvbnRhaW5lcl9vZihyYl9ub2RlLCBzdHJ1Y3QgcmN1X2dyYXBoX25vZGUsIG5vZGUpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj9zeXNjYWxsXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbm9kZSwgKnJlZjtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRub2RlID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW5vZGUpIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShub2RlKTtcXG4rXFx0aWYgKHJlZilcXG4rXFx0XFx0YnBmX29ial9kcm9wKHJlZik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCI/c3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4rbG9uZyBncmFwaF9rcHRyX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsO1xcbitcXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7XFxuK1xcdGludCBpZHggPSAwO1xcbitcXG4rXFx0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9yY3VfZ3JhcGgsIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfc3Bpbl9sb2NrKFxcdTAwMjZncmFwaF9sb2NrKTtcXG4rXFx0bm9kZSA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFub2RlKSB7XFxuK1xcdFxcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2Z3JhcGhfbG9jayk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2Z3JhcGhfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gbm9kZS1cXHUwMDNlZGF0YTtcXG4rfVxcbitcXG4gU0VDKFxcXCI/dGNcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldK319XFxcIilcXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjQ0LjE3OTkxNDUzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzc1OTc4MTY2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFwX2twdHJfbWF0Y2hfdHlwZVwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInByb2Nlc3Nfc3Bpbl9sb2NrXCIsXG4gICAgXCJpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc1wiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIGFuZCBzYWZldHkgY2hlY2tzIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBhbmQgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIFBUUl9VTlRSVVNURUQgZmxhZ3MgZm9yIGFsbG9jYXRlZCBvYmplY3RzLCBCUEZfS1BUUl9QRVJDUFUgbWF0Y2hpbmcsIGZhdWx0LXRvbGVyYW50IEJURiBsb2FkcywgcmVmZXJlbmNlIGludmFsaWRhdGlvbiBvcmRlciBkdXJpbmcgc3BpbiB1bmxvY2sgLyBSQ1UgdW5sb2NrLCBhbmQgb3duaW5nIHJlZmVyZW5jZSBjaGVja3MgaW4gY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZGFhZDY4M2Q1MzM0ZGE1ZmJiNDFhNGFhZTI4NjllY2Q4ZTIwYjRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzo0NTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAxMzM5YzJmMDI4ZGIwLi4zNmI2NTc5Nzg3N2QwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzODEsNyArMTM4MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyh1MzIgdHlwZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuIHtcbi1cdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBNRU1fQUxMT0M7XG4rXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBNRU1fQUxMT0MgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQ0ODgsNiArNDQ4OCwxMyBAQCBzdGF0aWMgaW50IG1hcF9rcHRyX21hdGNoX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmICh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiB+cGVybV9mbGFncylcbiBcdFx0Z290byBiYWRfdHlwZTtcbiBcbitcdC8qXG4rXHQgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlXG4rXHQgKiBzdG9yZWQgaW4gaXQgbXVzdCBjYXJyeSB0aGUgc2FtZSBmbGFnLlxuK1x0ICovXG4rXHRpZiAoKGtwdHJfZmllbGQtXHUwMDNldHlwZSA9PSBCUEZfS1BUUl9QRVJDUFUpICE9ICEhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSlcbitcdFx0Z290byBiYWRfdHlwZTtcbitcbiBcdC8qIFdlIG5lZWQgdG8gdmVyaWZ5IHJlZy1cdTAwM2V0eXBlIGFuZCByZWctXHUwMDNlYnRmLCBiZWZvcmUgYWNjZXNzaW5nIHJlZy1cdTAwM2VidGYgKi9cbiBcdHJlZ19uYW1lID0gYnRmX3R5cGVfbmFtZShyZWctXHUwMDNlYnRmLCByZWctXHUwMDNlYnRmX2lkKTtcbiBcbkBAIC02MDMxLDcgKzYwMzgsMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4gXG4tXHRcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuK1x0XHQvKlxuK1x0XHQgKiBBIGZhdWx0LXByb25lIGFsbG9jYXRlZCBvYmplY3QgbWF5IHN0aWxsIGJlIHJlYWQgdGhyb3VnaCBhXG4rXHRcdCAqIEJQRl9QUk9CRV9NRU0gbG9hZCBhZnRlciBpdHMgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLiBXcml0ZXNcbitcdFx0ICogdGhyb3VnaCBzdWNoIHBvaW50ZXJzIHdlcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICEocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpIFx1MDAyNlx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7XG4gXHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJhbGxvY2F0ZWQgb2JqZWN0IG11c3QgaGF2ZSBhIHJlZmVyZW5jZWQgaWRcIik7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzQwOSwxMCArNzQyMiwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc3Bpbl9sb2NrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlXG4gXHRcdFx0XHRsb2NrKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuK1x0XHQvKlxuK1x0XHQgKiBJbnZhbGlkYXRlIG5vbi1vd25pbmcgcmVmcyBiZWZvcmUgUkNVIGRlbW90aW9uIGNsZWFycyB0aGVpclxuK1x0XHQgKiBOT05fT1dOX1JFRiBmbGFnLlxuK1x0XHQgKi9cbitcdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbitcbiBcdFx0aWYgKCFpbl9yY3VfY3MoZW52KSlcbiBcdFx0XHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xuLVxuLVx0XHRpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhlbnYpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk1MTIsNyArOTUyOSw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi1cdTAwM2VjdXJfc3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBjbGVhcl9tYXNrLCAoe1xuIFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpIHtcbiBcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4tXHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCk7XG4rXHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCB8IE5PTl9PV05fUkVGKTtcbiBcdFx0XHRyZWctXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuIFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiBcdFx0fVxuQEAgLTEzMTcxLDcgKzEzMTg4LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdFx0XHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSlcbitcdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXG4gXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmID0gdHJ1ZTtcbiBcbiBcdFx0XHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmNcbmluZGV4IDA4Mzc5YzNiNmEwMzguLjM3MDFmNGVhNThjNzUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmNcbkBAIC0zMyw2ICszMywyMCBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7XG4gfSBhcnJheSBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtIHtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCBfX3BlcmNwdV9rcHRyICp0YXNrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0pO1xuK30ga2VybmVsX3BlcmNwdV9hcnJheSBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2Zyb21fcGlkKHMzMiBwaWQpIF9fa3N5bTtcbit2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rXG4gbG9uZyByZXQ7XG4gXG4gU0VDKFwiP2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG5AQCAtMTM3LDYgKzE1MSw1MSBAQCBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9dHJ1c3RlZF9wdHJfIGV4cGVjdGVkPXB0cl90YXNrX3N0cnVjdFwiKVxuK2ludCByZWplY3Rfa2VybmVsX3B0cl9pbnRvX3BlcmNwdV9rcHRyKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtICplO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpwLCAqb2xkO1xuK1x0aW50IGluZGV4ID0gMDtcbitcbitcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmtlcm5lbF9wZXJjcHVfYXJyYXksIFx1MDAyNmluZGV4KTtcbitcdGlmICghZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwID0gYnBmX3Rhc2tfZnJvbV9waWQoMSk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZlLVx1MDAzZXRhc2ssIHApO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShvbGQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT1wdHJfIGV4cGVjdGVkPXB0cl92YWxfdFwiKVxuK2ludCBCUEZfUFJPRyhyZWplY3RfcGxhaW5fYWxsb2NfaW50b19wZXJjcHVfa3B0cilcbit7XG4rXHRzdHJ1Y3QgdmFsX3QgX19wZXJjcHVfa3B0ciAqb2xkO1xuK1x0c3RydWN0IHZhbF90ICpwO1xuK1x0c3RydWN0IGVsZW0gKmU7XG4rXHRpbnQgaW5kZXggPSAwO1xuK1xuK1x0ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YXJyYXksIFx1MDAyNmluZGV4KTtcbitcdGlmICghZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwID0gYnBmX29ial9uZXcoc3RydWN0IHZhbF90KTtcbitcdGlmICghcClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNmUtXHUwMDNlcGMsIHApO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX3BlcmNwdV9vYmpfZHJvcChvbGQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiYnBmX3BlcmNwdV9vYmpfbmV3IHR5cGUgSUQgYXJndW1lbnQgbXVzdCBiZSBvZiBhIHN0cnVjdCBvZiBzY2FsYXJzXCIpXG4gaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcbmluZGV4IDMxZDQwODFjM2E5ZmQuLmNkYjI1NWFkZGJjMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG5AQCAtNTkyLDkgKzU5Miw5IEBAIGludCBub25fb3duX3JlZl91bnRydXN0ZWRfbGQodm9pZCAqY3R4KVxuIFx0fVxuIFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuIFx0Lypcbi1cdCAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURURcbi1cdCAqIHwgTk9OX09XTl9SRUYsIGFuZCB0aGUgbG9hZCBiZWxvdyBoYXMgdG8gZ2V0IHRoZSBCUEZfUFJPQkVfTUVNXG4tXHQgKiByZXdyaXRlIGZvciBpdCwgb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXG4rXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVELFxuK1x0ICogYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU0gcmV3cml0ZSBmb3IgaXQsXG4rXHQgKiBvdGhlcndpc2UgYSBiYWQgYWRkcmVzcyBwYW5pY3MgdGhlIGtlcm5lbC5cbiBcdCAqL1xuIFx0bm9uX293bl9yZWZfa2V5ID0gbm9kZS1cdTAwM2VrZXk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbmluZGV4IDYxOTA2ZjQ4MDI1Y2MuLmNhZTAwZjdiMGEyNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuQEAgLTIzLDYgKzIzLDE1IEBAIHN0cnVjdCBtYXBfdmFsdWUge1xuIFx0c3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7XG4gfTtcbiBcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbitcdGxvbmcga2V5O1xuK1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbit9O1xuK1xuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtMzAsNiArMzksMTMgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7XG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcIi5tYXBzXCIpO1xuIFxuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0cnVjdCBub2RlX2FjcXVpcmUge1xuIFx0bG9uZyBrZXk7XG4gXHRsb25nIGRhdGE7XG5AQCAtODMyLDYgKzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2Vzc1xuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXG4rXHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XG4rXHRpZiAoIW4pXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1x0YnBmX29ial9kcm9wKG4pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19zdWNjZXNzXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKCFtKVxuK1x0XHRyZXR1cm4gMztcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXG4ge1xuIFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbmluZGV4IGVhYWVkMDg1OWY5NDYuLjMzOGU0MzgyMmZmZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xOSw2ICsxOSwyNiBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiBcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4gfTtcbiBcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbitcdGxvbmcga2V5O1xuK1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbit9O1xuK1xuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuK3N0cnVjdCByY3VfZ3JhcGhfbm9kZSB7XG4rXHRzdHJ1Y3QgYnBmX3JiX25vZGUgbm9kZTtcbitcdGxvbmcgZGF0YTtcbit9O1xuK1xuK3N0cnVjdCByY3VfZ3JhcGhfbm9kZSAqanVzdF9oZXJlX2JlY2F1c2VfYnRmX2J1ZztcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCB7XG4rXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgX19rcHRyICpub2RlO1xuK307XG4rXG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuQEAgLTI3LDYgKzQ3LDIyIEBAIHByaXZhdGUoQSkgc3RydWN0IGJwZl9zcGluX2xvY2sgZ2xvY2s7XG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuK3ByaXZhdGUoQykgc3RydWN0IGJwZl9zcGluX2xvY2sgZ3JhcGhfbG9jaztcbitwcml2YXRlKEMpIHN0cnVjdCBicGZfcmJfcm9vdCBncmFwaF9yb290IF9fY29udGFpbnMocmN1X2dyYXBoX25vZGUsIG5vZGUpO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rfSBzdGFzaGVkX3JjdV9ncmFwaCBTRUMoXCIubWFwc1wiKTtcbiBcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuIHtcbkBAIC04OSw2ICsxMjUsMTIwIEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9ub25fb2JqZWN0KHZvaWQgKmN0eClcbiBcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShjdHgpICE9IE5VTEw7XG4gfVxuIFxuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl91bmNoZWNrZWRfZHJvcCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0LyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovXG4rXHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xuK1x0aWYgKCF0bXApXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKHRtcCk7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW4pIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiYnBmX3JidHJlZV9yZW1vdmUgY2FuIG9ubHkgdGFrZSBub24tb3duaW5nIG9yIHJlZmNvdW50ZWQgXCJcbisgICAgICBcImJwZl9yYl9ub2RlIHBvaW50ZXJcIilcbitsb25nIHJidHJlZV9yZW1vdmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGggKm1hcHZhbDtcbitcdHN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTtcbitcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSAqbm9kZTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JjdV9ncmFwaCwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRub2RlID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW5vZGUpIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXHRyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoXHUwMDI2Z3JhcGhfcm9vdCwgXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdGJwZl9zcGluX3VubG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbitcdGlmIChyYl9ub2RlKVxuK1x0XHRicGZfb2JqX2Ryb3AoY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCByY3VfZ3JhcGhfbm9kZSwgbm9kZSkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUjEgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpub2RlLCAqcmVmO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRub2RlID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW5vZGUpIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJlZiA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG5vZGUpO1xuK1x0aWYgKHJlZilcbitcdFx0YnBmX29ial9kcm9wKHJlZik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3N5c2NhbGxcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitsb25nIGdyYXBoX2twdHJfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7XG4rXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yY3VfZ3JhcGgsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuK1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFub2RlKSB7XG4rXHRcdGJwZl9zcGluX3VubG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXG4rXHRyZXR1cm4gbm9kZS1cdTAwM2VkYXRhO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSt9fVwiKVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDU6NDQuMTc5OTE2MjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODA3NDk5OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgVmVyaWZpZXIgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbG9uZyB3aXRoIHNvbWUgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgQlBGIHN1YnN5c3RlbSBpcyBpbmNyZWRpYmx5IGltcG9ydGFudCBhbmQgZ2V0cyBhIGxvdCBvZiBleHBvc3VyZS4gSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGZhaXJseSBmb2N1c2VkLCBidXQgdGhleSBzdGlsbCByZXByZXNlbnQgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0bzpcblxuKiAgIEEgbmV3IGlubGluZSBmdW5jdGlvbiBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCB1c2VkIGluIHRoZSB2ZXJpZmllci5cbiogICBDaGFuZ2VzIHRvIGBtYXBfa3B0cl9tYXRjaF90eXBlYCByZWxhdGVkIHRvIE1FTVxcX1BFUkNQVSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggQlBGXFxfS1BUUlxcX1BFUkNQVS5cbiogICBOZXcgY2hlY2tzIGluIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGluY2x1ZGluZyBhIGNvbmRpdGlvbiB0aGF0IGxvb2tzIGF0IGFsbG9jYXRlZCBvYmplY3RzIGFuZCB0aGVpciBsaWZldGltZS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcyBzZWN0aW9uLCBhcyB0aGlzIGlzIHRoZSBzb3J0IG9mIHRoaW5nIHRoYXQncyBlYXN5IHRvIGdldCB3cm9uZyBhbmQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgYnVncy4gVGhpcyBpbnRyb2R1Y2VzIGNoZWNrcyBmb3Igd2hhdCBsb29rcyBsaWtlIG5ldyBsaWZldGltZSByZXN0cmljdGlvbnMuXG4qICAgVGhlIGBwcm9jZXNzX3NwaW5fbG9ja2AgZnVuY3Rpb24sIHdoaWNoIGhhcyB0aGUgdmVyaWZpZXIgaW50ZXJhY3Rpbmcgd2l0aCBub24tb3duaW5nIHJlZnMsIGFuZCBSQ1UgcHJvdGVjdGVkIHJlZnMuIEl0J3MgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlc2UgcmVmcyBhcmUgaW52YWxpZGF0ZWQgZm9yIGNvcnJlY3RuZXNzLlxuKiAgIEFuIGFkZGl0aW9uYWwgY2hlY2sgaW4gYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCB0aGF0IGV4cGxpY2l0bHkgZGVhbHMgd2l0aCBpbnZhbGlkYXRpbmcgTUVNXFxfUkNVIHJlZnMuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGFib3ZlIGNoYW5nZSwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBhdC5cbiogICBBbiB1cGRhdGUgdG8gYGNoZWNrX2tmdW5jX2FyZ3NgIHdoaWNoIG5vdyB0cmFja3MgJ2FyZ19vd25pbmdfcmVmJyBiYXNlZCBvbiB3aGV0aGVyIHdlIGhhdmUgYSBub24tb3duaW5nIHJlZiwgYW5kIGFuIGV4aXN0aW5nIHJlZmVyZW5jZS5cblxuVGhlIG1vZGlmaWNhdGlvbnMgc3BhbiB0aGUgdmVyaWZpZXIgbG9naWMgaXRzZWxmIGFuZCB0aGUgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgdmVyaWZpZXIsIHNvIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGZ1enppbmcgcnVsZXMsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSBcIldvcnRoRnV6emluZyA9IHRydWVcIi5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgdG8gZm9ybSBhIGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGVzZSBuZXcgZmVhdHVyZXMgb3IgdHJpZ2dlciB0aGVzZSB2ZXJpZmllciBwYXRocy4gTXkgbmV4dCBzdGVwIGlzIHRvIHVzZSB0b29scyBsaWtlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGVzIHRvIGlkZW50aWZ5IHNwZWNpZmljIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB0aGUgcmVsZXZhbnQgdmVyaWZpZXIgYmVoYXZpb3JzLiBJJ2xsIGZvY3VzIG9uIGNyYWZ0aW5nIGZ1enppbmcgaW5wdXRzIHRoYXQgc3BlY2lmaWNhbGx5IGV4ZXJjaXNlIHRoZSBuZXcgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGhlcmUsIGFuZCBhbHNvIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHBheSBjYXJlZnVsIGF0dGVudGlvbiB0byBtZW1vcnkgc2FmZXR5IGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjUyLjI1NDkxODY5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMwNzM1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXFxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXFx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjQ2OD1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3MS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDcyOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzAzNj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDM4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM5LVxcdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2Mi1cXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XFxua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2NC1cXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cXHUwMDNla2Z1bmNfYnRmX3RhYik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg1LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMzg2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg3LVxcdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQyND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MjgtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQ1NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU2LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0NTc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0NTgtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTIyOiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIzLVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTc2OT12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVxcdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTgwNzpcXHQgIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjUyLjM2Nzk5NjUyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDQ5NzI2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIG1vZGlmaWNhdGlvbnMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZXhhbWluZTpcblxuMS4gIGBtYXBfa3B0cl9tYXRjaF90eXBlYDogSXRzIHJvbGUgaW4gdmVyaWZ5aW5nIGtwdHIgY29tcGF0aWJpbGl0eSBpcyBjcnVjaWFsLiBBbnkgY2hhbmdlcyBoZXJlIGNvdWxkIGhhdmUgYnJvYWQgaW1wbGljYXRpb25zIGZvciBtYXAgYWNjZXNzIGFuZCBrcHRyIGhhbmRsaW5nLCB3aGljaCBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkuXG4yLiAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYDogVGhpcyBpcyBvYnZpb3VzbHkga2V5IGZvciBCVEYtcmVsYXRlZCBwb2ludGVyIGNoZWNrcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hlY2tzIGhhdmUgYmVlbiByZWZpbmVkLCBhcyBCVEYgYWNjZXNzIGlzIGNyaXRpY2FsIGZvciBzYWZldHkuXG4zLiAgYHByb2Nlc3Nfc3Bpbl9sb2NrYDogU3BpbmxvY2tzIHdpdGhpbiBCUEYgY29udGV4dHMgYXJlIGEgY29tbW9uIHNvdXJjZSBvZiBjb250ZW50aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhcyBldm9sdmVkIGluIHRoZSBmYWNlIG9mIHRoZXNlIGNoYW5nZXMuXG40LiAgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYDogRW5zdXJpbmcgcHJvcGVyIFJDVSB1c2FnZSBpbiBCUEYgaXMgaW1wZXJhdGl2ZSBmb3IgbWVtb3J5IHNhZmV0eS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGhhcyBiZWVuIGFkYXB0ZWQuXG41LiAgYGNoZWNrX2tmdW5jX2FyZ3NgOiBJIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGhhdmUgYmVlbiBtb2RpZmllZCBmb3IgdGhpcyBrZnVuYywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IHJlc3RyaWN0aW9ucyBvciBlbmhhbmNlbWVudHMuXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYDogYHR5cGVfaXNfcHRyX2FsbG9jX29iamAsIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGVzZSBvdGhlciBmdW5jdGlvbnMuIEknbGwgY2hlY2sgaXRzIHVzYWdlLiBJdHMgYXBwbGljYXRpb24gY291bGQgZ2l2ZSBpbnNpZ2h0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NTo1NS40MTI5NzQxMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczODU0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHlwZV9pc19wdHJfYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTkyOT1jb25zdCBjaGFyICpicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1Mi1cXHRcXHRcXHRyZXR1cm4gXFxcImEgYm9ycm93ZWQgYWxsb2NhdGVkIG9iamVjdCBwb2ludGVyXFxcIjtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6OTUzOlxcdFxcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoodHlwZSkpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1NC1cXHRcXHRcXHRyZXR1cm4gXFxcImFuIG93bmVkIGFsbG9jYXRlZCBvYmplY3QgcG9pbnRlclxcXCI7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MjA5OD1zdGF0aWMgY29uc3QgY2hhciAqZGlhZ19yZWdfc25hcHNob3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMTUxLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoyMTUyOlxcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmooc25hcHNob3QtXFx1MDAzZXR5cGUpKSB7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTIxNTMtXFx0XFx0aWYgKGJ0ZilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjg9c3RhdGljIHN0cnVjdCBidGZfcmVjb3JkICpyZWdfYnRmX3JlY29yZChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3NC1cXHRcXHRyZWMgPSByZWctXFx1MDAzZW1hcF9wdHItXFx1MDAzZXJlY29yZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzc1OlxcdH0gZWxzZSBpZiAodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cXHUwMDNldHlwZSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc2LVxcdFxcdG1ldGEgPSBidGZfZmluZF9zdHJ1Y3RfbWV0YShyZWctXFx1MDAzZWJ0ZiwgcmVnLVxcdTAwM2VidGZfaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU5NTg9c3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwMzUtXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYwMzY6XFx0XFx0aWYgKGF0eXBlICE9IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2ICF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDM3LVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwib25seSByZWFkIGlzIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzUwMT1zdGF0aWMgaW50IHByb2Nlc3Nfa3B0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTA5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTEwOlxcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTExLVxcdFxcdHJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2MDY9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE4MC1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE4MTpcXHRcXHRcXHRpZiAoIXR5cGVfaXNfcHRyX2FsbG9jX29iaihyZWctXFx1MDAzZXR5cGUpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTgyLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY1NTg9c3RhdGljIHZvaWQgbWFya19wdHJfb3JfbnVsbF9yZWcoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU3MS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NzI6XFx0XFx0aWYgKCEodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cXHUwMDNldHlwZSkgfHwgdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU3My1cXHRcXHQgICAgV0FSTl9PTl9PTkNFKCF0bnVtX2VxdWFsc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYsIDApKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDU6NTUuNDgwMzYzODI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0Njk1NjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFZlcmlmaWVyIEZ1bmN0aW9uIFNjb3BlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzY29wZSBvZiB0aGVzZSByZWNlbnRseSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhleSdyZSBzdGF0aWMgb3Igbm9uLXN0YXRpYywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gb3RoZXIgQlBGIHByb2dyYW1zLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdGF0aWMgbmF0dXJlIG9yIG90aGVyd2lzZSBvZiB0aGUgZm9sbG93aW5nOiBgbWFwX2twdHJfbWF0Y2hfdHlwZWAsIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGBwcm9jZXNzX3NwaW5fbG9ja2AsIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2AsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kLCBjcnVjaWFsbHksIGBicGZfY2hlY2tgLiBUaGUgbWFpbiB2ZXJpZmllciBlbnRyeSBwb2ludCwgYGJwZl9jaGVja2AsIHdhcnJhbnRzIGV4dHJhIGF0dGVudGlvbi4gSSBhbHNvIG5lZWQgdG8gYXNjZXJ0YWluIHRoZSBzdGF0aWMgc3RhdHVzIG9mIHRoZSBgYnBmX3ZlcmlmaWVyX2VudmAgZnVuY3Rpb24sIGFzIHRoYXQncyBvZnRlbiB0aWVkIHRvIHRoZSB2ZXJpZmljYXRpb24gY29udGV4dC4gS25vd2luZyB0aGlzIHdpbGwgZGlyZWN0bHkgaW5mb3JtIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWwgc3RydWN0dXJlIGlzIG9yZ2FuaXplZCBhbmQgaG93IGNoYW5nZXMgaW4gdGhlc2UgZnVuY3Rpb25zIGFmZmVjdCBleHRlcm5hbCBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDU6NTcuODI3MzIyOTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTY2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgYnBmX2NoZWNrXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDkzNz1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA1My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwNTQ6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDU1LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NTo1Ny44ODY4OTQyMTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY5ODE0MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIG9jY3VycmluZyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBjb2RlLiBUaGUgaW5pdGlhbCBsaXN0IHBvaW50cyBtZSB0byBgYnBmX3ZlcmlmaWVyLmNgLCBhbmQgc3BlY2lmaWNhbGx5IHRoZXNlIHN5bWJvbHM6IGBtYXBfa3B0cl9tYXRjaF90eXBlYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYHByb2Nlc3Nfc3Bpbl9sb2NrYCwgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYWxzbyBgYnBmX2NoZWNrYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBJcyBgYnBmX2NoZWNrYCB0aGUgZXBpY2VudGVyLCBvciBhcmUgdGhlc2UgbGlzdGVkIGZ1bmN0aW9ucyB0aGUgc3BlY2lmaWMgdGFyZ2V0cz8gTXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBmdXp6aW5nLCBhbmQgc3l6a2FsbGVyIGluIHBhcnRpY3VsYXIsIHN1Z2dlc3RzIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIG9uIGBCUEZfUFJPR19MT0FEYCwgbWFraW5nIGl0IGEgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBzZWVpbmcgZGlyZWN0IG1vZGlmaWNhdGlvbi5cblxuVGhpcyBhbGlnbnMgd2l0aCBndWlkZWxpbmUgNDogXCJUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFNcIi4gU28sIGxldCdzIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqZGlyZWN0bHkqIGltcGxlbWVudCB0aGUgYWRkZWQgb3IgYWx0ZXJlZCBsb2dpYy4gR3VpZGVsaW5lIDQgYWxzbyB3YXJucyBhZ2FpbnN0IHViaXF1aXRvdXMgaG90LXBhdGhzLCB3aGljaCBpcyBhIGdvb2QgcmVtaW5kZXIuXG5cblRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWx0ZXJlZCBkaXJlY3RseSBhcmU6IGBjaGVja19rZnVuY19hcmdzYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYG1hcF9rcHRyX21hdGNoX3R5cGVgLCBgcHJvY2Vzc19zcGluX2xvY2tgLCBhbmQgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGFyZSB0aG9zZSBmaXZlIGZ1bmN0aW9ucyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSwgb3IgaXMgYGJwZl9jaGVja2AgYWxzbyBpbXBhY3RlZCBzaWduaWZpY2FudGx5PyBJdCBsb29rcyBsaWtlIHRob3NlIGZpdmUgZnVuY3Rpb25zLCBhbGwgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhcmUgdGhlIHByZWNpc2UgYXJlYXMgd2hlcmUgdGhlIHZlcmlmaWVyIGxvZ2ljIGhhcyBiZWVuIG1vZGlmaWVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblNvLCBJIHJlLWV4YW1pbmUgdGhlIGRpZmYgYW5kIHB1bGwgb3V0IHRoZSBmb2xsb3dpbmc6XG5cbjEuICBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGA6IHRoZSBmdW5jdGlvbiBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCBpcyBpbnZvbHZlZC5cbjIuICBga2VybmVsL2JwZi92ZXJpZmllci5jYDogdGhlIGxpc3RlZCBmaXZlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCB0aGVpciBzcGVjaWZpYyBsaW5lIG51bWJlciByYW5nZXMgd2l0aGluIHRoZSBmaWxlLiBJIGFsc28gbm93IGhhdmUgdGhlIGNvcnJlY3QgY29udGV4dDpcbiAgICAqICAgYG1hcF9rcHRyX21hdGNoX3R5cGVgIChsaW5lcyA0NDg4LTQ0OTcpXG4gICAgKiAgIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgKGxpbmVzIDYwMzEtNjA0NylcbiAgICAqICAgYHByb2Nlc3Nfc3Bpbl9sb2NrYCAobGluZXMgNzQwOS03NDMyKVxuICAgICogICBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIChsaW5lcyA5NTEyLTk1MzUpXG4gICAgKiAgIGBjaGVja19rZnVuY19hcmdzYCAobGluZXMgMTMxNzEtMTMxOTIpXG5cbkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGJ1aWxkIGNvbnRleHQuIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MDMuNjU2NzExMjI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE4ODc5MDE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjowNC45NzU1OTkzMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0NTQ3NzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSwgZGVwZW5kZW5jaWVzLCBhbmQgaW1wbGljYXRpb25zLiBJJ2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGVxdWl2YWxlbnQgc2VhcmNoLCBtYXliZSByZWZpbmVkIHdpdGggYSBgZmluZGAgb3IgYGdpdCBncmVwYCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gbG9va2luZyBmb3IuIEknbSBleHBlY3RpbmcgdGhpcyBvcHRpb24gdG8gYmUgcHJldmFsZW50LCBnaXZlbiB0aGUgaW5jcmVhc2luZyBpbXBvcnRhbmNlIG9mIEJQRiBhbmQgc3lzdGVtIGNhbGxzIHdpdGhpbiB0aGUga2VybmVsLiBJIHdpbGwgbW9zdCBsaWtlbHkgdXNlIGEgc2VyaWVzIG9mIHF1ZXJpZXMuIEknbGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhpcyBpcyBoYW5kbGVkIGFjcm9zcyBhcmNoaXRlY3R1cmVzIGFuZCBrZXJuZWwgdmVyc2lvbnMg4oCTIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYW55IGFzc3VtcHRpb25zIGJhc2VkIG9uIGEgc2luZ2xlIHNlYXJjaC4gT25jZSBJIGhhdmUgdGhlIHJlc3VsdHMsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGFueSBjb250ZXh0LiBJJ20gbG9va2luZyBmb3IgdXNhZ2VzIGluIGBLY29uZmlnYCBmaWxlcywgYnV0IGFsc28gQyBjb2RlIHdoaWNoIHJlZmVyZW5jZXMgdGhlIG1hY3JvIG9yIHVzZXMgaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggc2VjdXJpdHkgZmVhdHVyZXMsIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBhbmQgb2YgY291cnNlIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBkZXZlbG9wIGEgdmlldyBvZiB0aGUgZWNvc3lzdGVtIGFyb3VuZCBgQlBGX1NZU0NBTExgIHRvIGZpZ3VyZSBvdXQgaXRzIGN1cnJlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MDcuNjIxMTA0MzQxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU3Mzk2Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjowOS44Nzg1MDU3MzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2NTc2NTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipCUEYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hhdCBCUEYgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2hhdCBtb2R1bGVzIGFyZSBhdmFpbGFibGUsIGFuZCBwb3RlbnRpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIExpbmUgMjUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBzZXR0aW5nIHVwIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuIEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyBzb21lIGRldGFpbHMgb24gd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHVzaW5nIEJQRiwgb3Igd2hhdCBhcmUgZGVwZW5kZW50IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjExLjc0NDI3NTcwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MTEuNzQ0Mzg2NzQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjg4NTIyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIEJURiBmb3IgQlBGIEZlYXR1cmUgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyBCUEYgZmVhdHVyZSBzZXQgYW5kIG5lZWQgdG8gYmUgdGhvcm91Z2guIEknbSBhbHJlYWR5IGxvb2tpbmcgYXQga3B0ciBoYW5kbGluZyDigJMgY2xlYXJseSBhIGNyaXRpY2FsIGFzcGVjdCDigJMgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjb25uZWN0aW9ucyB0byBCVEYgKEJQRiBUeXBlIEZvcm1hdCkuIEdpdmVuIHRoZSB3YXkgdGhlc2UgZmVhdHVyZXMgb2Z0ZW4gaW50ZXJhY3Qgd2l0aCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgQlRGIHRvIGluZm9ybSB0aG9zZSBpbnRlcmFjdGlvbnMsIGl0IG1ha2VzIHNlbnNlIHRvIGV4cGxpY2l0bHkgY29uZmlybSBvdXIgY292ZXJhZ2Ugb2YgYERFQlVHX0lORk9fQlRGYC4gSXQncyBhIGtleSBwaWVjZSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGVzZSBCUEYgZmVhdHVyZXMgYW5kIGhvdyB0aGV5IHBsYXkgd2l0aCB0aGUga2VybmVsLiBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ1OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MTMuODEzMjQyNzgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkxOTkzNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9Mzc4PWNvbmZpZyBERUJVR19JTkZPX1NQTElUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXFxubGliL0tjb25maWcuZGVidWc6Mzk4OmNvbmZpZyBERUJVR19JTkZPX0JURlxcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTQxOT1jb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cXG5saWIvS2NvbmZpZy5kZWJ1Zzo0Mjg6Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjoxNi4xMDUyNDI3NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU0MTY1NTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgVmVyaWZpY2F0aW9uIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgZXNzZW50aWFscyBzdHJhaWdodC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgaXQncyB0aGUgYmVkcm9jayBmb3IgY29tcGlsaW5nIGB2ZXJpZmllci5vYCwgYW5kIHRoZSBNYWtlZmlsZSBpbiBga2VybmVsL2JwZmAgYmFja3MgdGhhdCB1cC4gVGhlbiwgYERFQlVHX0lORk9fQlRGYCBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBCVEYgc3VwcG9ydCBpbiBCUEYuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIEZvY3VzU3ltYm9sczsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBvaW50czpcbi0gICBgbWFwX2twdHJfbWF0Y2hfdHlwZWBcbi0gICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgXG4tICAgYHByb2Nlc3Nfc3Bpbl9sb2NrYFxuLSAgIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2Bcbi0gICBgY2hlY2tfa2Z1bmNfYXJnc2BcblxuT2theSwgdGhlIHBhdGNoIGlzIHF1aXRlIGludm9sdmVkLCB0b3VjaGluZyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhY3Jvc3MgdGhlIGJvYXJkLCBzbyBsZXQgbWUgYnJlYWsgaXQgZG93bi4gSXQgaGFzIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgdmVyaWZpY2F0aW9uIHN0ZXBzOlxuXG4xLiAgYHR5cGVfaXNfcHRyX2FsbG9jX29iamAgbm93IHNwZWNpZmljYWxseSBleGNsdWRlcyBgUFRSX1VOVFJVU1RFRGAgcG9pbnRlcnMgYXMgdmFsaWQgYWxsb2NhdGVkIG9iamVjdHMuXG4yLiAgYG1hcF9rcHRyX21hdGNoX3R5cGVgOiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIGBCUEZfS1BUUl9QRVJDUFVgIGZpZWxkcyBsaW5lIHVwIHdpdGggYE1FTV9QRVJDUFVgIHJlZ2lzdGVycy5cbjMuICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgOiBUaGlzIG9uZSBhbGxvd3MgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdHMgKGBicGZfbWF5X2ZhdWx0X29uX2RlcmVmYCkgdG8gYmUgcmVhZCBhZnRlciB0aGVpciBsaWZldGltZSBwcm90ZWN0aW9uIGhhcyBlbmRlZCwgd2l0aG91dCB0cmlnZ2VyaW5nIGEgYHZlcmlmaWVyX2J1Z2AuXG40LiAgYHByb2Nlc3Nfc3Bpbl9sb2NrYDogSXQncyBlbnN1cmluZyB0aGF0IHdlIGludmFsaWRhdGUgbm9uLW93bmluZyByZWZlcmVuY2VzICpiZWZvcmUqIGludmFsaWRhdGluZyBSQ1UgcHJvdGVjdGVkIHJlZmVyZW5jZXMuXG41LiAgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYDogSXQgY2xlYXJzIHRoZSBgTk9OX09XTl9SRUZgIGZsYWcgb24gUkNVLWRlbW90ZWQgcmVnaXN0ZXJzLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHJlZ2lzdGVyIHN0YXRlLlxuNi4gIGBjaGVja19rZnVuY19hcmdzYDogVGhpcyBpcyB0aGUgY3J1Y2lhbCBjaGVjayB0byBlbnN1cmUgdGhhdCBhIHJlZ2lzdGVyIGlzIGFjdHVhbGx5IHJlZmVyZW5jZWQgYmVmb3JlIHRyZWF0aW5nIGl0IGFzIGFuIG93bmluZyByZWZlcmVuY2UgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuXG5cblNpbmNlIHRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHRoZSBgYnBmKClgIHN5c2NhbGwgdGhyb3VnaCBgQlBGX1BST0dfTE9BRGAsIEknZCBuZWVkIHRvIGNvbnNpZGVyIGZ1enppbmcgdG8gaHVudCBmb3IgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzLCBwcm9ibGVtcyBpbiBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgdHJhY2tlZCwgb3IgdGhlIHBvdGVudGlhbCBmb3IgY3Jhc2hlcy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LCB0aGUgbG9naWMgc2VlbXMgc291bmQgYW5kIHRoZSBjaGFuZ2VzIGFyZSB3ZWxsLXVuZGVyc3Rvb2QuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NDUsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjIxLjY0NjkwMTkwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDgyNDYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFwX2twdHJfbWF0Y2hfdHlwZVwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInByb2Nlc3Nfc3Bpbl9sb2NrXCIsXG4gICAgXCJpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc1wiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIGFuZCBzYWZldHkgY2hlY2tzIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBhbmQgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIFBUUl9VTlRSVVNURUQgZmxhZ3MgZm9yIGFsbG9jYXRlZCBvYmplY3RzLCBCUEZfS1BUUl9QRVJDUFUgbWF0Y2hpbmcsIGZhdWx0LXRvbGVyYW50IEJURiBsb2FkcywgcmVmZXJlbmNlIGludmFsaWRhdGlvbiBvcmRlciBkdXJpbmcgc3BpbiB1bmxvY2sgLyBSQ1UgdW5sb2NrLCBhbmQgb3duaW5nIHJlZmVyZW5jZSBjaGVja3MgaW4gY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXBfa3B0cl9tYXRjaF90eXBlXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwicHJvY2Vzc19zcGluX2xvY2tcIixcbiAgICBcImludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgYW5kIHNhZmV0eSBjaGVja3MgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGFuZCBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgUFRSX1VOVFJVU1RFRCBmbGFncyBmb3IgYWxsb2NhdGVkIG9iamVjdHMsIEJQRl9LUFRSX1BFUkNQVSBtYXRjaGluZywgZmF1bHQtdG9sZXJhbnQgQlRGIGxvYWRzLCByZWZlcmVuY2UgaW52YWxpZGF0aW9uIG9yZGVyIGR1cmluZyBzcGluIHVubG9jayAvIFJDVSB1bmxvY2ssIGFuZCBvd25pbmcgcmVmZXJlbmNlIGNoZWNrcyBpbiBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjoyMS43Nzc3MzU1NzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTk5MjQyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjoyMS43Nzg0MTgzODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mjk5MjM3MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgcmVnYXJkaW5nIHJlZmVyZW5jZSB0cmFja2luZyAobm9uLW93bmluZyByZWZlcmVuY2VzLCBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMsIGFuZCBwZXItQ1BVIGtwdHJzKSBhbmQgdHlwZSB2YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGluIGEgd2F5IHRoYXQgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB2ZXJpZmllciB0cmFja2luZyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2RhYWQ2ODNkNTMzNGRhNWZiYjQxYTRhYWUyODY5ZWNkOGUyMGI0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6NDU6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMTMzOWMyZjAyOGRiMC4uMzZiNjU3OTc4NzdkMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xMzgxLDcgKzEzODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3R5cGVfaGFzX3Vuc2FmZV9tb2RpZmllcnModTMyIHR5cGUpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfcHRyX2FsbG9jX29iaih1MzIgdHlwZSlcbiB7XG4tXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2IHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgTUVNX0FMTE9DO1xuK1x0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgTUVNX0FMTE9DIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICEodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfbm9uX293bmluZ19yZWYodTMyIHR5cGUpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkN2RkMGJlZmJkMTBlLi41NmExMGY3OWY5YTgxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC00NDg4LDYgKzQ0ODgsMTMgQEAgc3RhdGljIGludCBtYXBfa3B0cl9tYXRjaF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgfnBlcm1fZmxhZ3MpXG4gXHRcdGdvdG8gYmFkX3R5cGU7XG4gXG4rXHQvKlxuK1x0ICogQSBCUEZfS1BUUl9QRVJDUFUgZmllbGQgaXMgcmVhZCBiYWNrIGFzIE1FTV9QRVJDUFUsIHNvIHRoZSB2YWx1ZVxuK1x0ICogc3RvcmVkIGluIGl0IG11c3QgY2FycnkgdGhlIHNhbWUgZmxhZy5cbitcdCAqL1xuK1x0aWYgKChrcHRyX2ZpZWxkLVx1MDAzZXR5cGUgPT0gQlBGX0tQVFJfUEVSQ1BVKSAhPSAhIShyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1BFUkNQVSkpXG4rXHRcdGdvdG8gYmFkX3R5cGU7XG4rXG4gXHQvKiBXZSBuZWVkIHRvIHZlcmlmeSByZWctXHUwMDNldHlwZSBhbmQgcmVnLVx1MDAzZWJ0ZiwgYmVmb3JlIGFjY2Vzc2luZyByZWctXHUwMDNlYnRmICovXG4gXHRyZWdfbmFtZSA9IGJ0Zl90eXBlX25hbWUocmVnLVx1MDAzZWJ0ZiwgcmVnLVx1MDAzZWJ0Zl9pZCk7XG4gXG5AQCAtNjAzMSw3ICs2MDM4LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuIFxuLVx0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbitcdFx0LypcbitcdFx0ICogQSBmYXVsdC1wcm9uZSBhbGxvY2F0ZWQgb2JqZWN0IG1heSBzdGlsbCBiZSByZWFkIHRocm91Z2ggYVxuK1x0XHQgKiBCUEZfUFJPQkVfTUVNIGxvYWQgYWZ0ZXIgaXRzIGxpZmV0aW1lIHByb3RlY3Rpb24gZW5kcy4gV3JpdGVzXG4rXHRcdCAqIHRocm91Z2ggc3VjaCBwb2ludGVycyB3ZXJlIHJlamVjdGVkIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiAhYnBmX21heV9mYXVsdF9vbl9kZXJlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwiYWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkXCIpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTc0MDksMTAgKzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxuIFx0XHRcdFx0bG9jayk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0LypcbitcdFx0ICogSW52YWxpZGF0ZSBub24tb3duaW5nIHJlZnMgYmVmb3JlIFJDVSBkZW1vdGlvbiBjbGVhcnMgdGhlaXJcbitcdFx0ICogTk9OX09XTl9SRUYgZmxhZy5cbitcdFx0ICovXG4rXHRcdGludmFsaWRhdGVfbm9uX293bmluZ19yZWZzKGVudik7XG4rXG4gXHRcdGlmICghaW5fcmN1X2NzKGVudikpXG4gXHRcdFx0aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTtcbi1cbi1cdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NTEyLDcgKzk1MjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayhlbnYtXHUwMDNlY3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHtcbiBcdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSB7XG4gXHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xuLVx0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xuK1x0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwgfCBOT05fT1dOX1JFRik7XG4gXHRcdFx0cmVnLVx1MDAzZXR5cGUgfD0gUFRSX1VOVFJVU1RFRDtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXHRcdH1cbkBAIC0xMzE3MSw3ICsxMzE4OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRcdFx0ICAgICAgYnBmX2RpYWdfcmVnX3R5cGVfcGxhaW4oZW52LCByZWctXHUwMDNldHlwZSkpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxuIFx0XHRcdFx0bWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XG4gXG4gXHRcdFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXG5pbmRleCAwODM3OWMzYjZhMDM4Li4zNzAxZjRlYTU4Yzc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXG5AQCAtMzMsNiArMzMsMjAgQEAgc3RydWN0IHtcbiBcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xuIH0gYXJyYXkgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSB7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19wZXJjcHVfa3B0ciAqdGFzaztcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtKTtcbit9IGtlcm5lbF9wZXJjcHVfYXJyYXkgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07XG4rdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK1xuIGxvbmcgcmV0O1xuIFxuIFNFQyhcIj9mZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuQEAgLTEzNyw2ICsxNTEsNTEgQEAgaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP3N5c2NhbGxcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIGtwdHIgYWNjZXNzLCBSMiB0eXBlPXRydXN0ZWRfcHRyXyBleHBlY3RlZD1wdHJfdGFza19zdHJ1Y3RcIilcbitpbnQgcmVqZWN0X2tlcm5lbF9wdHJfaW50b19wZXJjcHVfa3B0cih2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSAqZTtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDtcbitcdGludCBpbmRleCA9IDA7XG4rXG4rXHRlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZrZXJuZWxfcGVyY3B1X2FycmF5LCBcdTAwMjZpbmRleCk7XG4rXHRpZiAoIWUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cCA9IGJwZl90YXNrX2Zyb21fcGlkKDEpO1xuK1x0aWYgKCFwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2ZS1cdTAwM2V0YXNrLCBwKTtcbitcdGlmIChvbGQpXG4rXHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3RcIilcbitpbnQgQlBGX1BST0cocmVqZWN0X3BsYWluX2FsbG9jX2ludG9fcGVyY3B1X2twdHIpXG4re1xuK1x0c3RydWN0IHZhbF90IF9fcGVyY3B1X2twdHIgKm9sZDtcbitcdHN0cnVjdCB2YWxfdCAqcDtcbitcdHN0cnVjdCBlbGVtICplO1xuK1x0aW50IGluZGV4ID0gMDtcbitcbitcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZpbmRleCk7XG4rXHRpZiAoIWUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cCA9IGJwZl9vYmpfbmV3KHN0cnVjdCB2YWxfdCk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZlLVx1MDAzZXBjLCBwKTtcbitcdGlmIChvbGQpXG4rXHRcdGJwZl9wZXJjcHVfb2JqX2Ryb3Aob2xkKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuIF9fZmFpbHVyZSBfX21zZyhcImJwZl9wZXJjcHVfb2JqX25ldyB0eXBlIElEIGFyZ3VtZW50IG11c3QgYmUgb2YgYSBzdHJ1Y3Qgb2Ygc2NhbGFyc1wiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2FycmF5X21hcF82KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG5pbmRleCAzMWQ0MDgxYzNhOWZkLi5jZGIyNTVhZGRiYzMwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suY1xuQEAgLTU5Miw5ICs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eClcbiBcdH1cbiBcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiBcdC8qXG4tXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVEXG4tXHQgKiB8IE5PTl9PV05fUkVGLCBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTVxuLVx0ICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLlxuK1x0ICogVGhlIHVubG9jayBsZWF2ZXMgbm9kZSBhcyBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgUFRSX1VOVFJVU1RFRCxcbitcdCAqIGFuZCB0aGUgbG9hZCBiZWxvdyBoYXMgdG8gZ2V0IHRoZSBCUEZfUFJPQkVfTUVNIHJld3JpdGUgZm9yIGl0LFxuK1x0ICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXG4gXHQgKi9cbiBcdG5vbl9vd25fcmVmX2tleSA9IG5vZGUtXHUwMDNla2V5O1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHtcbiBcdHN0cnVjdCBub2RlX2RhdGEgX19rcHRyICpub2RlO1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4gXHRfX3R5cGUoa2V5LCBpbnQpO1xuQEAgLTMwLDYgKzM5LDEzIEBAIHN0cnVjdCB7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCIubWFwc1wiKTtcbitcbiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHtcbiBcdGxvbmcga2V5O1xuIFx0bG9uZyBkYXRhO1xuQEAgLTgzMiw2ICs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJlZmNvdW50X2FjcXVpcmVfb3duaW5nX2lucHV0X25vX251bGxfY2hlY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuK1xuK1x0biA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpO1xuK1x0aWYgKCFuKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcdGJwZl9vYmpfZHJvcChuKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fc3VjY2Vzc1xuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfbnVsbF9jaGVja2VkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW4pIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGlmICghbSlcbitcdFx0cmV0dXJuIDM7XG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KVxuIHtcbiBcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9ub2RlcywgXHUwMDI2aWR4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5AQCAtMTksNiArMTksMjYgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbitzdHJ1Y3QgcmN1X2dyYXBoX25vZGUge1xuK1x0c3RydWN0IGJwZl9yYl9ub2RlIG5vZGU7XG4rXHRsb25nIGRhdGE7XG4rfTtcbitcbitzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKmp1c3RfaGVyZV9iZWNhdXNlX2J0Zl9idWc7XG4rXG4rc3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGgge1xuK1x0c3RydWN0IHJjdV9ncmFwaF9ub2RlIF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yNyw2ICs0NywyMiBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdsb2NrO1xuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTtcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcbitwcml2YXRlKEMpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdyYXBoX2xvY2s7XG4rcHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yY3VfZ3JhcGggU0VDKFwiLm1hcHNcIik7XG4gXG4gc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiB7XG5AQCAtODksNiArMTI1LDEyMCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMO1xuIH1cbiBcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdC8qIEZvcmNlIENsYW5nIHRvIGVtaXQgY29tcGxldGUgQlRGIGZvciBzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5LiAqL1xuK1x0dG1wID0gYnBmX29ial9uZXcodHlwZW9mKCp0bXApKTtcbitcdGlmICghdG1wKVxuK1x0XHRyZXR1cm4gMztcbitcdGJwZl9vYmpfZHJvcCh0bXApO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3N5c2NhbGxcIilcbitfX2ZhaWx1cmVcbitfX21zZyhcImJwZl9yYnRyZWVfcmVtb3ZlIGNhbiBvbmx5IHRha2Ugbm9uLW93bmluZyBvciByZWZjb3VudGVkIFwiXG4rICAgICAgXCJicGZfcmJfbm9kZSBwb2ludGVyXCIpXG4rbG9uZyByYnRyZWVfcmVtb3ZlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7XG4rXHRzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7XG4rXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yY3VfZ3JhcGgsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFub2RlKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuK1x0cmJfbm9kZSA9IGJwZl9yYnRyZWVfcmVtb3ZlKFx1MDAyNmdyYXBoX3Jvb3QsIFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXHRpZiAocmJfbm9kZSlcbitcdFx0YnBmX29ial9kcm9wKGNvbnRhaW5lcl9vZihyYl9ub2RlLCBzdHJ1Y3QgcmN1X2dyYXBoX25vZGUsIG5vZGUpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbm9kZSwgKnJlZjtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFub2RlKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShub2RlKTtcbitcdGlmIChyZWYpXG4rXHRcdGJwZl9vYmpfZHJvcChyZWYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4rbG9uZyBncmFwaF9rcHRyX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsO1xuK1x0c3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmN1X2dyYXBoLCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3NwaW5fbG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbitcdG5vZGUgPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbm9kZSkge1xuK1x0XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuK1xuK1x0cmV0dXJuIG5vZGUtXHUwMDNlZGF0YTtcbit9XG4rXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cIilcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjIxLjc3ODQxOTYyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjk5MjE1OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIHNldmVyYWwgc3VidGxlIGJ1dCBjcml0aWNhbCBpc3N1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSBhcm91bmQgcmVmZXJlbmNlIHRyYWNraW5nLCBtZW1vcnkgc2FmZXR5LCBhbmQgdHlwZSBjb25zaXN0ZW5jeS5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcywgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIGEgcmVmaW5lbWVudCBvZiBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCwgd2l0aCBhbiBleHBsaWNpdCBleGNsdXNpb24gb2YgYFBUUl9VTlRSVVNURURgLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHVudHJ1c3RlZCBwb2ludGVycyBhcyB2YWxpZCBmb3IgYWxsb2NhdGlvbiB0cmFja2luZy4gRm9sbG93aW5nIHRoaXMsIHRoZSBhZGRpdGlvbiB0byBgbWFwX2twdHJfbWF0Y2hfdHlwZWAgZW5zdXJlcyBjb25zaXN0ZW5jeSBiZXR3ZWVuIGBCUEZfS1BUUl9QRVJDUFVgIGZpZWxkcyBhbmQgdGhlIGBNRU1fUEVSQ1BVYCBmbGFnLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIHR5cGUgY29uZnVzaW9uIGR1cmluZyBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy5cblxuVGhlIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgbW9kaWZpY2F0aW9uIGlzIGFsc28gaW50ZXJlc3RpbmcuIFdlJ3JlIG5vdyBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsbHkgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdHMgYnkgY2hlY2tpbmcgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVx1MDAzZXR5cGUpYCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpYCBpbiBgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgYSBnb29kIG9wdGltaXphdGlvbi4gSXQncyBhIGtleSBkZWZlbnNlIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhZnRlciB0aGUgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLlxuXG5GdXJ0aGVybW9yZSwgY2hhbmdlcyB0byBgcHJvY2Vzc19zcGluX2xvY2tgIGFuZCBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIHByb3ZpZGUgaW1wcm92ZW1lbnRzIHRvIGhhbmRsaW5nIG5vbi1vd25pbmcgcmVmZXJlbmNlcyBhbmQgUkNVLXByb3RlY3RlZCBwb2ludGVycywgY29ycmVjdGluZyB0aGUgaW52YWxpZGF0aW9uIG9yZGVyIGFuZCBjbGVhcmluZyBgTk9OX09XTl9SRUZgIGFwcHJvcHJpYXRlbHkgZHVyaW5nIFJDVSBkZW1vdGlvbiB0byBhdm9pZCBwb3NzaWJsZSB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuXG5JbiBlc3NlbmNlLCB0aGlzIHBhdGNoIHN0cmVuZ3RoZW5zIHRoZSBCUEYgdmVyaWZpZXIncyBhYmlsaXR5IHRvIGVuZm9yY2UgbWVtb3J5IHNhZmV0eSBieSBpbXByb3ZpbmcgcG9pbnRlciB0eXBlIHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZywgcHJldmVudGluZyBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUuXG5cbkkndmUgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjaGFuZ2VzIHRvIGRldGVybWluZSBpZiBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlIGNvcnJ1cHRpb24sIG9yIGluZm9ybWF0aW9uIGxlYWtzIG1pZ2h0IG9jY3VyLiBJIHNlZSBubyBldmlkZW5jZSBvZiB0aGVzZSBpc3N1ZXMuIEkgY2hlY2tlZCBmb3IgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzLCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJJ20gc2F0aXNmaWVkIHRoYXQgbm9uZSBvZiB0aGVzZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBwcmVzZW50LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIEknZCBzYXkgdGhhdCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhcyB0aGlzIHBhdGNoIHByaW1hcmlseSBkZWFscyB3aXRoIHN0YXRlIHRyYW5zaXRpb25zIGFuZCB2YWxpZGF0aW9uIHJ1bGVzIHdpdGhpbiB0aGUgdmVyaWZpZXIsIGFuZCB0aGVyZSBhcmUgbm8gbmV3IGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UuIFN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBzeXprYWxsZXIgY2hlY2tzLCBhbG9uZyB3aXRoIEtBU0FOLCB3aWxsIGRldGVjdCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gVGhpcyByZWluZm9yY2VzIG15IGNvbmZpZGVuY2UgaW4gdGhlIHBhdGNoJ3Mgc2FmZXR5LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjksIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjI5LjA3NzYzOTMzMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIHJlZ2FyZGluZyByZWZlcmVuY2UgdHJhY2tpbmcgKG5vbi1vd25pbmcgcmVmZXJlbmNlcywgUkNVLXByb3RlY3RlZCByZWZlcmVuY2VzLCBhbmQgcGVyLUNQVSBrcHRycykgYW5kIHR5cGUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdmVyaWZpZXIgdHJhY2tpbmcgY291bGQgbGVhZCB0byBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyksIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsdvbq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 17:43:43 +0000 UTC FinishedAt: 2026-09-05 17:46:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "254c881fe0554c5efb16d355c273702a27a32a20", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "254c881fe0554c5efb16d355c273702a27a32a20", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "f418c9f0-cd3d-45de-989d-ce5118e2bd2c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "map_kptr_match_type", "check_ptr_to_btf_access", "process_spin_lock", "invalidate_rcu_protected_refs", "check_kfunc_args" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFwX2twdHJfbWF0Y2hfdHlwZSYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX3NwaW5fbG9jayYjMzQ7LAogICAgJiMzNDtpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgYW5kIHNhZmV0eSBjaGVja3MgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGFuZCBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgUFRSX1VOVFJVU1RFRCBmbGFncyBmb3IgYWxsb2NhdGVkIG9iamVjdHMsIEJQRl9LUFRSX1BFUkNQVSBtYXRjaGluZywgZmF1bHQtdG9sZXJhbnQgQlRGIGxvYWRzLCByZWZlcmVuY2UgaW52YWxpZGF0aW9uIG9yZGVyIGR1cmluZyBzcGluIHVubG9jayAvIFJDVSB1bmxvY2ssIGFuZCBvd25pbmcgcmVmZXJlbmNlIGNoZWNrcyBpbiBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2RhYWQ2ODNkNTMzNGRhNWZiYjQxYTRhYWUyODY5ZWNkOGUyMGI0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6NDU6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDEzMzljMmYwMjhkYjAuLjM2YjY1Nzk3ODc3ZDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTM4MSw3ICYjNDM7MTM4MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyh1MzIgdHlwZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuIHtcbi1cdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBNRU1fQUxMT0M7XG4mIzQzO1x0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQ0ODgsNiAmIzQzOzQ0ODgsMTMgQEAgc3RhdGljIGludCBtYXBfa3B0cl9tYXRjaF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgfnBlcm1fZmxhZ3MpXG4gXHRcdGdvdG8gYmFkX3R5cGU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlXG4mIzQzO1x0ICogc3RvcmVkIGluIGl0IG11c3QgY2FycnkgdGhlIHNhbWUgZmxhZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGtwdHJfZmllbGQtXHUwMDNldHlwZSA9PSBCUEZfS1BUUl9QRVJDUFUpICE9ICEhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSlcbiYjNDM7XHRcdGdvdG8gYmFkX3R5cGU7XG4mIzQzO1xuIFx0LyogV2UgbmVlZCB0byB2ZXJpZnkgcmVnLVx1MDAzZXR5cGUgYW5kIHJlZy1cdTAwM2VidGYsIGJlZm9yZSBhY2Nlc3NpbmcgcmVnLVx1MDAzZWJ0ZiAqL1xuIFx0cmVnX25hbWUgPSBidGZfdHlwZV9uYW1lKHJlZy1cdTAwM2VidGYsIHJlZy1cdTAwM2VidGZfaWQpO1xuIFxuQEAgLTYwMzEsNyAmIzQzOzYwMzgsMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4gXG4tXHRcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdCBtYXkgc3RpbGwgYmUgcmVhZCB0aHJvdWdoIGFcbiYjNDM7XHRcdCAqIEJQRl9QUk9CRV9NRU0gbG9hZCBhZnRlciBpdHMgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLiBXcml0ZXNcbiYjNDM7XHRcdCAqIHRocm91Z2ggc3VjaCBwb2ludGVycyB3ZXJlIHJlamVjdGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2FsbG9jYXRlZCBvYmplY3QgbXVzdCBoYXZlIGEgcmVmZXJlbmNlZCBpZFwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzQwOSwxMCAmIzQzOzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxuIFx0XHRcdFx0bG9jayk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJbnZhbGlkYXRlIG5vbi1vd25pbmcgcmVmcyBiZWZvcmUgUkNVIGRlbW90aW9uIGNsZWFycyB0aGVpclxuJiM0MztcdFx0ICogTk9OX09XTl9SRUYgZmxhZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbiYjNDM7XG4gXHRcdGlmICghaW5fcmN1X2NzKGVudikpXG4gXHRcdFx0aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTtcbi1cbi1cdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NTEyLDcgJiM0Mzs5NTI5LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XG4gXHRcdGlmIChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1JDVSkge1xuIFx0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIHJlZywgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0XHRyZWctXHUwMDNldHlwZSBcdTAwMjY9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTtcbiYjNDM7XHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCB8IE5PTl9PV05fUkVGKTtcbiBcdFx0XHRyZWctXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuIFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiBcdFx0fVxuQEAgLTEzMTcxLDcgJiM0MzsxMzE4OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRcdFx0ICAgICAgYnBmX2RpYWdfcmVnX3R5cGVfcGxhaW4oZW52LCByZWctXHUwMDNldHlwZSkpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4mIzQzO1x0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbiBcdFx0XHRcdG1ldGEtXHUwMDNlYXJnX293bmluZ19yZWYgPSB0cnVlO1xuIFxuIFx0XHRcdHJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xuaW5kZXggMDgzNzljM2I2YTAzOC4uMzcwMWY0ZWE1OGM3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xuQEAgLTMzLDYgJiM0MzszMywyMCBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7XG4gfSBhcnJheSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtIHtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19wZXJjcHVfa3B0ciAqdGFzaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSk7XG4mIzQzO30ga2VybmVsX3BlcmNwdV9hcnJheSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7XG4gbG9uZyByZXQ7XG4gXG4gU0VDKFwmIzM0Oz9mZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbkBAIC0xMzcsNiAmIzQzOzE1MSw1MSBAQCBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT10cnVzdGVkX3B0cl8gZXhwZWN0ZWQ9cHRyX3Rhc2tfc3RydWN0XCYjMzQ7KVxuJiM0MztpbnQgcmVqZWN0X2tlcm5lbF9wdHJfaW50b19wZXJjcHVfa3B0cih2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtICplO1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDtcbiYjNDM7XHRpbnQgaW5kZXggPSAwO1xuJiM0MztcbiYjNDM7XHRlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZrZXJuZWxfcGVyY3B1X2FycmF5LCBcdTAwMjZpbmRleCk7XG4mIzQzO1x0aWYgKCFlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHAgPSBicGZfdGFza19mcm9tX3BpZCgxKTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZlLVx1MDAzZXRhc2ssIHApO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRicGZfdGFza19yZWxlYXNlKG9sZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3RcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhyZWplY3RfcGxhaW5fYWxsb2NfaW50b19wZXJjcHVfa3B0cilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2YWxfdCBfX3BlcmNwdV9rcHRyICpvbGQ7XG4mIzQzO1x0c3RydWN0IHZhbF90ICpwO1xuJiM0MztcdHN0cnVjdCBlbGVtICplO1xuJiM0MztcdGludCBpbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZpbmRleCk7XG4mIzQzO1x0aWYgKCFlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHAgPSBicGZfb2JqX25ldyhzdHJ1Y3QgdmFsX3QpO1xuJiM0MztcdGlmICghcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNmUtXHUwMDNlcGMsIHApO1xuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRicGZfcGVyY3B1X29ial9kcm9wKG9sZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDticGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcJiMzNDspXG4gaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcbmluZGV4IDMxZDQwODFjM2E5ZmQuLmNkYjI1NWFkZGJjMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG5AQCAtNTkyLDkgJiM0Mzs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eClcbiBcdH1cbiBcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiBcdC8qXG4tXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVEXG4tXHQgKiB8IE5PTl9PV05fUkVGLCBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTVxuLVx0ICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLlxuJiM0MztcdCAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURUQsXG4mIzQzO1x0ICogYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU0gcmV3cml0ZSBmb3IgaXQsXG4mIzQzO1x0ICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXG4gXHQgKi9cbiBcdG5vbl9vd25fcmVmX2tleSA9IG5vZGUtXHUwMDNla2V5O1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XG4gXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuIFx0X190eXBlKGtleSwgaW50KTtcbkBAIC0zMCw2ICYjNDM7MzksMTMgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7XG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRsb25nIGtleTtcbiBcdGxvbmcgZGF0YTtcbkBAIC04MzIsNiAmIzQzOzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuJiM0MztcbiYjNDM7XHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XG4mIzQzO1x0aWYgKCFuKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1x0YnBmX29ial9kcm9wKG4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghbSlcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KVxuIHtcbiBcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9ub2RlcywgXHUwMDI2aWR4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5AQCAtMTksNiAmIzQzOzE5LDI2IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQge1xuIFx0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCByY3VfZ3JhcGhfbm9kZSB7XG4mIzQzO1x0c3RydWN0IGJwZl9yYl9ub2RlIG5vZGU7XG4mIzQzO1x0bG9uZyBkYXRhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJjdV9ncmFwaF9ub2RlICpqdXN0X2hlcmVfYmVjYXVzZV9idGZfYnVnO1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGgge1xuJiM0MztcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSBfX2twdHIgKm5vZGU7XG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yNyw2ICYjNDM7NDcsMjIgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jaztcbiBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4mIzQzO3ByaXZhdGUoQykgc3RydWN0IGJwZl9zcGluX2xvY2sgZ3JhcGhfbG9jaztcbiYjNDM7cHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IHN0YXNoZWRfcmN1X2dyYXBoIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4gc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiB7XG5AQCAtODksNiAmIzQzOzEyNSwxMjAgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX25vbl9vYmplY3Qodm9pZCAqY3R4KVxuIFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKGN0eCkgIT0gTlVMTDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/c3lzY2FsbFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwmIzM0OylcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl91bmNoZWNrZWRfZHJvcCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovXG4mIzQzO1x0dG1wID0gYnBmX29ial9uZXcodHlwZW9mKCp0bXApKTtcbiYjNDM7XHRpZiAoIXRtcClcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcdGJwZl9vYmpfZHJvcCh0bXApO1xuJiM0MztcbiYjNDM7XHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbiYjNDM7XHRpZiAoIW1hcHZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbiYjNDM7XHRpZiAoIW4pIHtcbiYjNDM7XHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdH1cbiYjNDM7XHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3N5c2NhbGxcJiMzNDspXG4mIzQzO19fZmFpbHVyZVxuJiM0MztfX21zZyhcJiMzNDticGZfcmJ0cmVlX3JlbW92ZSBjYW4gb25seSB0YWtlIG5vbi1vd25pbmcgb3IgcmVmY291bnRlZCBcJiMzNDtcbiYjNDM7ICAgICAgXCYjMzQ7YnBmX3JiX25vZGUgcG9pbnRlclwmIzM0OylcbiYjNDM7bG9uZyByYnRyZWVfcmVtb3ZlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGggKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7XG4mIzQzO1x0c3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlO1xuJiM0MztcdGludCBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmN1X2dyYXBoLCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbm9kZSkge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbiYjNDM7XHRyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoXHUwMDI2Z3JhcGhfcm9vdCwgXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4mIzQzO1x0aWYgKHJiX25vZGUpXG4mIzQzO1x0XHRicGZfb2JqX2Ryb3AoY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCByY3VfZ3JhcGhfbm9kZSwgbm9kZSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm5vZGUsICpyZWY7XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbm9kZSkge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobm9kZSk7XG4mIzQzO1x0aWYgKHJlZilcbiYjNDM7XHRcdGJwZl9vYmpfZHJvcChyZWYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9zeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2xvbmcgZ3JhcGhfa3B0cl9hZnRlcl9zcGluX3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSAqbm9kZTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JjdV9ncmFwaCwgXHUwMDI2aWR4KTtcbiYjNDM7XHRpZiAoIW1hcHZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuJiM0MztcdG5vZGUgPSBtYXB2YWwtXHUwMDNlbm9kZTtcbiYjNDM7XHRpZiAoIW5vZGUpIHtcbiYjNDM7XHRcdGJwZl9zcGluX3VubG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlLVx1MDAzZWRhdGE7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0mIzQzO319XCYjMzQ7KVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFwX2twdHJfbWF0Y2hfdHlwZSYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX3NwaW5fbG9jayYjMzQ7LAogICAgJiMzNDtpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIGFuZCBzYWZldHkgY2hlY2tzIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBhbmQgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIFBUUl9VTlRSVVNURUQgZmxhZ3MgZm9yIGFsbG9jYXRlZCBvYmplY3RzLCBCUEZfS1BUUl9QRVJDUFUgbWF0Y2hpbmcsIGZhdWx0LXRvbGVyYW50IEJURiBsb2FkcywgcmVmZXJlbmNlIGludmFsaWRhdGlvbiBvcmRlciBkdXJpbmcgc3BpbiB1bmxvY2sgLyBSQ1UgdW5sb2NrLCBhbmQgb3duaW5nIHJlZmVyZW5jZSBjaGVja3MgaW4gY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdkYWFkNjgzZDUzMzRkYTVmYmI0MWE0YWFlMjg2OWVjZDhlMjBiNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE3OjQ1OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggMTMzOWMyZjAyOGRiMC4uMzZiNjU3OTc4NzdkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC0xMzgxLDcgJiM0MzsxMzgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKQogewotCXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7IHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBNRU1fQUxMT0M7CiYjNDM7CXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0eXBlX2ZsYWcodHlwZSkgJmFtcDsgTUVNX0FMTE9DICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICEodHlwZV9mbGFnKHR5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBkN2RkMGJlZmJkMTBlLi41NmExMGY3OWY5YTgxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC00NDg4LDYgJiM0Mzs0NDg4LDEzIEBAIHN0YXRpYyBpbnQgbWFwX2twdHJfbWF0Y2hfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWlmICh0eXBlX2ZsYWcocmVnLSZndDt0eXBlKSAmYW1wOyB+cGVybV9mbGFncykKIAkJZ290byBiYWRfdHlwZTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlCiYjNDM7CSAqIHN0b3JlZCBpbiBpdCBtdXN0IGNhcnJ5IHRoZSBzYW1lIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGtwdHJfZmllbGQtJmd0O3R5cGUgPT0gQlBGX0tQVFJfUEVSQ1BVKSAhPSAhIShyZWctJmd0O3R5cGUgJmFtcDsgTUVNX1BFUkNQVSkpCiYjNDM7CQlnb3RvIGJhZF90eXBlOwomIzQzOwogCS8qIFdlIG5lZWQgdG8gdmVyaWZ5IHJlZy0mZ3Q7dHlwZSBhbmQgcmVnLSZndDtidGYsIGJlZm9yZSBhY2Nlc3NpbmcgcmVnLSZndDtidGYgKi8KIAlyZWdfbmFtZSA9IGJ0Zl90eXBlX25hbWUocmVnLSZndDtidGYsIHJlZy0mZ3Q7YnRmX2lkKTsKIApAQCAtNjAzMSw3ICYjNDM7NjAzOCwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJfQogCi0JCWlmICh0eXBlX2lzX2FsbG9jKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctJmd0O3R5cGUpICZhbXA7JmFtcDsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGZhdWx0LXByb25lIGFsbG9jYXRlZCBvYmplY3QgbWF5IHN0aWxsIGJlIHJlYWQgdGhyb3VnaCBhCiYjNDM7CQkgKiBCUEZfUFJPQkVfTUVNIGxvYWQgYWZ0ZXIgaXRzIGxpZmV0aW1lIHByb3RlY3Rpb24gZW5kcy4gV3JpdGVzCiYjNDM7CQkgKiB0aHJvdWdoIHN1Y2ggcG9pbnRlcnMgd2VyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwogCQkgICAgIShyZWctJmd0O3R5cGUgJmFtcDsgTUVNX1JDVSkgJmFtcDsmYW1wOyAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7CiAJCQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O2FsbG9jYXRlZCBvYmplY3QgbXVzdCBoYXZlIGEgcmVmZXJlbmNlZCBpZCYjMzQ7KTsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNzQwOSwxMCAmIzQzOzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZQogCQkJCWxvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBJbnZhbGlkYXRlIG5vbi1vd25pbmcgcmVmcyBiZWZvcmUgUkNVIGRlbW90aW9uIGNsZWFycyB0aGVpcgomIzQzOwkJICogTk9OX09XTl9SRUYgZmxhZy4KJiM0MzsJCSAqLwomIzQzOwkJaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTsKJiM0MzsKIAkJaWYgKCFpbl9yY3VfY3MoZW52KSkKIAkJCWludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKGVudik7Ci0KLQkJaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC05NTEyLDcgJiM0Mzs5NTI5LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi0mZ3Q7Y3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHsKIAkJaWYgKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSB7CiAJCQlicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7Ci0JCQlyZWctJmd0O3R5cGUgJmFtcDs9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTsKJiM0MzsJCQlyZWctJmd0O3R5cGUgJmFtcDs9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMIHwgTk9OX09XTl9SRUYpOwogCQkJcmVnLSZndDt0eXBlIHw9IFBUUl9VTlRSVVNURUQ7CiAJCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiAJCX0KQEAgLTEzMTcxLDcgJiM0MzsxMzE4OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCQkJCQkgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy0mZ3Q7dHlwZSkpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkpCiYjNDM7CQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpCiAJCQkJbWV0YS0mZ3Q7YXJnX293bmluZ19yZWYgPSB0cnVlOwogCiAJCQlyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYwppbmRleCAwODM3OWMzYjZhMDM4Li4zNzAxZjRlYTU4Yzc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYwpAQCAtMzMsNiAmIzQzOzMzLDIwIEBAIHN0cnVjdCB7CiAJX190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7CiB9IGFycmF5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiYjNDM7c3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSB7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCBfX3BlcmNwdV9rcHRyICp0YXNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSk7CiYjNDM7fSBrZXJuZWxfcGVyY3B1X2FycmF5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfZnJvbV9waWQoczMyIHBpZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MzsKIGxvbmcgcmV0OwogCiBTRUMoJiMzNDs/ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKQEAgLTEzNyw2ICYjNDM7MTUxLDUxIEBAIGludCBCUEZfUFJPRyh0ZXN0X2FycmF5X21hcF81KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIGtwdHIgYWNjZXNzLCBSMiB0eXBlPXRydXN0ZWRfcHRyXyBleHBlY3RlZD1wdHJfdGFza19zdHJ1Y3QmIzM0OykKJiM0MztpbnQgcmVqZWN0X2tlcm5lbF9wdHJfaW50b19wZXJjcHVfa3B0cih2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtICplOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpvbGQ7CiYjNDM7CWludCBpbmRleCA9IDA7CiYjNDM7CiYjNDM7CWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7a2VybmVsX3BlcmNwdV9hcnJheSwgJmFtcDtpbmRleCk7CiYjNDM7CWlmICghZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwID0gYnBmX3Rhc2tfZnJvbV9waWQoMSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7ZS0mZ3Q7dGFzaywgcCk7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKG9sZCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0cocmVqZWN0X3BsYWluX2FsbG9jX2ludG9fcGVyY3B1X2twdHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmFsX3QgX19wZXJjcHVfa3B0ciAqb2xkOwomIzQzOwlzdHJ1Y3QgdmFsX3QgKnA7CiYjNDM7CXN0cnVjdCBlbGVtICplOwomIzQzOwlpbnQgaW5kZXggPSAwOwomIzQzOwomIzQzOwllID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2FycmF5LCAmYW1wO2luZGV4KTsKJiM0MzsJaWYgKCFlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXAgPSBicGZfb2JqX25ldyhzdHJ1Y3QgdmFsX3QpOwomIzQzOwlpZiAoIXApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO2UtJmd0O3BjLCBwKTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl9wZXJjcHVfb2JqX2Ryb3Aob2xkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P2ZlbnRyeS5zL2JwZl9mZW50cnlfdGVzdDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9wZXJjcHVfb2JqX25ldyB0eXBlIElEIGFyZ3VtZW50IG11c3QgYmUgb2YgYSBzdHJ1Y3Qgb2Ygc2NhbGFycyYjMzQ7KQogaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzYpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYwppbmRleCAzMWQ0MDgxYzNhOWZkLi5jZGIyNTVhZGRiYzMwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMKQEAgLTU5Miw5ICYjNDM7NTkyLDkgQEAgaW50IG5vbl9vd25fcmVmX3VudHJ1c3RlZF9sZCh2b2lkICpjdHgpCiAJfQogCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKIAkvKgotCSAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURUQKLQkgKiB8IE5PTl9PV05fUkVGLCBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTQotCSAqIHJld3JpdGUgZm9yIGl0LCBvdGhlcndpc2UgYSBiYWQgYWRkcmVzcyBwYW5pY3MgdGhlIGtlcm5lbC4KJiM0MzsJICogVGhlIHVubG9jayBsZWF2ZXMgbm9kZSBhcyBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgUFRSX1VOVFJVU1RFRCwKJiM0MzsJICogYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU0gcmV3cml0ZSBmb3IgaXQsCiYjNDM7CSAqIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLgogCSAqLwogCW5vbl9vd25fcmVmX2tleSA9IG5vZGUtJmd0O2tleTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYwppbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7CiAJc3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB7CiAJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiAJX190eXBlKGtleSwgaW50KTsKQEAgLTMwLDYgJiM0MzszOSwxMyBAQCBzdHJ1Y3QgewogCV9fdWludChtYXhfZW50cmllcywgMik7CiB9IHN0YXNoZWRfbm9kZXMgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwogc3RydWN0IG5vZGVfYWNxdWlyZSB7CiAJbG9uZyBrZXk7CiAJbG9uZyBkYXRhOwpAQCAtODMyLDYgJiM0Mzs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTsKJiM0MzsKJiM0MzsJbiA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpOwomIzQzOwlpZiAoIW4pCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CWJwZl9vYmpfZHJvcChuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9zeXNjYWxsJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIW0pCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpCiB7CiAJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKaW5kZXggZWFhZWQwODU5Zjk0Ni4uMzM4ZTQzODIyZmZlYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKQEAgLTE5LDYgJiM0MzsxOSwyNiBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHsKIAlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwogfTsKIAomIzQzO3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgewomIzQzOwlsb25nIGtleTsKJiM0MzsJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJjdV9ncmFwaF9ub2RlIHsKJiM0MzsJc3RydWN0IGJwZl9yYl9ub2RlIG5vZGU7CiYjNDM7CWxvbmcgZGF0YTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCByY3VfZ3JhcGhfbm9kZSAqanVzdF9oZXJlX2JlY2F1c2VfYnRmX2J1ZzsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCB7CiYjNDM7CXN0cnVjdCByY3VfZ3JhcGhfbm9kZSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltOwogCkBAIC0yNyw2ICYjNDM7NDcsMjIgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jazsKIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTsKIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7CiYjNDM7cHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBncmFwaF9sb2NrOwomIzQzO3ByaXZhdGUoQykgc3RydWN0IGJwZl9yYl9yb290IGdyYXBoX3Jvb3QgX19jb250YWlucyhyY3VfZ3JhcGhfbm9kZSwgbm9kZSk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JjdV9ncmFwaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAogc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKIHsKQEAgLTg5LDYgJiM0MzsxMjUsMTIwIEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9ub25fb2JqZWN0KHZvaWQgKmN0eCkKIAlyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMOwogfQogCiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CiYjNDM7CS8qIEZvcmNlIENsYW5nIHRvIGVtaXQgY29tcGxldGUgQlRGIGZvciBzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5LiAqLwomIzQzOwl0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpOwomIzQzOwlpZiAoIXRtcCkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlicGZfb2JqX2Ryb3AodG1wKTsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZQomIzQzO19fbXNnKCYjMzQ7YnBmX3JidHJlZV9yZW1vdmUgY2FuIG9ubHkgdGFrZSBub24tb3duaW5nIG9yIHJlZmNvdW50ZWQgJiMzNDsKJiM0MzsgICAgICAmIzM0O2JwZl9yYl9ub2RlIHBvaW50ZXImIzM0OykKJiM0Mztsb25nIHJidHJlZV9yZW1vdmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsOwomIzQzOwlzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7CiYjNDM7CXN0cnVjdCByY3VfZ3JhcGhfbm9kZSAqbm9kZTsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CiYjNDM7CW1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzdGFzaGVkX3JjdV9ncmFwaCwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwlub2RlID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW5vZGUpIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwlyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoJmFtcDtncmFwaF9yb290LCAmYW1wO25vZGUtJmd0O25vZGUpOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtncmFwaF9sb2NrKTsKJiM0MzsJaWYgKHJiX25vZGUpCiYjNDM7CQlicGZfb2JqX2Ryb3AoY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCByY3VfZ3JhcGhfbm9kZSwgbm9kZSkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZiYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpub2RlLCAqcmVmOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwlub2RlID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW5vZGUpIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobm9kZSk7CiYjNDM7CWlmIChyZWYpCiYjNDM7CQlicGZfb2JqX2Ryb3AocmVmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9zeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0Mztsb25nIGdyYXBoX2twdHJfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGggKm1hcHZhbDsKJiM0MzsJc3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmN1X2dyYXBoLCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtncmFwaF9sb2NrKTsKJiM0MzsJbm9kZSA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFub2RlKSB7CiYjNDM7CQlicGZfc3Bpbl91bmxvY2soJmFtcDtncmFwaF9sb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9zcGluX3VubG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gbm9kZS0mZ3Q7ZGF0YTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fSYjMzQ7KQogbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFsb25nIHdpdGggc29tZSBhc3NvY2lhdGVkIHNlbGZ0ZXN0cy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBCUEYgc3Vic3lzdGVtIGlzIGluY3JlZGlibHkgaW1wb3J0YW50IGFuZCBnZXRzIGEgbG90IG9mIGV4cG9zdXJlLiBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZmFpcmx5IGZvY3VzZWQsIGJ1dCB0aGV5IHN0aWxsIHJlcHJlc2VudCBhIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4KClNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0bzoKCiogICBBIG5ldyBpbmxpbmUgZnVuY3Rpb24gYHR5cGVfaXNfcHRyX2FsbG9jX29iamAgdXNlZCBpbiB0aGUgdmVyaWZpZXIuCiogICBDaGFuZ2VzIHRvIGBtYXBfa3B0cl9tYXRjaF90eXBlYCByZWxhdGVkIHRvIE1FTVxfUEVSQ1BVIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBCUEZcX0tQVFJcX1BFUkNQVS4KKiAgIE5ldyBjaGVja3MgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgaW5jbHVkaW5nIGEgY29uZGl0aW9uIHRoYXQgbG9va3MgYXQgYWxsb2NhdGVkIG9iamVjdHMgYW5kIHRoZWlyIGxpZmV0aW1lLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGlzIHNlY3Rpb24sIGFzIHRoaXMgaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCYjMzk7cyBlYXN5IHRvIGdldCB3cm9uZyBhbmQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgYnVncy4gVGhpcyBpbnRyb2R1Y2VzIGNoZWNrcyBmb3Igd2hhdCBsb29rcyBsaWtlIG5ldyBsaWZldGltZSByZXN0cmljdGlvbnMuCiogICBUaGUgYHByb2Nlc3Nfc3Bpbl9sb2NrYCBmdW5jdGlvbiwgd2hpY2ggaGFzIHRoZSB2ZXJpZmllciBpbnRlcmFjdGluZyB3aXRoIG5vbi1vd25pbmcgcmVmcywgYW5kIFJDVSBwcm90ZWN0ZWQgcmVmcy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlc2UgcmVmcyBhcmUgaW52YWxpZGF0ZWQgZm9yIGNvcnJlY3RuZXNzLgoqICAgQW4gYWRkaXRpb25hbCBjaGVjayBpbiBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIHRoYXQgZXhwbGljaXRseSBkZWFscyB3aXRoIGludmFsaWRhdGluZyBNRU1cX1JDVSByZWZzLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBhYm92ZSBjaGFuZ2UsIGFuZCBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgYXQuCiogICBBbiB1cGRhdGUgdG8gYGNoZWNrX2tmdW5jX2FyZ3NgIHdoaWNoIG5vdyB0cmFja3MgJiMzOTthcmdfb3duaW5nX3JlZiYjMzk7IGJhc2VkIG9uIHdoZXRoZXIgd2UgaGF2ZSBhIG5vbi1vd25pbmcgcmVmLCBhbmQgYW4gZXhpc3RpbmcgcmVmZXJlbmNlLgoKVGhlIG1vZGlmaWNhdGlvbnMgc3BhbiB0aGUgdmVyaWZpZXIgbG9naWMgaXRzZWxmIGFuZCB0aGUgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgdmVyaWZpZXIsIHNvIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGZ1enppbmcgcnVsZXMsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0Oy4KCk5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZvcm0gYSBmdXp6aW5nIHN0cmF0ZWd5LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlnIG9wdGlvbnMgZW5hYmxlIHRoZXNlIG5ldyBmZWF0dXJlcyBvciB0cmlnZ2VyIHRoZXNlIHZlcmlmaWVyIHBhdGhzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdXNlIHRvb2xzIGxpa2UgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgZmlsZXMgdG8gaWRlbnRpZnkgc3BlY2lmaWMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdCBjb250cm9sIHRoZSByZWxldmFudCB2ZXJpZmllciBiZWhhdmlvcnMuIEkmIzM5O2xsIGZvY3VzIG9uIGNyYWZ0aW5nIGZ1enppbmcgaW5wdXRzIHRoYXQgc3BlY2lmaWNhbGx5IGV4ZXJjaXNlIHRoZSBuZXcgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGhlcmUsIGFuZCBhbHNvIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gbWVtb3J5IHNhZmV0eSBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMTQ1LVx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI0Njg9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDcxLVxua2VybmVsL2JwZi9jb3JlLmM6MjQ3MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMwMzY9dm9pZCBfX2JwZl9mcmVlX3VzZWRfYnRmcyhzdHJ1Y3QgYnRmX21vZF9wYWlyICp1c2VkX2J0ZnMsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcbmtlcm5lbC9icGYvY29yZS5jOjMwMzg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzAzOS1cdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzA1Nz1zdGF0aWMgdm9pZCBicGZfcHJvZ19mcmVlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYyLVx0YXV4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBicGZfcHJvZ19hdXgsIHdvcmspO1xua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDY0LVx0YnBmX2ZyZWVfa2Z1bmNfYnRmX3RhYihhdXgtXHUwMDNla2Z1bmNfYnRmX3RhYik7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzM4ND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg1LXtcbmtlcm5lbC9icGYvY29yZS5jOjMzODY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzM4Ny1cdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0MjQ9X193ZWFrIHU2NCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQyOC1cbmtlcm5lbC9icGYvY29yZS5jOjM0Mjk6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTM0NTU9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTCh4ZHBfYnVsa190eCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU2LVxua2VybmVsL2JwZi9jb3JlLmM6MzQ1NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU4LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MTQ9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUyMjogICAgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIzLVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3Njk9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDYtXHQgIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE4MDc6XHQgIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFZlcmlmaWVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBtb2RpZmljYXRpb25zIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZXhhbWluZToKCjEuICBgbWFwX2twdHJfbWF0Y2hfdHlwZWA6IEl0cyByb2xlIGluIHZlcmlmeWluZyBrcHRyIGNvbXBhdGliaWxpdHkgaXMgY3J1Y2lhbC4gQW55IGNoYW5nZXMgaGVyZSBjb3VsZCBoYXZlIGJyb2FkIGltcGxpY2F0aW9ucyBmb3IgbWFwIGFjY2VzcyBhbmQga3B0ciBoYW5kbGluZywgd2hpY2ggaXMgY29yZSBmdW5jdGlvbmFsaXR5LgoyLiAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYDogVGhpcyBpcyBvYnZpb3VzbHkga2V5IGZvciBCVEYtcmVsYXRlZCBwb2ludGVyIGNoZWNrcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hlY2tzIGhhdmUgYmVlbiByZWZpbmVkLCBhcyBCVEYgYWNjZXNzIGlzIGNyaXRpY2FsIGZvciBzYWZldHkuCjMuICBgcHJvY2Vzc19zcGluX2xvY2tgOiBTcGlubG9ja3Mgd2l0aGluIEJQRiBjb250ZXh0cyBhcmUgYSBjb21tb24gc291cmNlIG9mIGNvbnRlbnRpb24uIEkgbmVlZCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFzIGV2b2x2ZWQgaW4gdGhlIGZhY2Ugb2YgdGhlc2UgY2hhbmdlcy4KNC4gIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2A6IEVuc3VyaW5nIHByb3BlciBSQ1UgdXNhZ2UgaW4gQlBGIGlzIGltcGVyYXRpdmUgZm9yIG1lbW9yeSBzYWZldHkuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBoYXMgYmVlbiBhZGFwdGVkLgo1LiAgYGNoZWNrX2tmdW5jX2FyZ3NgOiBJIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGhhdmUgYmVlbiBtb2RpZmllZCBmb3IgdGhpcyBrZnVuYywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IHJlc3RyaWN0aW9ucyBvciBlbmhhbmNlbWVudHMuCgpJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGA6IGB0eXBlX2lzX3B0cl9hbGxvY19vYmpgLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlc2Ugb3RoZXIgZnVuY3Rpb25zLiBJJiMzOTtsbCBjaGVjayBpdHMgdXNhZ2UuIEl0cyBhcHBsaWNhdGlvbiBjb3VsZCBnaXZlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHlwZV9pc19wdHJfYWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9OTI5PWNvbnN0IGNoYXIgKmJwZl9kaWFnX3JlZ190eXBlX3BsYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1Mi1cdFx0XHRyZXR1cm4gXCYjMzQ7YSBib3Jyb3dlZCBhbGxvY2F0ZWQgb2JqZWN0IHBvaW50ZXJcJiMzNDs7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6OTUzOlx0XHRpZiAodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHR5cGUpKVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1NC1cdFx0XHRyZXR1cm4gXCYjMzQ7YW4gb3duZWQgYWxsb2NhdGVkIG9iamVjdCBwb2ludGVyXCYjMzQ7O1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yMDk4PXN0YXRpYyBjb25zdCBjaGFyICpkaWFnX3JlZ19zbmFwc2hvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMTUxLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjIxNTI6XHRpZiAodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHNuYXBzaG90LVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMjE1My1cdFx0aWYgKGJ0Zilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY4PXN0YXRpYyBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVnX2J0Zl9yZWNvcmQoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc0LVx0XHRyZWMgPSByZWctXHUwMDNlbWFwX3B0ci1cdTAwM2VyZWNvcmQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzc1Olx0fSBlbHNlIGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc2LVx0XHRtZXRhID0gYnRmX2ZpbmRfc3RydWN0X21ldGEocmVnLVx1MDAzZWJ0ZiwgcmVnLVx1MDAzZWJ0Zl9pZCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU5NTg9c3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDM1LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDM2Olx0XHRpZiAoYXR5cGUgIT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2ICF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAzNy1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7b25seSByZWFkIGlzIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1MDE9c3RhdGljIGludCBwcm9jZXNzX2twdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1MDktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzUxMDpcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzUxMS1cdFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2MDY9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxODAtXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxODE6XHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxODItXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXG5cJiMzNDssXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTU4PXN0YXRpYyB2b2lkIG1hcmtfcHRyX29yX251bGxfcmVnKHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NTcxLVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjU3MjpcdFx0aWYgKCEodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSB8fCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY1NzMtXHRcdCAgICBXQVJOX09OX09OQ0UoIXRudW1fZXF1YWxzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmLCAwKSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBGdW5jdGlvbiBTY29wZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzY29wZSBvZiB0aGVzZSByZWNlbnRseSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhleSYjMzk7cmUgc3RhdGljIG9yIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG90aGVyIEJQRiBwcm9ncmFtcy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb3Igb3RoZXJ3aXNlIG9mIHRoZSBmb2xsb3dpbmc6IGBtYXBfa3B0cl9tYXRjaF90eXBlYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYHByb2Nlc3Nfc3Bpbl9sb2NrYCwgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQsIGNydWNpYWxseSwgYGJwZl9jaGVja2AuIFRoZSBtYWluIHZlcmlmaWVyIGVudHJ5IHBvaW50LCBgYnBmX2NoZWNrYCwgd2FycmFudHMgZXh0cmEgYXR0ZW50aW9uLiBJIGFsc28gbmVlZCB0byBhc2NlcnRhaW4gdGhlIHN0YXRpYyBzdGF0dXMgb2YgdGhlIGBicGZfdmVyaWZpZXJfZW52YCBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7cyBvZnRlbiB0aWVkIHRvIHRoZSB2ZXJpZmljYXRpb24gY29udGV4dC4gS25vd2luZyB0aGlzIHdpbGwgZGlyZWN0bHkgaW5mb3JtIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFsIHN0cnVjdHVyZSBpcyBvcmdhbml6ZWQgYW5kIGhvdyBjaGFuZ2VzIGluIHRoZXNlIGZ1bmN0aW9ucyBhZmZlY3QgZXh0ZXJuYWwgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBicGZfY2hlY2tcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTM3PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA1My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTA1NDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA1NS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODkzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgb2NjdXJyaW5nIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGNvZGUuIFRoZSBpbml0aWFsIGxpc3QgcG9pbnRzIG1lIHRvIGBicGZfdmVyaWZpZXIuY2AsIGFuZCBzcGVjaWZpY2FsbHkgdGhlc2Ugc3ltYm9sczogYG1hcF9rcHRyX21hdGNoX3R5cGVgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgcHJvY2Vzc19zcGluX2xvY2tgLCBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBhbHNvIGBicGZfY2hlY2tgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBJcyBgYnBmX2NoZWNrYCB0aGUgZXBpY2VudGVyLCBvciBhcmUgdGhlc2UgbGlzdGVkIGZ1bmN0aW9ucyB0aGUgc3BlY2lmaWMgdGFyZ2V0cz8gTXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBmdXp6aW5nLCBhbmQgc3l6a2FsbGVyIGluIHBhcnRpY3VsYXIsIHN1Z2dlc3RzIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIG9uIGBCUEZfUFJPR19MT0FEYCwgbWFraW5nIGl0IGEgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBzZWVpbmcgZGlyZWN0IG1vZGlmaWNhdGlvbi4KClRoaXMgYWxpZ25zIHdpdGggZ3VpZGVsaW5lIDQ6ICYjMzQ7VEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTJiMzNDsuIFNvLCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0ICpkaXJlY3RseSogaW1wbGVtZW50IHRoZSBhZGRlZCBvciBhbHRlcmVkIGxvZ2ljLiBHdWlkZWxpbmUgNCBhbHNvIHdhcm5zIGFnYWluc3QgdWJpcXVpdG91cyBob3QtcGF0aHMsIHdoaWNoIGlzIGEgZ29vZCByZW1pbmRlci4KClRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWx0ZXJlZCBkaXJlY3RseSBhcmU6IGBjaGVja19rZnVuY19hcmdzYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYG1hcF9rcHRyX21hdGNoX3R5cGVgLCBgcHJvY2Vzc19zcGluX2xvY2tgLCBhbmQgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBhcmUgdGhvc2UgZml2ZSBmdW5jdGlvbnMgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UsIG9yIGlzIGBicGZfY2hlY2tgIGFsc28gaW1wYWN0ZWQgc2lnbmlmaWNhbnRseT8gSXQgbG9va3MgbGlrZSB0aG9zZSBmaXZlIGZ1bmN0aW9ucywgYWxsIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYXJlIHRoZSBwcmVjaXNlIGFyZWFzIHdoZXJlIHRoZSB2ZXJpZmllciBsb2dpYyBoYXMgYmVlbiBtb2RpZmllZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KClNvLCBJIHJlLWV4YW1pbmUgdGhlIGRpZmYgYW5kIHB1bGwgb3V0IHRoZSBmb2xsb3dpbmc6CgoxLiAgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgOiB0aGUgZnVuY3Rpb24gYHR5cGVfaXNfcHRyX2FsbG9jX29iamAgaXMgaW52b2x2ZWQuCjIuICBga2VybmVsL2JwZi92ZXJpZmllci5jYDogdGhlIGxpc3RlZCBmaXZlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCB0aGVpciBzcGVjaWZpYyBsaW5lIG51bWJlciByYW5nZXMgd2l0aGluIHRoZSBmaWxlLiBJIGFsc28gbm93IGhhdmUgdGhlIGNvcnJlY3QgY29udGV4dDoKICAgICogICBgbWFwX2twdHJfbWF0Y2hfdHlwZWAgKGxpbmVzIDQ0ODgtNDQ5NykKICAgICogICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIChsaW5lcyA2MDMxLTYwNDcpCiAgICAqICAgYHByb2Nlc3Nfc3Bpbl9sb2NrYCAobGluZXMgNzQwOS03NDMyKQogICAgKiAgIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2AgKGxpbmVzIDk1MTItOTUzNSkKICAgICogICBgY2hlY2tfa2Z1bmNfYXJnc2AgKGxpbmVzIDEzMTcxLTEzMTkyKQoKRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgYnVpbGQgY29udGV4dC4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQlBGX1NZU0NBTExgIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGVxdWl2YWxlbnQgc2VhcmNoLCBtYXliZSByZWZpbmVkIHdpdGggYSBgZmluZGAgb3IgYGdpdCBncmVwYCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG9wdGlvbiB0byBiZSBwcmV2YWxlbnQsIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGltcG9ydGFuY2Ugb2YgQlBGIGFuZCBzeXN0ZW0gY2FsbHMgd2l0aGluIHRoZSBrZXJuZWwuIEkgd2lsbCBtb3N0IGxpa2VseSB1c2UgYSBzZXJpZXMgb2YgcXVlcmllcy4gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhpcyBpcyBoYW5kbGVkIGFjcm9zcyBhcmNoaXRlY3R1cmVzIGFuZCBrZXJuZWwgdmVyc2lvbnMg4oCTIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYW55IGFzc3VtcHRpb25zIGJhc2VkIG9uIGEgc2luZ2xlIHNlYXJjaC4gT25jZSBJIGhhdmUgdGhlIHJlc3VsdHMsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGFueSBjb250ZXh0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHVzYWdlcyBpbiBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCBhbHNvIEMgY29kZSB3aGljaCByZWZlcmVuY2VzIHRoZSBtYWNybyBvciB1c2VzIGl0cyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBzZWN1cml0eSBmZWF0dXJlcywgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIGFuZCBvZiBjb3Vyc2UgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBkZXZlbG9wIGEgdmlldyBvZiB0aGUgZWNvc3lzdGVtIGFyb3VuZCBgQlBGX1NZU0NBTExgIHRvIGZpZ3VyZSBvdXQgaXRzIGN1cnJlbnQgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkJQRiBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hhdCBCUEYgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2hhdCBtb2R1bGVzIGFyZSBhdmFpbGFibGUsIGFuZCBwb3RlbnRpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIExpbmUgMjUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBzZXR0aW5nIHVwIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuIEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgc29tZSBkZXRhaWxzIG9uIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyB1c2luZyBCUEYsIG9yIHdoYXQgYXJlIGRlcGVuZGVudCBvbiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDU5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgQlRGIGZvciBCUEYgRmVhdHVyZSBBbmFseXNpcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoaXMgQlBGIGZlYXR1cmUgc2V0IGFuZCBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGFscmVhZHkgbG9va2luZyBhdCBrcHRyIGhhbmRsaW5nIOKAkyBjbGVhcmx5IGEgY3JpdGljYWwgYXNwZWN0IOKAkyBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBjb25uZWN0aW9ucyB0byBCVEYgKEJQRiBUeXBlIEZvcm1hdCkuIEdpdmVuIHRoZSB3YXkgdGhlc2UgZmVhdHVyZXMgb2Z0ZW4gaW50ZXJhY3Qgd2l0aCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgQlRGIHRvIGluZm9ybSB0aG9zZSBpbnRlcmFjdGlvbnMsIGl0IG1ha2VzIHNlbnNlIHRvIGV4cGxpY2l0bHkgY29uZmlybSBvdXIgY292ZXJhZ2Ugb2YgYERFQlVHX0lORk9fQlRGYC4gSXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlc2UgQlBGIGZlYXR1cmVzIGFuZCBob3cgdGhleSBwbGF5IHdpdGggdGhlIGtlcm5lbC4gSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG1pc3MgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19JTkZPX0JURiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xubGliL0tjb25maWcuZGVidWctNDI5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NDUKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBWZXJpZmljYXRpb24gVGhvdWdodHMqKgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBlc3NlbnRpYWxzIHN0cmFpZ2h0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkOyBpdCYjMzk7cyB0aGUgYmVkcm9jayBmb3IgY29tcGlsaW5nIGB2ZXJpZmllci5vYCwgYW5kIHRoZSBNYWtlZmlsZSBpbiBga2VybmVsL2JwZmAgYmFja3MgdGhhdCB1cC4gVGhlbiwgYERFQlVHX0lORk9fQlRGYCBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBCVEYgc3VwcG9ydCBpbiBCUEYuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgRm9jdXNTeW1ib2xzOyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgcG9pbnRzOgotICAgYG1hcF9rcHRyX21hdGNoX3R5cGVgCi0gICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgCi0gICBgcHJvY2Vzc19zcGluX2xvY2tgCi0gICBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgCi0gICBgY2hlY2tfa2Z1bmNfYXJnc2AKCk9rYXksIHRoZSBwYXRjaCBpcyBxdWl0ZSBpbnZvbHZlZCwgdG91Y2hpbmcgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYWNyb3NzIHRoZSBib2FyZCwgc28gbGV0IG1lIGJyZWFrIGl0IGRvd24uIEl0IGhhcyBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIHZlcmlmaWNhdGlvbiBzdGVwczoKCjEuICBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCBub3cgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVzIGBQVFJfVU5UUlVTVEVEYCBwb2ludGVycyBhcyB2YWxpZCBhbGxvY2F0ZWQgb2JqZWN0cy4KMi4gIGBtYXBfa3B0cl9tYXRjaF90eXBlYDogVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSBgQlBGX0tQVFJfUEVSQ1BVYCBmaWVsZHMgbGluZSB1cCB3aXRoIGBNRU1fUEVSQ1BVYCByZWdpc3RlcnMuCjMuICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgOiBUaGlzIG9uZSBhbGxvd3MgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdHMgKGBicGZfbWF5X2ZhdWx0X29uX2RlcmVmYCkgdG8gYmUgcmVhZCBhZnRlciB0aGVpciBsaWZldGltZSBwcm90ZWN0aW9uIGhhcyBlbmRlZCwgd2l0aG91dCB0cmlnZ2VyaW5nIGEgYHZlcmlmaWVyX2J1Z2AuCjQuICBgcHJvY2Vzc19zcGluX2xvY2tgOiBJdCYjMzk7cyBlbnN1cmluZyB0aGF0IHdlIGludmFsaWRhdGUgbm9uLW93bmluZyByZWZlcmVuY2VzICpiZWZvcmUqIGludmFsaWRhdGluZyBSQ1UgcHJvdGVjdGVkIHJlZmVyZW5jZXMuCjUuICBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgOiBJdCBjbGVhcnMgdGhlIGBOT05fT1dOX1JFRmAgZmxhZyBvbiBSQ1UtZGVtb3RlZCByZWdpc3RlcnMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgcmVnaXN0ZXIgc3RhdGUuCjYuICBgY2hlY2tfa2Z1bmNfYXJnc2A6IFRoaXMgaXMgdGhlIGNydWNpYWwgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYSByZWdpc3RlciBpcyBhY3R1YWxseSByZWZlcmVuY2VkIGJlZm9yZSB0cmVhdGluZyBpdCBhcyBhbiBvd25pbmcgcmVmZXJlbmNlIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLgoKU2luY2UgdGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbXBhY3QgdGhlIGBicGYoKWAgc3lzY2FsbCB0aHJvdWdoIGBCUEZfUFJPR19MT0FEYCwgSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIGZ1enppbmcgdG8gaHVudCBmb3IgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzLCBwcm9ibGVtcyBpbiBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgdHJhY2tlZCwgb3IgdGhlIHBvdGVudGlhbCBmb3IgY3Jhc2hlcy4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgdGhlIGxvZ2ljIHNlZW1zIHNvdW5kIGFuZCB0aGUgY2hhbmdlcyBhcmUgd2VsbC11bmRlcnN0b29kLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXBfa3B0cl9tYXRjaF90eXBlJiMzNDssCiAgICAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgICAmIzM0O3Byb2Nlc3Nfc3Bpbl9sb2NrJiMzNDssCiAgICAmIzM0O2ludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgYW5kIHNhZmV0eSBjaGVja3MgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGFuZCBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgUFRSX1VOVFJVU1RFRCBmbGFncyBmb3IgYWxsb2NhdGVkIG9iamVjdHMsIEJQRl9LUFRSX1BFUkNQVSBtYXRjaGluZywgZmF1bHQtdG9sZXJhbnQgQlRGIGxvYWRzLCByZWZlcmVuY2UgaW52YWxpZGF0aW9uIG9yZGVyIGR1cmluZyBzcGluIHVubG9jayAvIFJDVSB1bmxvY2ssIGFuZCBvd25pbmcgcmVmZXJlbmNlIGNoZWNrcyBpbiBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hcF9rcHRyX21hdGNoX3R5cGUmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19zcGluX2xvY2smIzM0OywKICAgICYjMzQ7aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfYXJncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciByZWdpc3RlciBzdGF0ZSB0cmFja2luZyBhbmQgc2FmZXR5IGNoZWNrcyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYW5kIGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBQVFJfVU5UUlVTVEVEIGZsYWdzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cywgQlBGX0tQVFJfUEVSQ1BVIG1hdGNoaW5nLCBmYXVsdC10b2xlcmFudCBCVEYgbG9hZHMsIHJlZmVyZW5jZSBpbnZhbGlkYXRpb24gb3JkZXIgZHVyaW5nIHNwaW4gdW5sb2NrIC8gUkNVIHVubG9jaywgYW5kIG93bmluZyByZWZlcmVuY2UgY2hlY2tzIGluIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIHJlZ2FyZGluZyByZWZlcmVuY2UgdHJhY2tpbmcgKG5vbi1vd25pbmcgcmVmZXJlbmNlcywgUkNVLXByb3RlY3RlZCByZWZlcmVuY2VzLCBhbmQgcGVyLUNQVSBrcHRycykgYW5kIHR5cGUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdmVyaWZpZXIgdHJhY2tpbmcgY291bGQgbGVhZCB0byBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyksIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2RhYWQ2ODNkNTMzNGRhNWZiYjQxYTRhYWUyODY5ZWNkOGUyMGI0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTc6NDU6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAxMzM5YzJmMDI4ZGIwLi4zNmI2NTc5Nzg3N2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTEzODEsNyAmIzQzOzEzODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3R5cGVfaGFzX3Vuc2FmZV9tb2RpZmllcnModTMyIHR5cGUpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpCiB7Ci0JcmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEICZhbXA7JmFtcDsgdHlwZV9mbGFnKHR5cGUpICZhbXA7IE1FTV9BTExPQzsKJiM0MzsJcmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBNRU1fQUxMT0MgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgJmFtcDsgUFRSX1VOVFJVU1RFRCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHUzMiB0eXBlKQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTQ0ODgsNiAmIzQzOzQ0ODgsMTMgQEAgc3RhdGljIGludCBtYXBfa3B0cl9tYXRjaF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKHR5cGVfZmxhZyhyZWctJmd0O3R5cGUpICZhbXA7IH5wZXJtX2ZsYWdzKQogCQlnb3RvIGJhZF90eXBlOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgQlBGX0tQVFJfUEVSQ1BVIGZpZWxkIGlzIHJlYWQgYmFjayBhcyBNRU1fUEVSQ1BVLCBzbyB0aGUgdmFsdWUKJiM0MzsJICogc3RvcmVkIGluIGl0IG11c3QgY2FycnkgdGhlIHNhbWUgZmxhZy4KJiM0MzsJICovCiYjNDM7CWlmICgoa3B0cl9maWVsZC0mZ3Q7dHlwZSA9PSBCUEZfS1BUUl9QRVJDUFUpICE9ICEhKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUEVSQ1BVKSkKJiM0MzsJCWdvdG8gYmFkX3R5cGU7CiYjNDM7CiAJLyogV2UgbmVlZCB0byB2ZXJpZnkgcmVnLSZndDt0eXBlIGFuZCByZWctJmd0O2J0ZiwgYmVmb3JlIGFjY2Vzc2luZyByZWctJmd0O2J0ZiAqLwogCXJlZ19uYW1lID0gYnRmX3R5cGVfbmFtZShyZWctJmd0O2J0ZiwgcmVnLSZndDtidGZfaWQpOwogCkBAIC02MDMxLDcgJiM0Mzs2MDM4LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiAKLQkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdCBtYXkgc3RpbGwgYmUgcmVhZCB0aHJvdWdoIGEKJiM0MzsJCSAqIEJQRl9QUk9CRV9NRU0gbG9hZCBhZnRlciBpdHMgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLiBXcml0ZXMKJiM0MzsJCSAqIHRocm91Z2ggc3VjaCBwb2ludGVycyB3ZXJlIHJlamVjdGVkIGFib3ZlLgomIzQzOwkJICovCiYjNDM7CQlpZiAodHlwZV9pc19hbGxvYyhyZWctJmd0O3R5cGUpICZhbXA7JmFtcDsgIWJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiAJCSAgICAhKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSAmYW1wOyZhbXA7ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpIHsKIAkJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7YWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkJiMzNDspOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC03NDA5LDEwICYjNDM7NzQyMiwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc3Bpbl9sb2NrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlCiAJCQkJbG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEludmFsaWRhdGUgbm9uLW93bmluZyByZWZzIGJlZm9yZSBSQ1UgZGVtb3Rpb24gY2xlYXJzIHRoZWlyCiYjNDM7CQkgKiBOT05fT1dOX1JFRiBmbGFnLgomIzQzOwkJICovCiYjNDM7CQlpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhlbnYpOwomIzQzOwogCQlpZiAoIWluX3JjdV9jcyhlbnYpKQogCQkJaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTsKLQotCQlpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhlbnYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk1MTIsNyAmIzQzOzk1MjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCWJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LSZndDtjdXJfc3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBjbGVhcl9tYXNrLCAoewogCQlpZiAocmVnLSZndDt0eXBlICZhbXA7IE1FTV9SQ1UpIHsKIAkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsIHJlZywgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTsKLQkJCXJlZy0mZ3Q7dHlwZSAmYW1wOz0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpOwomIzQzOwkJCXJlZy0mZ3Q7dHlwZSAmYW1wOz0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwgfCBOT05fT1dOX1JFRik7CiAJCQlyZWctJmd0O3R5cGUgfD0gUFRSX1VOVFJVU1RFRDsKIAkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKIAkJfQpAQCAtMTMxNzEsNyAmIzQzOzEzMTg4LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCQkJCSAgICAgIGJwZl9kaWFnX3JlZ190eXBlX3BsYWluKGVudiwgcmVnLSZndDt0eXBlKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSkKJiM0MzsJCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkKIAkJCQltZXRhLSZndDthcmdfb3duaW5nX3JlZiA9IHRydWU7CiAKIAkJCXJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jCmluZGV4IDA4Mzc5YzNiNmEwMzguLjM3MDFmNGVhNThjNzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jCkBAIC0zMyw2ICYjNDM7MzMsMjAgQEAgc3RydWN0IHsKIAlfX3R5cGUodmFsdWUsIHN0cnVjdCBlbGVtKTsKIH0gYXJyYXkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtIHsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0IF9fcGVyY3B1X2twdHIgKnRhc2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtKTsKJiM0Mzt9IGtlcm5lbF9wZXJjcHVfYXJyYXkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07CiYjNDM7dm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzOwogbG9uZyByZXQ7CiAKIFNFQygmIzM0Oz9mZW50cnkvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQpAQCAtMTM3LDYgJiM0MzsxNTEsNTEgQEAgaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9dHJ1c3RlZF9wdHJfIGV4cGVjdGVkPXB0cl90YXNrX3N0cnVjdCYjMzQ7KQomIzQzO2ludCByZWplY3Rfa2VybmVsX3B0cl9pbnRvX3BlcmNwdV9rcHRyKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0gKmU7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDsKJiM0MzsJaW50IGluZGV4ID0gMDsKJiM0MzsKJiM0MzsJZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtrZXJuZWxfcGVyY3B1X2FycmF5LCAmYW1wO2luZGV4KTsKJiM0MzsJaWYgKCFlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXAgPSBicGZfdGFza19mcm9tX3BpZCgxKTsKJiM0MzsJaWYgKCFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDtlLSZndDt0YXNrLCBwKTsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2Uob2xkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT1wdHJfIGV4cGVjdGVkPXB0cl92YWxfdCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhyZWplY3RfcGxhaW5fYWxsb2NfaW50b19wZXJjcHVfa3B0cikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2YWxfdCBfX3BlcmNwdV9rcHRyICpvbGQ7CiYjNDM7CXN0cnVjdCB2YWxfdCAqcDsKJiM0MzsJc3RydWN0IGVsZW0gKmU7CiYjNDM7CWludCBpbmRleCA9IDA7CiYjNDM7CiYjNDM7CWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YXJyYXksICZhbXA7aW5kZXgpOwomIzQzOwlpZiAoIWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcCA9IGJwZl9vYmpfbmV3KHN0cnVjdCB2YWxfdCk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7ZS0mZ3Q7cGMsIHApOwomIzQzOwlpZiAob2xkKQomIzQzOwkJYnBmX3BlcmNwdV9vYmpfZHJvcChvbGQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MSYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7YnBmX3BlcmNwdV9vYmpfbmV3IHR5cGUgSUQgYXJndW1lbnQgbXVzdCBiZSBvZiBhIHN0cnVjdCBvZiBzY2FsYXJzJiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jCmluZGV4IDMxZDQwODFjM2E5ZmQuLmNkYjI1NWFkZGJjMzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYwpAQCAtNTkyLDkgJiM0Mzs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eCkKIAl9CiAJYnBmX3JjdV9yZWFkX3VubG9jaygpOwogCS8qCi0JICogVGhlIHVubG9jayBsZWF2ZXMgbm9kZSBhcyBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgUFRSX1VOVFJVU1RFRAotCSAqIHwgTk9OX09XTl9SRUYsIGFuZCB0aGUgbG9hZCBiZWxvdyBoYXMgdG8gZ2V0IHRoZSBCUEZfUFJPQkVfTUVNCi0JICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLgomIzQzOwkgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVELAomIzQzOwkgKiBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTSByZXdyaXRlIGZvciBpdCwKJiM0MzsJICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuCiAJICovCiAJbm9uX293bl9yZWZfa2V5ID0gbm9kZS0mZ3Q7a2V5OwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCmluZGV4IDYxOTA2ZjQ4MDI1Y2MuLmNhZTAwZjdiMGEyNDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKQEAgLTIzLDYgJiM0MzsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHsKIAlzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKIAlfX3R5cGUoa2V5LCBpbnQpOwpAQCAtMzAsNiAmIzQzOzM5LDEzIEBAIHN0cnVjdCB7CiAJX191aW50KG1heF9lbnRyaWVzLCAyKTsKIH0gc3Rhc2hlZF9ub2RlcyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHsKIAlsb25nIGtleTsKIAlsb25nIGRhdGE7CkBAIC04MzIsNiAmIzQzOzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwomIzQzOwluID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7CiYjNDM7CWlmICghbikKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWJwZl9vYmpfZHJvcChtKTsKJiM0MzsJYnBmX29ial9kcm9wKG4pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmICghbSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9ub2RlcywgJmFtcDtpZHgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwppbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwpAQCAtMTksNiAmIzQzOzE5LDI2IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgewogCXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgewomIzQzOwlzdHJ1Y3QgYnBmX3JiX25vZGUgbm9kZTsKJiM0MzsJbG9uZyBkYXRhOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJjdV9ncmFwaF9ub2RlICpqdXN0X2hlcmVfYmVjYXVzZV9idGZfYnVnOwomIzQzOwomIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoIHsKJiM0MzsJc3RydWN0IHJjdV9ncmFwaF9ub2RlIF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiAKQEAgLTI3LDYgJiM0Mzs0NywyMiBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdsb2NrOwogcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTsKJiM0Mztwcml2YXRlKEMpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdyYXBoX2xvY2s7CiYjNDM7cHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IHN0YXNoZWRfcmN1X2dyYXBoIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQogewpAQCAtODksNiAmIzQzOzEyNSwxMjAgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX25vbl9vYmplY3Qodm9pZCAqY3R4KQogCXJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShjdHgpICE9IE5VTEw7CiB9CiAKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJLyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovCiYjNDM7CXRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7CiYjNDM7CWlmICghdG1wKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWJwZl9vYmpfZHJvcCh0bXApOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWJwZl9vYmpfZHJvcChtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9zeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDticGZfcmJ0cmVlX3JlbW92ZSBjYW4gb25seSB0YWtlIG5vbi1vd25pbmcgb3IgcmVmY291bnRlZCAmIzM0OwomIzQzOyAgICAgICYjMzQ7YnBmX3JiX25vZGUgcG9pbnRlciYjMzQ7KQomIzQzO2xvbmcgcmJ0cmVlX3JlbW92ZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7CiYjNDM7CXN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTsKJiM0MzsJc3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmN1X2dyYXBoLCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW5vZGUgPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbm9kZSkgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7Z3JhcGhfbG9jayk7CiYjNDM7CXJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZSgmYW1wO2dyYXBoX3Jvb3QsICZhbXA7bm9kZS0mZ3Q7bm9kZSk7CiYjNDM7CWJwZl9zcGluX3VubG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwlpZiAocmJfbm9kZSkKJiM0MzsJCWJwZl9vYmpfZHJvcChjb250YWluZXJfb2YocmJfbm9kZSwgc3RydWN0IHJjdV9ncmFwaF9ub2RlLCBub2RlKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IxIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmJiMzNDspCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm5vZGUsICpyZWY7CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW5vZGUgPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbm9kZSkgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShub2RlKTsKJiM0MzsJaWYgKHJlZikKJiM0MzsJCWJwZl9vYmpfZHJvcChyZWYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3N5c2NhbGwmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2xvbmcgZ3JhcGhfa3B0cl9hZnRlcl9zcGluX3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsOwomIzQzOwlzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yY3VfZ3JhcGgsICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwlub2RlID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW5vZGUpIHsKJiM0MzsJCWJwZl9zcGluX3VubG9jaygmYW1wO2dyYXBoX2xvY2spOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7Z3JhcGhfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlLSZndDtkYXRhOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0mIzQzO319JiMzNDspCiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjkKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMTQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgUGF0Y2ggQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIHNldmVyYWwgc3VidGxlIGJ1dCBjcml0aWNhbCBpc3N1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSBhcm91bmQgcmVmZXJlbmNlIHRyYWNraW5nLCBtZW1vcnkgc2FmZXR5LCBhbmQgdHlwZSBjb25zaXN0ZW5jeS4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyBhIHJlZmluZW1lbnQgb2YgYHR5cGVfaXNfcHRyX2FsbG9jX29iamAsIHdpdGggYW4gZXhwbGljaXQgZXhjbHVzaW9uIG9mIGBQVFJfVU5UUlVTVEVEYC4gVGhpcyBtYWtlcyBzZW5zZTsgd2UgZG9uJiMzOTt0IHdhbnQgdG8gY29uc2lkZXIgdW50cnVzdGVkIHBvaW50ZXJzIGFzIHZhbGlkIGZvciBhbGxvY2F0aW9uIHRyYWNraW5nLiBGb2xsb3dpbmcgdGhpcywgdGhlIGFkZGl0aW9uIHRvIGBtYXBfa3B0cl9tYXRjaF90eXBlYCBlbnN1cmVzIGNvbnNpc3RlbmN5IGJldHdlZW4gYEJQRl9LUFRSX1BFUkNQVWAgZmllbGRzIGFuZCB0aGUgYE1FTV9QRVJDUFVgIGZsYWcuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgdHlwZSBjb25mdXNpb24gZHVyaW5nIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLgoKVGhlIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgbW9kaWZpY2F0aW9uIGlzIGFsc28gaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBub3cgY29ycmVjdGx5IGhhbmRsaW5nIHBvdGVudGlhbGx5IGZhdWx0LXByb25lIGFsbG9jYXRlZCBvYmplY3RzIGJ5IGNoZWNraW5nIGBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy0mZ3Q7dHlwZSlgIGFuZCB0aGUgaW5jbHVzaW9uIG9mIGByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZylgIGluIGBjaGVja19rZnVuY19hcmdzYCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBhIGtleSBkZWZlbnNlIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhZnRlciB0aGUgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLgoKRnVydGhlcm1vcmUsIGNoYW5nZXMgdG8gYHByb2Nlc3Nfc3Bpbl9sb2NrYCBhbmQgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCBwcm92aWRlIGltcHJvdmVtZW50cyB0byBoYW5kbGluZyBub24tb3duaW5nIHJlZmVyZW5jZXMgYW5kIFJDVS1wcm90ZWN0ZWQgcG9pbnRlcnMsIGNvcnJlY3RpbmcgdGhlIGludmFsaWRhdGlvbiBvcmRlciBhbmQgY2xlYXJpbmcgYE5PTl9PV05fUkVGYCBhcHByb3ByaWF0ZWx5IGR1cmluZyBSQ1UgZGVtb3Rpb24gdG8gYXZvaWQgcG9zc2libGUgdXNlLWFmdGVyLWZyZWUgYnVncy4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggc3RyZW5ndGhlbnMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBhYmlsaXR5IHRvIGVuZm9yY2UgbWVtb3J5IHNhZmV0eSBieSBpbXByb3ZpbmcgcG9pbnRlciB0eXBlIHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZywgcHJldmVudGluZyBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGNoYW5nZXMgdG8gZGV0ZXJtaW5lIGlmIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZGF0YSBzdHJ1Y3R1cmUgY29ycnVwdGlvbiwgb3IgaW5mb3JtYXRpb24gbGVha3MgbWlnaHQgb2NjdXIuIEkgc2VlIG5vIGV2aWRlbmNlIG9mIHRoZXNlIGlzc3Vlcy4gSSBjaGVja2VkIGZvciBuZXcga2VybmVsIHN0cnVjdHVyZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgbm9uZSBvZiB0aGVzZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBwcmVzZW50LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtkIHNheSB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFzIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHZhbGlkYXRpb24gcnVsZXMgd2l0aGluIHRoZSB2ZXJpZmllciwgYW5kIHRoZXJlIGFyZSBubyBuZXcga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS4gU3RhbmRhcmQgdmVyaWZpZXIgdGVzdHMgYW5kIHN5emthbGxlciBjaGVja3MsIGFsb25nIHdpdGggS0FTQU4sIHdpbGwgZGV0ZWN0IGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLiBUaGlzIHJlaW5mb3JjZXMgbXkgY29uZmlkZW5jZSBpbiB0aGUgcGF0Y2gmIzM5O3Mgc2FmZXR5LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgcmVnYXJkaW5nIHJlZmVyZW5jZSB0cmFja2luZyAobm9uLW93bmluZyByZWZlcmVuY2VzLCBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMsIGFuZCBwZXItQ1BVIGtwdHJzKSBhbmQgdHlwZSB2YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGluIGEgd2F5IHRoYXQgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB2ZXJpZmllciB0cmFja2luZyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjQyLjYzMDMzMjkzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQ3MzM1OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hcF9rcHRyX21hdGNoX3R5cGVcIixcbiAgICBcImNoZWNrX3B0cl90b19idGZfYWNjZXNzXCIsXG4gICAgXCJwcm9jZXNzX3NwaW5fbG9ja1wiLFxuICAgIFwiaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNcIixcbiAgICBcImNoZWNrX2tmdW5jX2FyZ3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciByZWdpc3RlciBzdGF0ZSB0cmFja2luZyBhbmQgc2FmZXR5IGNoZWNrcyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYW5kIGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBQVFJfVU5UUlVTVEVEIGZsYWdzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cywgQlBGX0tQVFJfUEVSQ1BVIG1hdGNoaW5nLCBmYXVsdC10b2xlcmFudCBCVEYgbG9hZHMsIHJlZmVyZW5jZSBpbnZhbGlkYXRpb24gb3JkZXIgZHVyaW5nIHNwaW4gdW5sb2NrIC8gUkNVIHVubG9jaywgYW5kIG93bmluZyByZWZlcmVuY2UgY2hlY2tzIGluIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjQyLjYzMDM0MTA5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0ODk2Njc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkYWFkNjgzZDUzMzRkYTVmYmI0MWE0YWFlMjg2OWVjZDhlMjBiNGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzo0NTo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDEzMzljMmYwMjhkYjAuLjM2YjY1Nzk3ODc3ZDAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTM4MSw3ICsxMzgxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfcHRyX2FsbG9jX29iaih1MzIgdHlwZSlcXG4ge1xcbi1cXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFxcdTAwMjYgTUVNX0FMTE9DO1xcbitcXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IE1FTV9BTExPQyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfbm9uX293bmluZ19yZWYodTMyIHR5cGUpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTQ0ODgsNiArNDQ4OCwxMyBAQCBzdGF0aWMgaW50IG1hcF9rcHRyX21hdGNoX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKHR5cGVfZmxhZyhyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjYgfnBlcm1fZmxhZ3MpXFxuIFxcdFxcdGdvdG8gYmFkX3R5cGU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlXFxuK1xcdCAqIHN0b3JlZCBpbiBpdCBtdXN0IGNhcnJ5IHRoZSBzYW1lIGZsYWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGtwdHJfZmllbGQtXFx1MDAzZXR5cGUgPT0gQlBGX0tQVFJfUEVSQ1BVKSAhPSAhIShyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUEVSQ1BVKSlcXG4rXFx0XFx0Z290byBiYWRfdHlwZTtcXG4rXFxuIFxcdC8qIFdlIG5lZWQgdG8gdmVyaWZ5IHJlZy1cXHUwMDNldHlwZSBhbmQgcmVnLVxcdTAwM2VidGYsIGJlZm9yZSBhY2Nlc3NpbmcgcmVnLVxcdTAwM2VidGYgKi9cXG4gXFx0cmVnX25hbWUgPSBidGZfdHlwZV9uYW1lKHJlZy1cXHUwMDNlYnRmLCByZWctXFx1MDAzZWJ0Zl9pZCk7XFxuIFxcbkBAIC02MDMxLDcgKzYwMzgsMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNiAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdCBtYXkgc3RpbGwgYmUgcmVhZCB0aHJvdWdoIGFcXG4rXFx0XFx0ICogQlBGX1BST0JFX01FTSBsb2FkIGFmdGVyIGl0cyBsaWZldGltZSBwcm90ZWN0aW9uIGVuZHMuIFdyaXRlc1xcbitcXHRcXHQgKiB0aHJvdWdoIHN1Y2ggcG9pbnRlcnMgd2VyZSByZWplY3RlZCBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjYgIWJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIShyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSBcXHUwMDI2XFx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7XFxuIFxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJhbGxvY2F0ZWQgb2JqZWN0IG11c3QgaGF2ZSBhIHJlZmVyZW5jZWQgaWRcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTc0MDksMTAgKzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxcbiBcXHRcXHRcXHRcXHRsb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW52YWxpZGF0ZSBub24tb3duaW5nIHJlZnMgYmVmb3JlIFJDVSBkZW1vdGlvbiBjbGVhcnMgdGhlaXJcXG4rXFx0XFx0ICogTk9OX09XTl9SRUYgZmxhZy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGludmFsaWRhdGVfbm9uX293bmluZ19yZWZzKGVudik7XFxuK1xcbiBcXHRcXHRpZiAoIWluX3JjdV9jcyhlbnYpKVxcbiBcXHRcXHRcXHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xcbi1cXG4tXFx0XFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05NTEyLDcgKzk1MjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHtcXG4gXFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9SQ1UpIHtcXG4gXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbi1cXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xcbitcXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwgfCBOT05fT1dOX1JFRik7XFxuIFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xcbiBcXHRcXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuIFxcdFxcdH1cXG5AQCAtMTMxNzEsNyArMTMxODgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cXHUwMDNldHlwZSkpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSlcXG4rXFx0XFx0XFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxcbiBcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XFxuIFxcbiBcXHRcXHRcXHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXFxuaW5kZXggMDgzNzljM2I2YTAzOC4uMzcwMWY0ZWE1OGM3NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXFxuQEAgLTMzLDYgKzMzLDIwIEBAIHN0cnVjdCB7XFxuIFxcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xcbiB9IGFycmF5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0ge1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19wZXJjcHVfa3B0ciAqdGFzaztcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0pO1xcbit9IGtlcm5lbF9wZXJjcHVfYXJyYXkgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07XFxuK3ZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcXG4rXFxuIGxvbmcgcmV0O1xcbiBcXG4gU0VDKFxcXCI/ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbkBAIC0xMzcsNiArMTUxLDUxIEBAIGludCBCUEZfUFJPRyh0ZXN0X2FycmF5X21hcF81KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCI/c3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT10cnVzdGVkX3B0cl8gZXhwZWN0ZWQ9cHRyX3Rhc2tfc3RydWN0XFxcIilcXG4raW50IHJlamVjdF9rZXJuZWxfcHRyX2ludG9fcGVyY3B1X2twdHIodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0gKmU7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDtcXG4rXFx0aW50IGluZGV4ID0gMDtcXG4rXFxuK1xcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZrZXJuZWxfcGVyY3B1X2FycmF5LCBcXHUwMDI2aW5kZXgpO1xcbitcXHRpZiAoIWUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cCA9IGJwZl90YXNrX2Zyb21fcGlkKDEpO1xcbitcXHRpZiAoIXApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2ZS1cXHUwMDNldGFzaywgcCk7XFxuK1xcdGlmIChvbGQpXFxuK1xcdFxcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP2ZlbnRyeS5zL2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3RcXFwiKVxcbitpbnQgQlBGX1BST0cocmVqZWN0X3BsYWluX2FsbG9jX2ludG9fcGVyY3B1X2twdHIpXFxuK3tcXG4rXFx0c3RydWN0IHZhbF90IF9fcGVyY3B1X2twdHIgKm9sZDtcXG4rXFx0c3RydWN0IHZhbF90ICpwO1xcbitcXHRzdHJ1Y3QgZWxlbSAqZTtcXG4rXFx0aW50IGluZGV4ID0gMDtcXG4rXFxuK1xcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZhcnJheSwgXFx1MDAyNmluZGV4KTtcXG4rXFx0aWYgKCFlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHAgPSBicGZfb2JqX25ldyhzdHJ1Y3QgdmFsX3QpO1xcbitcXHRpZiAoIXApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2ZS1cXHUwMDNlcGMsIHApO1xcbitcXHRpZiAob2xkKVxcbitcXHRcXHRicGZfcGVyY3B1X29ial9kcm9wKG9sZCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXFwiKVxcbiBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcXG5pbmRleCAzMWQ0MDgxYzNhOWZkLi5jZGIyNTVhZGRiYzMwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXFxuQEAgLTU5Miw5ICs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eClcXG4gXFx0fVxcbiBcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdC8qXFxuLVxcdCAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURURcXG4tXFx0ICogfCBOT05fT1dOX1JFRiwgYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU1cXG4tXFx0ICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLlxcbitcXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVELFxcbitcXHQgKiBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTSByZXdyaXRlIGZvciBpdCxcXG4rXFx0ICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXFxuIFxcdCAqL1xcbiBcXHRub25fb3duX3JlZl9rZXkgPSBub2RlLVxcdTAwM2VrZXk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xcbkBAIC0yMyw2ICsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHtcXG4gXFx0c3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7XFxuIH07XFxuIFxcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0bG9uZyBrZXk7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbiBcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbkBAIC0zMCw2ICszOSwxMyBAQCBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbiB9IHN0YXNoZWRfbm9kZXMgU0VDKFxcXCIubWFwc1xcXCIpO1xcbiBcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rfSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XFxuIFxcdGxvbmcga2V5O1xcbiBcXHRsb25nIGRhdGE7XFxuQEAgLTgzMiw2ICs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInRjXFxcIilcXG4rX19zdWNjZXNzXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XFxuK1xcbitcXHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XFxuK1xcdGlmICghbilcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFx0YnBmX29ial9kcm9wKG4pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3N5c2NhbGxcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICghbSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXFxuIHtcXG4gXFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9ub2RlcywgXFx1MDAyNmlkeCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5pbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtMTksNiArMTksMjYgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XFxuIFxcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuIH07XFxuIFxcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0bG9uZyBrZXk7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcXG4rfTtcXG4rXFxuK3N0cnVjdCByY3VfZ3JhcGhfbm9kZSB7XFxuK1xcdHN0cnVjdCBicGZfcmJfbm9kZSBub2RlO1xcbitcXHRsb25nIGRhdGE7XFxuK307XFxuK1xcbitzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKmp1c3RfaGVyZV9iZWNhdXNlX2J0Zl9idWc7XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCB7XFxuK1xcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSBfX2twdHIgKm5vZGU7XFxuK307XFxuK1xcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbiBcXG5AQCAtMjcsNiArNDcsMjIgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jaztcXG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XFxuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XFxuK3ByaXZhdGUoQykgc3RydWN0IGJwZl9zcGluX2xvY2sgZ3JhcGhfbG9jaztcXG4rcHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rfSBzdGFzaGVkX3JjdV9ncmFwaCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxcbiB7XFxuQEAgLTg5LDYgKzEyNSwxMjAgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX25vbl9vYmplY3Qodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMO1xcbiB9XFxuIFxcbitTRUMoXFxcIj9zeXNjYWxsXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XFxuK1xcdGludCBpZHggPSAwO1xcbitcXG4rXFx0LyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovXFxuK1xcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XFxuK1xcdGlmICghdG1wKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKHRtcCk7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj9zeXNjYWxsXFxcIilcXG4rX19mYWlsdXJlXFxuK19fbXNnKFxcXCJicGZfcmJ0cmVlX3JlbW92ZSBjYW4gb25seSB0YWtlIG5vbi1vd25pbmcgb3IgcmVmY291bnRlZCBcXFwiXFxuKyAgICAgIFxcXCJicGZfcmJfbm9kZSBwb2ludGVyXFxcIilcXG4rbG9uZyByYnRyZWVfcmVtb3ZlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7XFxuK1xcdHN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTtcXG4rXFx0c3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmN1X2dyYXBoLCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0bm9kZSA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFub2RlKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2Z3JhcGhfbG9jayk7XFxuK1xcdHJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZShcXHUwMDI2Z3JhcGhfcm9vdCwgXFx1MDAyNm5vZGUtXFx1MDAzZW5vZGUpO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNmdyYXBoX2xvY2spO1xcbitcXHRpZiAocmJfbm9kZSlcXG4rXFx0XFx0YnBmX29ial9kcm9wKGNvbnRhaW5lcl9vZihyYl9ub2RlLCBzdHJ1Y3QgcmN1X2dyYXBoX25vZGUsIG5vZGUpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj9zeXNjYWxsXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbm9kZSwgKnJlZjtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRub2RlID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW5vZGUpIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShub2RlKTtcXG4rXFx0aWYgKHJlZilcXG4rXFx0XFx0YnBmX29ial9kcm9wKHJlZik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCI/c3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4rbG9uZyBncmFwaF9rcHRyX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsO1xcbitcXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7XFxuK1xcdGludCBpZHggPSAwO1xcbitcXG4rXFx0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9yY3VfZ3JhcGgsIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfc3Bpbl9sb2NrKFxcdTAwMjZncmFwaF9sb2NrKTtcXG4rXFx0bm9kZSA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFub2RlKSB7XFxuK1xcdFxcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2Z3JhcGhfbG9jayk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2Z3JhcGhfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gbm9kZS1cXHUwMDNlZGF0YTtcXG4rfVxcbitcXG4gU0VDKFxcXCI/dGNcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldK319XFxcIilcXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjQ0LjE3OTkxNDUzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzc1OTc4MTY2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFwX2twdHJfbWF0Y2hfdHlwZVwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInByb2Nlc3Nfc3Bpbl9sb2NrXCIsXG4gICAgXCJpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc1wiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIGFuZCBzYWZldHkgY2hlY2tzIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBhbmQgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIFBUUl9VTlRSVVNURUQgZmxhZ3MgZm9yIGFsbG9jYXRlZCBvYmplY3RzLCBCUEZfS1BUUl9QRVJDUFUgbWF0Y2hpbmcsIGZhdWx0LXRvbGVyYW50IEJURiBsb2FkcywgcmVmZXJlbmNlIGludmFsaWRhdGlvbiBvcmRlciBkdXJpbmcgc3BpbiB1bmxvY2sgLyBSQ1UgdW5sb2NrLCBhbmQgb3duaW5nIHJlZmVyZW5jZSBjaGVja3MgaW4gY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZGFhZDY4M2Q1MzM0ZGE1ZmJiNDFhNGFhZTI4NjllY2Q4ZTIwYjRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzo0NTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAxMzM5YzJmMDI4ZGIwLi4zNmI2NTc5Nzg3N2QwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzODEsNyArMTM4MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyh1MzIgdHlwZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuIHtcbi1cdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBNRU1fQUxMT0M7XG4rXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBNRU1fQUxMT0MgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGQ3ZGQwYmVmYmQxMGUuLjU2YTEwZjc5ZjlhODEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQ0ODgsNiArNDQ4OCwxMyBAQCBzdGF0aWMgaW50IG1hcF9rcHRyX21hdGNoX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmICh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiB+cGVybV9mbGFncylcbiBcdFx0Z290byBiYWRfdHlwZTtcbiBcbitcdC8qXG4rXHQgKiBBIEJQRl9LUFRSX1BFUkNQVSBmaWVsZCBpcyByZWFkIGJhY2sgYXMgTUVNX1BFUkNQVSwgc28gdGhlIHZhbHVlXG4rXHQgKiBzdG9yZWQgaW4gaXQgbXVzdCBjYXJyeSB0aGUgc2FtZSBmbGFnLlxuK1x0ICovXG4rXHRpZiAoKGtwdHJfZmllbGQtXHUwMDNldHlwZSA9PSBCUEZfS1BUUl9QRVJDUFUpICE9ICEhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSlcbitcdFx0Z290byBiYWRfdHlwZTtcbitcbiBcdC8qIFdlIG5lZWQgdG8gdmVyaWZ5IHJlZy1cdTAwM2V0eXBlIGFuZCByZWctXHUwMDNlYnRmLCBiZWZvcmUgYWNjZXNzaW5nIHJlZy1cdTAwM2VidGYgKi9cbiBcdHJlZ19uYW1lID0gYnRmX3R5cGVfbmFtZShyZWctXHUwMDNlYnRmLCByZWctXHUwMDNlYnRmX2lkKTtcbiBcbkBAIC02MDMxLDcgKzYwMzgsMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4gXG4tXHRcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuK1x0XHQvKlxuK1x0XHQgKiBBIGZhdWx0LXByb25lIGFsbG9jYXRlZCBvYmplY3QgbWF5IHN0aWxsIGJlIHJlYWQgdGhyb3VnaCBhXG4rXHRcdCAqIEJQRl9QUk9CRV9NRU0gbG9hZCBhZnRlciBpdHMgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLiBXcml0ZXNcbitcdFx0ICogdGhyb3VnaCBzdWNoIHBvaW50ZXJzIHdlcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICEocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpIFx1MDAyNlx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7XG4gXHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJhbGxvY2F0ZWQgb2JqZWN0IG11c3QgaGF2ZSBhIHJlZmVyZW5jZWQgaWRcIik7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtNzQwOSwxMCArNzQyMiwxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc3Bpbl9sb2NrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlXG4gXHRcdFx0XHRsb2NrKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuK1x0XHQvKlxuK1x0XHQgKiBJbnZhbGlkYXRlIG5vbi1vd25pbmcgcmVmcyBiZWZvcmUgUkNVIGRlbW90aW9uIGNsZWFycyB0aGVpclxuK1x0XHQgKiBOT05fT1dOX1JFRiBmbGFnLlxuK1x0XHQgKi9cbitcdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbitcbiBcdFx0aWYgKCFpbl9yY3VfY3MoZW52KSlcbiBcdFx0XHRpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhlbnYpO1xuLVxuLVx0XHRpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhlbnYpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk1MTIsNyArOTUyOSw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi1cdTAwM2VjdXJfc3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBjbGVhcl9tYXNrLCAoe1xuIFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpIHtcbiBcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4tXHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCk7XG4rXHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCB8IE5PTl9PV05fUkVGKTtcbiBcdFx0XHRyZWctXHUwMDNldHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuIFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiBcdFx0fVxuQEAgLTEzMTcxLDcgKzEzMTg4LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdFx0XHQgICAgICBicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSlcbitcdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXG4gXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmID0gdHJ1ZTtcbiBcbiBcdFx0XHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmNcbmluZGV4IDA4Mzc5YzNiNmEwMzguLjM3MDFmNGVhNThjNzUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmNcbkBAIC0zMyw2ICszMywyMCBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgZWxlbSk7XG4gfSBhcnJheSBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtIHtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCBfX3BlcmNwdV9rcHRyICp0YXNrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrZXJuZWxfcGVyY3B1X2VsZW0pO1xuK30ga2VybmVsX3BlcmNwdV9hcnJheSBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2Zyb21fcGlkKHMzMiBwaWQpIF9fa3N5bTtcbit2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rXG4gbG9uZyByZXQ7XG4gXG4gU0VDKFwiP2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG5AQCAtMTM3LDYgKzE1MSw1MSBAQCBpbnQgQlBGX1BST0codGVzdF9hcnJheV9tYXBfNSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9dHJ1c3RlZF9wdHJfIGV4cGVjdGVkPXB0cl90YXNrX3N0cnVjdFwiKVxuK2ludCByZWplY3Rfa2VybmVsX3B0cl9pbnRvX3BlcmNwdV9rcHRyKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtICplO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpwLCAqb2xkO1xuK1x0aW50IGluZGV4ID0gMDtcbitcbitcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmtlcm5lbF9wZXJjcHVfYXJyYXksIFx1MDAyNmluZGV4KTtcbitcdGlmICghZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwID0gYnBmX3Rhc2tfZnJvbV9waWQoMSk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZlLVx1MDAzZXRhc2ssIHApO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShvbGQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBrcHRyIGFjY2VzcywgUjIgdHlwZT1wdHJfIGV4cGVjdGVkPXB0cl92YWxfdFwiKVxuK2ludCBCUEZfUFJPRyhyZWplY3RfcGxhaW5fYWxsb2NfaW50b19wZXJjcHVfa3B0cilcbit7XG4rXHRzdHJ1Y3QgdmFsX3QgX19wZXJjcHVfa3B0ciAqb2xkO1xuK1x0c3RydWN0IHZhbF90ICpwO1xuK1x0c3RydWN0IGVsZW0gKmU7XG4rXHRpbnQgaW5kZXggPSAwO1xuK1xuK1x0ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YXJyYXksIFx1MDAyNmluZGV4KTtcbitcdGlmICghZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwID0gYnBmX29ial9uZXcoc3RydWN0IHZhbF90KTtcbitcdGlmICghcClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNmUtXHUwMDNlcGMsIHApO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX3BlcmNwdV9vYmpfZHJvcChvbGQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9icGZfZmVudHJ5X3Rlc3QxXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiYnBmX3BlcmNwdV9vYmpfbmV3IHR5cGUgSUQgYXJndW1lbnQgbXVzdCBiZSBvZiBhIHN0cnVjdCBvZiBzY2FsYXJzXCIpXG4gaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmNcbmluZGV4IDMxZDQwODFjM2E5ZmQuLmNkYjI1NWFkZGJjMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG5AQCAtNTkyLDkgKzU5Miw5IEBAIGludCBub25fb3duX3JlZl91bnRydXN0ZWRfbGQodm9pZCAqY3R4KVxuIFx0fVxuIFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuIFx0Lypcbi1cdCAqIFRoZSB1bmxvY2sgbGVhdmVzIG5vZGUgYXMgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IFBUUl9VTlRSVVNURURcbi1cdCAqIHwgTk9OX09XTl9SRUYsIGFuZCB0aGUgbG9hZCBiZWxvdyBoYXMgdG8gZ2V0IHRoZSBCUEZfUFJPQkVfTUVNXG4tXHQgKiByZXdyaXRlIGZvciBpdCwgb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXG4rXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVELFxuK1x0ICogYW5kIHRoZSBsb2FkIGJlbG93IGhhcyB0byBnZXQgdGhlIEJQRl9QUk9CRV9NRU0gcmV3cml0ZSBmb3IgaXQsXG4rXHQgKiBvdGhlcndpc2UgYSBiYWQgYWRkcmVzcyBwYW5pY3MgdGhlIGtlcm5lbC5cbiBcdCAqL1xuIFx0bm9uX293bl9yZWZfa2V5ID0gbm9kZS1cdTAwM2VrZXk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbmluZGV4IDYxOTA2ZjQ4MDI1Y2MuLmNhZTAwZjdiMGEyNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuQEAgLTIzLDYgKzIzLDE1IEBAIHN0cnVjdCBtYXBfdmFsdWUge1xuIFx0c3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7XG4gfTtcbiBcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbitcdGxvbmcga2V5O1xuK1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbit9O1xuK1xuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtMzAsNiArMzksMTMgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7XG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcIi5tYXBzXCIpO1xuIFxuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0cnVjdCBub2RlX2FjcXVpcmUge1xuIFx0bG9uZyBrZXk7XG4gXHRsb25nIGRhdGE7XG5AQCAtODMyLDYgKzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2Vzc1xuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXG4rXHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XG4rXHRpZiAoIW4pXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1x0YnBmX29ial9kcm9wKG4pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19zdWNjZXNzXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKCFtKVxuK1x0XHRyZXR1cm4gMztcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXG4ge1xuIFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbmluZGV4IGVhYWVkMDg1OWY5NDYuLjMzOGU0MzgyMmZmZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xOSw2ICsxOSwyNiBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiBcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4gfTtcbiBcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbitcdGxvbmcga2V5O1xuK1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbit9O1xuK1xuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuK3N0cnVjdCByY3VfZ3JhcGhfbm9kZSB7XG4rXHRzdHJ1Y3QgYnBmX3JiX25vZGUgbm9kZTtcbitcdGxvbmcgZGF0YTtcbit9O1xuK1xuK3N0cnVjdCByY3VfZ3JhcGhfbm9kZSAqanVzdF9oZXJlX2JlY2F1c2VfYnRmX2J1ZztcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCB7XG4rXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgX19rcHRyICpub2RlO1xuK307XG4rXG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuQEAgLTI3LDYgKzQ3LDIyIEBAIHByaXZhdGUoQSkgc3RydWN0IGJwZl9zcGluX2xvY2sgZ2xvY2s7XG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuK3ByaXZhdGUoQykgc3RydWN0IGJwZl9zcGluX2xvY2sgZ3JhcGhfbG9jaztcbitwcml2YXRlKEMpIHN0cnVjdCBicGZfcmJfcm9vdCBncmFwaF9yb290IF9fY29udGFpbnMocmN1X2dyYXBoX25vZGUsIG5vZGUpO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rfSBzdGFzaGVkX3JjdV9ncmFwaCBTRUMoXCIubWFwc1wiKTtcbiBcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuIHtcbkBAIC04OSw2ICsxMjUsMTIwIEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9ub25fb2JqZWN0KHZvaWQgKmN0eClcbiBcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShjdHgpICE9IE5VTEw7XG4gfVxuIFxuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl91bmNoZWNrZWRfZHJvcCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0LyogRm9yY2UgQ2xhbmcgdG8gZW1pdCBjb21wbGV0ZSBCVEYgZm9yIHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkuICovXG4rXHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xuK1x0aWYgKCF0bXApXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKHRtcCk7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW4pIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiYnBmX3JidHJlZV9yZW1vdmUgY2FuIG9ubHkgdGFrZSBub24tb3duaW5nIG9yIHJlZmNvdW50ZWQgXCJcbisgICAgICBcImJwZl9yYl9ub2RlIHBvaW50ZXJcIilcbitsb25nIHJidHJlZV9yZW1vdmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGggKm1hcHZhbDtcbitcdHN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTtcbitcdHN0cnVjdCByY3VfZ3JhcGhfbm9kZSAqbm9kZTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JjdV9ncmFwaCwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRub2RlID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW5vZGUpIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXHRyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoXHUwMDI2Z3JhcGhfcm9vdCwgXHUwMDI2bm9kZS1cdTAwM2Vub2RlKTtcbitcdGJwZl9zcGluX3VubG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbitcdGlmIChyYl9ub2RlKVxuK1x0XHRicGZfb2JqX2Ryb3AoY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCByY3VfZ3JhcGhfbm9kZSwgbm9kZSkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUjEgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpub2RlLCAqcmVmO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRub2RlID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW5vZGUpIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJlZiA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG5vZGUpO1xuK1x0aWYgKHJlZilcbitcdFx0YnBmX29ial9kcm9wKHJlZik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3N5c2NhbGxcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitsb25nIGdyYXBoX2twdHJfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7XG4rXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yY3VfZ3JhcGgsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuK1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFub2RlKSB7XG4rXHRcdGJwZl9zcGluX3VubG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXG4rXHRyZXR1cm4gbm9kZS1cdTAwM2VkYXRhO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSt9fVwiKVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDU6NDQuMTc5OTE2MjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODA3NDk5OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgVmVyaWZpZXIgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbG9uZyB3aXRoIHNvbWUgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgQlBGIHN1YnN5c3RlbSBpcyBpbmNyZWRpYmx5IGltcG9ydGFudCBhbmQgZ2V0cyBhIGxvdCBvZiBleHBvc3VyZS4gSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGZhaXJseSBmb2N1c2VkLCBidXQgdGhleSBzdGlsbCByZXByZXNlbnQgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0bzpcblxuKiAgIEEgbmV3IGlubGluZSBmdW5jdGlvbiBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCB1c2VkIGluIHRoZSB2ZXJpZmllci5cbiogICBDaGFuZ2VzIHRvIGBtYXBfa3B0cl9tYXRjaF90eXBlYCByZWxhdGVkIHRvIE1FTVxcX1BFUkNQVSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggQlBGXFxfS1BUUlxcX1BFUkNQVS5cbiogICBOZXcgY2hlY2tzIGluIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGluY2x1ZGluZyBhIGNvbmRpdGlvbiB0aGF0IGxvb2tzIGF0IGFsbG9jYXRlZCBvYmplY3RzIGFuZCB0aGVpciBsaWZldGltZS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcyBzZWN0aW9uLCBhcyB0aGlzIGlzIHRoZSBzb3J0IG9mIHRoaW5nIHRoYXQncyBlYXN5IHRvIGdldCB3cm9uZyBhbmQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgYnVncy4gVGhpcyBpbnRyb2R1Y2VzIGNoZWNrcyBmb3Igd2hhdCBsb29rcyBsaWtlIG5ldyBsaWZldGltZSByZXN0cmljdGlvbnMuXG4qICAgVGhlIGBwcm9jZXNzX3NwaW5fbG9ja2AgZnVuY3Rpb24sIHdoaWNoIGhhcyB0aGUgdmVyaWZpZXIgaW50ZXJhY3Rpbmcgd2l0aCBub24tb3duaW5nIHJlZnMsIGFuZCBSQ1UgcHJvdGVjdGVkIHJlZnMuIEl0J3MgaW1wb3J0YW50IHRvIHNlZSBob3cgdGhlc2UgcmVmcyBhcmUgaW52YWxpZGF0ZWQgZm9yIGNvcnJlY3RuZXNzLlxuKiAgIEFuIGFkZGl0aW9uYWwgY2hlY2sgaW4gYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCB0aGF0IGV4cGxpY2l0bHkgZGVhbHMgd2l0aCBpbnZhbGlkYXRpbmcgTUVNXFxfUkNVIHJlZnMuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGFib3ZlIGNoYW5nZSwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBhdC5cbiogICBBbiB1cGRhdGUgdG8gYGNoZWNrX2tmdW5jX2FyZ3NgIHdoaWNoIG5vdyB0cmFja3MgJ2FyZ19vd25pbmdfcmVmJyBiYXNlZCBvbiB3aGV0aGVyIHdlIGhhdmUgYSBub24tb3duaW5nIHJlZiwgYW5kIGFuIGV4aXN0aW5nIHJlZmVyZW5jZS5cblxuVGhlIG1vZGlmaWNhdGlvbnMgc3BhbiB0aGUgdmVyaWZpZXIgbG9naWMgaXRzZWxmIGFuZCB0aGUgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgdmVyaWZpZXIsIHNvIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGZ1enppbmcgcnVsZXMsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSBcIldvcnRoRnV6emluZyA9IHRydWVcIi5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgdG8gZm9ybSBhIGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGVzZSBuZXcgZmVhdHVyZXMgb3IgdHJpZ2dlciB0aGVzZSB2ZXJpZmllciBwYXRocy4gTXkgbmV4dCBzdGVwIGlzIHRvIHVzZSB0b29scyBsaWtlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGVzIHRvIGlkZW50aWZ5IHNwZWNpZmljIHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCB0aGUgcmVsZXZhbnQgdmVyaWZpZXIgYmVoYXZpb3JzLiBJJ2xsIGZvY3VzIG9uIGNyYWZ0aW5nIGZ1enppbmcgaW5wdXRzIHRoYXQgc3BlY2lmaWNhbGx5IGV4ZXJjaXNlIHRoZSBuZXcgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGhlcmUsIGFuZCBhbHNvIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHBheSBjYXJlZnVsIGF0dGVudGlvbiB0byBtZW1vcnkgc2FmZXR5IGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjUyLjI1NDkxODY5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMwNzM1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXFxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXFx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjQ2OD1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3MS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDcyOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDczLWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzAzNj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM3LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDM4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDM5LVxcdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2Mi1cXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XFxua2VybmVsL2JwZi9jb3JlLmM6MzA2MzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2NC1cXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cXHUwMDNla2Z1bmNfYnRmX3RhYik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg1LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMzg2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzg3LVxcdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQyND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MjgtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQ1NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDU2LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0NTc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0NTgtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTIyOiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIzLVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTc2OT12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVxcdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTgwNzpcXHQgIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ1OjUyLjM2Nzk5NjUyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDQ5NzI2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIG1vZGlmaWNhdGlvbnMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZXhhbWluZTpcblxuMS4gIGBtYXBfa3B0cl9tYXRjaF90eXBlYDogSXRzIHJvbGUgaW4gdmVyaWZ5aW5nIGtwdHIgY29tcGF0aWJpbGl0eSBpcyBjcnVjaWFsLiBBbnkgY2hhbmdlcyBoZXJlIGNvdWxkIGhhdmUgYnJvYWQgaW1wbGljYXRpb25zIGZvciBtYXAgYWNjZXNzIGFuZCBrcHRyIGhhbmRsaW5nLCB3aGljaCBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkuXG4yLiAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYDogVGhpcyBpcyBvYnZpb3VzbHkga2V5IGZvciBCVEYtcmVsYXRlZCBwb2ludGVyIGNoZWNrcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hlY2tzIGhhdmUgYmVlbiByZWZpbmVkLCBhcyBCVEYgYWNjZXNzIGlzIGNyaXRpY2FsIGZvciBzYWZldHkuXG4zLiAgYHByb2Nlc3Nfc3Bpbl9sb2NrYDogU3BpbmxvY2tzIHdpdGhpbiBCUEYgY29udGV4dHMgYXJlIGEgY29tbW9uIHNvdXJjZSBvZiBjb250ZW50aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhcyBldm9sdmVkIGluIHRoZSBmYWNlIG9mIHRoZXNlIGNoYW5nZXMuXG40LiAgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYDogRW5zdXJpbmcgcHJvcGVyIFJDVSB1c2FnZSBpbiBCUEYgaXMgaW1wZXJhdGl2ZSBmb3IgbWVtb3J5IHNhZmV0eS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGhhcyBiZWVuIGFkYXB0ZWQuXG41LiAgYGNoZWNrX2tmdW5jX2FyZ3NgOiBJIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGhhdmUgYmVlbiBtb2RpZmllZCBmb3IgdGhpcyBrZnVuYywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IHJlc3RyaWN0aW9ucyBvciBlbmhhbmNlbWVudHMuXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYDogYHR5cGVfaXNfcHRyX2FsbG9jX29iamAsIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGVzZSBvdGhlciBmdW5jdGlvbnMuIEknbGwgY2hlY2sgaXRzIHVzYWdlLiBJdHMgYXBwbGljYXRpb24gY291bGQgZ2l2ZSBpbnNpZ2h0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NTo1NS40MTI5NzQxMDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczODU0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHlwZV9pc19wdHJfYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTkyOT1jb25zdCBjaGFyICpicGZfZGlhZ19yZWdfdHlwZV9wbGFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1Mi1cXHRcXHRcXHRyZXR1cm4gXFxcImEgYm9ycm93ZWQgYWxsb2NhdGVkIG9iamVjdCBwb2ludGVyXFxcIjtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6OTUzOlxcdFxcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoodHlwZSkpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTk1NC1cXHRcXHRcXHRyZXR1cm4gXFxcImFuIG93bmVkIGFsbG9jYXRlZCBvYmplY3QgcG9pbnRlclxcXCI7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MjA5OD1zdGF0aWMgY29uc3QgY2hhciAqZGlhZ19yZWdfc25hcHNob3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMTUxLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoyMTUyOlxcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmooc25hcHNob3QtXFx1MDAzZXR5cGUpKSB7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTIxNTMtXFx0XFx0aWYgKGJ0ZilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjg9c3RhdGljIHN0cnVjdCBidGZfcmVjb3JkICpyZWdfYnRmX3JlY29yZChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3NC1cXHRcXHRyZWMgPSByZWctXFx1MDAzZW1hcF9wdHItXFx1MDAzZXJlY29yZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzc1OlxcdH0gZWxzZSBpZiAodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cXHUwMDNldHlwZSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc2LVxcdFxcdG1ldGEgPSBidGZfZmluZF9zdHJ1Y3RfbWV0YShyZWctXFx1MDAzZWJ0ZiwgcmVnLVxcdTAwM2VidGZfaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU5NTg9c3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwMzUtXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYwMzY6XFx0XFx0aWYgKGF0eXBlICE9IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2ICF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDM3LVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwib25seSByZWFkIGlzIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzUwMT1zdGF0aWMgaW50IHByb2Nlc3Nfa3B0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTA5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTEwOlxcdGlmICh0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTExLVxcdFxcdHJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2MDY9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE4MC1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE4MTpcXHRcXHRcXHRpZiAoIXR5cGVfaXNfcHRyX2FsbG9jX29iaihyZWctXFx1MDAzZXR5cGUpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTgyLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY1NTg9c3RhdGljIHZvaWQgbWFya19wdHJfb3JfbnVsbF9yZWcoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU3MS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NzI6XFx0XFx0aWYgKCEodHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cXHUwMDNldHlwZSkgfHwgdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU3My1cXHRcXHQgICAgV0FSTl9PTl9PTkNFKCF0bnVtX2VxdWFsc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYsIDApKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDU6NTUuNDgwMzYzODI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0Njk1NjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFZlcmlmaWVyIEZ1bmN0aW9uIFNjb3BlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzY29wZSBvZiB0aGVzZSByZWNlbnRseSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhleSdyZSBzdGF0aWMgb3Igbm9uLXN0YXRpYywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gb3RoZXIgQlBGIHByb2dyYW1zLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdGF0aWMgbmF0dXJlIG9yIG90aGVyd2lzZSBvZiB0aGUgZm9sbG93aW5nOiBgbWFwX2twdHJfbWF0Y2hfdHlwZWAsIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGBwcm9jZXNzX3NwaW5fbG9ja2AsIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2AsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kLCBjcnVjaWFsbHksIGBicGZfY2hlY2tgLiBUaGUgbWFpbiB2ZXJpZmllciBlbnRyeSBwb2ludCwgYGJwZl9jaGVja2AsIHdhcnJhbnRzIGV4dHJhIGF0dGVudGlvbi4gSSBhbHNvIG5lZWQgdG8gYXNjZXJ0YWluIHRoZSBzdGF0aWMgc3RhdHVzIG9mIHRoZSBgYnBmX3ZlcmlmaWVyX2VudmAgZnVuY3Rpb24sIGFzIHRoYXQncyBvZnRlbiB0aWVkIHRvIHRoZSB2ZXJpZmljYXRpb24gY29udGV4dC4gS25vd2luZyB0aGlzIHdpbGwgZGlyZWN0bHkgaW5mb3JtIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWwgc3RydWN0dXJlIGlzIG9yZ2FuaXplZCBhbmQgaG93IGNoYW5nZXMgaW4gdGhlc2UgZnVuY3Rpb25zIGFmZmVjdCBleHRlcm5hbCBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDU6NTcuODI3MzIyOTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTY2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgYnBmX2NoZWNrXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDkzNz1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA1My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwNTQ6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDU1LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NTo1Ny44ODY4OTQyMTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY5ODE0MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBWZXJpZmllciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIG9jY3VycmluZyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBjb2RlLiBUaGUgaW5pdGlhbCBsaXN0IHBvaW50cyBtZSB0byBgYnBmX3ZlcmlmaWVyLmNgLCBhbmQgc3BlY2lmaWNhbGx5IHRoZXNlIHN5bWJvbHM6IGBtYXBfa3B0cl9tYXRjaF90eXBlYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYHByb2Nlc3Nfc3Bpbl9sb2NrYCwgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYWxzbyBgYnBmX2NoZWNrYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBJcyBgYnBmX2NoZWNrYCB0aGUgZXBpY2VudGVyLCBvciBhcmUgdGhlc2UgbGlzdGVkIGZ1bmN0aW9ucyB0aGUgc3BlY2lmaWMgdGFyZ2V0cz8gTXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBmdXp6aW5nLCBhbmQgc3l6a2FsbGVyIGluIHBhcnRpY3VsYXIsIHN1Z2dlc3RzIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIG9uIGBCUEZfUFJPR19MT0FEYCwgbWFraW5nIGl0IGEgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBzZWVpbmcgZGlyZWN0IG1vZGlmaWNhdGlvbi5cblxuVGhpcyBhbGlnbnMgd2l0aCBndWlkZWxpbmUgNDogXCJUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFNcIi4gU28sIGxldCdzIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqZGlyZWN0bHkqIGltcGxlbWVudCB0aGUgYWRkZWQgb3IgYWx0ZXJlZCBsb2dpYy4gR3VpZGVsaW5lIDQgYWxzbyB3YXJucyBhZ2FpbnN0IHViaXF1aXRvdXMgaG90LXBhdGhzLCB3aGljaCBpcyBhIGdvb2QgcmVtaW5kZXIuXG5cblRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWx0ZXJlZCBkaXJlY3RseSBhcmU6IGBjaGVja19rZnVuY19hcmdzYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYG1hcF9rcHRyX21hdGNoX3R5cGVgLCBgcHJvY2Vzc19zcGluX2xvY2tgLCBhbmQgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGFyZSB0aG9zZSBmaXZlIGZ1bmN0aW9ucyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSwgb3IgaXMgYGJwZl9jaGVja2AgYWxzbyBpbXBhY3RlZCBzaWduaWZpY2FudGx5PyBJdCBsb29rcyBsaWtlIHRob3NlIGZpdmUgZnVuY3Rpb25zLCBhbGwgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhcmUgdGhlIHByZWNpc2UgYXJlYXMgd2hlcmUgdGhlIHZlcmlmaWVyIGxvZ2ljIGhhcyBiZWVuIG1vZGlmaWVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblNvLCBJIHJlLWV4YW1pbmUgdGhlIGRpZmYgYW5kIHB1bGwgb3V0IHRoZSBmb2xsb3dpbmc6XG5cbjEuICBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGA6IHRoZSBmdW5jdGlvbiBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCBpcyBpbnZvbHZlZC5cbjIuICBga2VybmVsL2JwZi92ZXJpZmllci5jYDogdGhlIGxpc3RlZCBmaXZlIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCB0aGVpciBzcGVjaWZpYyBsaW5lIG51bWJlciByYW5nZXMgd2l0aGluIHRoZSBmaWxlLiBJIGFsc28gbm93IGhhdmUgdGhlIGNvcnJlY3QgY29udGV4dDpcbiAgICAqICAgYG1hcF9rcHRyX21hdGNoX3R5cGVgIChsaW5lcyA0NDg4LTQ0OTcpXG4gICAgKiAgIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgKGxpbmVzIDYwMzEtNjA0NylcbiAgICAqICAgYHByb2Nlc3Nfc3Bpbl9sb2NrYCAobGluZXMgNzQwOS03NDMyKVxuICAgICogICBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIChsaW5lcyA5NTEyLTk1MzUpXG4gICAgKiAgIGBjaGVja19rZnVuY19hcmdzYCAobGluZXMgMTMxNzEtMTMxOTIpXG5cbkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGJ1aWxkIGNvbnRleHQuIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MDMuNjU2NzExMjI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE4ODc5MDE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjowNC45NzU1OTkzMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0NTQ3NzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSwgZGVwZW5kZW5jaWVzLCBhbmQgaW1wbGljYXRpb25zLiBJJ2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGVxdWl2YWxlbnQgc2VhcmNoLCBtYXliZSByZWZpbmVkIHdpdGggYSBgZmluZGAgb3IgYGdpdCBncmVwYCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gbG9va2luZyBmb3IuIEknbSBleHBlY3RpbmcgdGhpcyBvcHRpb24gdG8gYmUgcHJldmFsZW50LCBnaXZlbiB0aGUgaW5jcmVhc2luZyBpbXBvcnRhbmNlIG9mIEJQRiBhbmQgc3lzdGVtIGNhbGxzIHdpdGhpbiB0aGUga2VybmVsLiBJIHdpbGwgbW9zdCBsaWtlbHkgdXNlIGEgc2VyaWVzIG9mIHF1ZXJpZXMuIEknbGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhpcyBpcyBoYW5kbGVkIGFjcm9zcyBhcmNoaXRlY3R1cmVzIGFuZCBrZXJuZWwgdmVyc2lvbnMg4oCTIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYW55IGFzc3VtcHRpb25zIGJhc2VkIG9uIGEgc2luZ2xlIHNlYXJjaC4gT25jZSBJIGhhdmUgdGhlIHJlc3VsdHMsIEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGFueSBjb250ZXh0LiBJJ20gbG9va2luZyBmb3IgdXNhZ2VzIGluIGBLY29uZmlnYCBmaWxlcywgYnV0IGFsc28gQyBjb2RlIHdoaWNoIHJlZmVyZW5jZXMgdGhlIG1hY3JvIG9yIHVzZXMgaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggc2VjdXJpdHkgZmVhdHVyZXMsIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBhbmQgb2YgY291cnNlIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBkZXZlbG9wIGEgdmlldyBvZiB0aGUgZWNvc3lzdGVtIGFyb3VuZCBgQlBGX1NZU0NBTExgIHRvIGZpZ3VyZSBvdXQgaXRzIGN1cnJlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MDcuNjIxMTA0MzQxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU3Mzk2Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjowOS44Nzg1MDU3MzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2NTc2NTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipCUEYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hhdCBCUEYgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2hhdCBtb2R1bGVzIGFyZSBhdmFpbGFibGUsIGFuZCBwb3RlbnRpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIExpbmUgMjUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBzZXR0aW5nIHVwIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuIEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyBzb21lIGRldGFpbHMgb24gd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHVzaW5nIEJQRiwgb3Igd2hhdCBhcmUgZGVwZW5kZW50IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjExLjc0NDI3NTcwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MTEuNzQ0Mzg2NzQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjg4NTIyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIEJURiBmb3IgQlBGIEZlYXR1cmUgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyBCUEYgZmVhdHVyZSBzZXQgYW5kIG5lZWQgdG8gYmUgdGhvcm91Z2guIEknbSBhbHJlYWR5IGxvb2tpbmcgYXQga3B0ciBoYW5kbGluZyDigJMgY2xlYXJseSBhIGNyaXRpY2FsIGFzcGVjdCDigJMgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjb25uZWN0aW9ucyB0byBCVEYgKEJQRiBUeXBlIEZvcm1hdCkuIEdpdmVuIHRoZSB3YXkgdGhlc2UgZmVhdHVyZXMgb2Z0ZW4gaW50ZXJhY3Qgd2l0aCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgQlRGIHRvIGluZm9ybSB0aG9zZSBpbnRlcmFjdGlvbnMsIGl0IG1ha2VzIHNlbnNlIHRvIGV4cGxpY2l0bHkgY29uZmlybSBvdXIgY292ZXJhZ2Ugb2YgYERFQlVHX0lORk9fQlRGYC4gSXQncyBhIGtleSBwaWVjZSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGVzZSBCUEYgZmVhdHVyZXMgYW5kIGhvdyB0aGV5IHBsYXkgd2l0aCB0aGUga2VybmVsLiBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ1OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6NDY6MTMuODEzMjQyNzgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkxOTkzNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9Mzc4PWNvbmZpZyBERUJVR19JTkZPX1NQTElUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXFxubGliL0tjb25maWcuZGVidWc6Mzk4OmNvbmZpZyBERUJVR19JTkZPX0JURlxcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTQxOT1jb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cXG5saWIvS2NvbmZpZy5kZWJ1Zzo0Mjg6Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjoxNi4xMDUyNDI3NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU0MTY1NTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgVmVyaWZpY2F0aW9uIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgZXNzZW50aWFscyBzdHJhaWdodC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgaXQncyB0aGUgYmVkcm9jayBmb3IgY29tcGlsaW5nIGB2ZXJpZmllci5vYCwgYW5kIHRoZSBNYWtlZmlsZSBpbiBga2VybmVsL2JwZmAgYmFja3MgdGhhdCB1cC4gVGhlbiwgYERFQlVHX0lORk9fQlRGYCBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBCVEYgc3VwcG9ydCBpbiBCUEYuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIEZvY3VzU3ltYm9sczsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBvaW50czpcbi0gICBgbWFwX2twdHJfbWF0Y2hfdHlwZWBcbi0gICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgXG4tICAgYHByb2Nlc3Nfc3Bpbl9sb2NrYFxuLSAgIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2Bcbi0gICBgY2hlY2tfa2Z1bmNfYXJnc2BcblxuT2theSwgdGhlIHBhdGNoIGlzIHF1aXRlIGludm9sdmVkLCB0b3VjaGluZyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhY3Jvc3MgdGhlIGJvYXJkLCBzbyBsZXQgbWUgYnJlYWsgaXQgZG93bi4gSXQgaGFzIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgdmVyaWZpY2F0aW9uIHN0ZXBzOlxuXG4xLiAgYHR5cGVfaXNfcHRyX2FsbG9jX29iamAgbm93IHNwZWNpZmljYWxseSBleGNsdWRlcyBgUFRSX1VOVFJVU1RFRGAgcG9pbnRlcnMgYXMgdmFsaWQgYWxsb2NhdGVkIG9iamVjdHMuXG4yLiAgYG1hcF9rcHRyX21hdGNoX3R5cGVgOiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIGBCUEZfS1BUUl9QRVJDUFVgIGZpZWxkcyBsaW5lIHVwIHdpdGggYE1FTV9QRVJDUFVgIHJlZ2lzdGVycy5cbjMuICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgOiBUaGlzIG9uZSBhbGxvd3MgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdHMgKGBicGZfbWF5X2ZhdWx0X29uX2RlcmVmYCkgdG8gYmUgcmVhZCBhZnRlciB0aGVpciBsaWZldGltZSBwcm90ZWN0aW9uIGhhcyBlbmRlZCwgd2l0aG91dCB0cmlnZ2VyaW5nIGEgYHZlcmlmaWVyX2J1Z2AuXG40LiAgYHByb2Nlc3Nfc3Bpbl9sb2NrYDogSXQncyBlbnN1cmluZyB0aGF0IHdlIGludmFsaWRhdGUgbm9uLW93bmluZyByZWZlcmVuY2VzICpiZWZvcmUqIGludmFsaWRhdGluZyBSQ1UgcHJvdGVjdGVkIHJlZmVyZW5jZXMuXG41LiAgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYDogSXQgY2xlYXJzIHRoZSBgTk9OX09XTl9SRUZgIGZsYWcgb24gUkNVLWRlbW90ZWQgcmVnaXN0ZXJzLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHJlZ2lzdGVyIHN0YXRlLlxuNi4gIGBjaGVja19rZnVuY19hcmdzYDogVGhpcyBpcyB0aGUgY3J1Y2lhbCBjaGVjayB0byBlbnN1cmUgdGhhdCBhIHJlZ2lzdGVyIGlzIGFjdHVhbGx5IHJlZmVyZW5jZWQgYmVmb3JlIHRyZWF0aW5nIGl0IGFzIGFuIG93bmluZyByZWZlcmVuY2UgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuXG5cblNpbmNlIHRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHRoZSBgYnBmKClgIHN5c2NhbGwgdGhyb3VnaCBgQlBGX1BST0dfTE9BRGAsIEknZCBuZWVkIHRvIGNvbnNpZGVyIGZ1enppbmcgdG8gaHVudCBmb3IgdmVyaWZpY2F0aW9uIGJ5cGFzc2VzLCBwcm9ibGVtcyBpbiBob3cgcmVnaXN0ZXIgc3RhdGUgaXMgdHJhY2tlZCwgb3IgdGhlIHBvdGVudGlhbCBmb3IgY3Jhc2hlcy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LCB0aGUgbG9naWMgc2VlbXMgc291bmQgYW5kIHRoZSBjaGFuZ2VzIGFyZSB3ZWxsLXVuZGVyc3Rvb2QuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NDUsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjIxLjY0NjkwMTkwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDgyNDYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFwX2twdHJfbWF0Y2hfdHlwZVwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInByb2Nlc3Nfc3Bpbl9sb2NrXCIsXG4gICAgXCJpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc1wiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIGFuZCBzYWZldHkgY2hlY2tzIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBhbmQgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIFBUUl9VTlRSVVNURUQgZmxhZ3MgZm9yIGFsbG9jYXRlZCBvYmplY3RzLCBCUEZfS1BUUl9QRVJDUFUgbWF0Y2hpbmcsIGZhdWx0LXRvbGVyYW50IEJURiBsb2FkcywgcmVmZXJlbmNlIGludmFsaWRhdGlvbiBvcmRlciBkdXJpbmcgc3BpbiB1bmxvY2sgLyBSQ1UgdW5sb2NrLCBhbmQgb3duaW5nIHJlZmVyZW5jZSBjaGVja3MgaW4gY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXBfa3B0cl9tYXRjaF90eXBlXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwicHJvY2Vzc19zcGluX2xvY2tcIixcbiAgICBcImludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgYW5kIHNhZmV0eSBjaGVja3MgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGFuZCBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgUFRSX1VOVFJVU1RFRCBmbGFncyBmb3IgYWxsb2NhdGVkIG9iamVjdHMsIEJQRl9LUFRSX1BFUkNQVSBtYXRjaGluZywgZmF1bHQtdG9sZXJhbnQgQlRGIGxvYWRzLCByZWZlcmVuY2UgaW52YWxpZGF0aW9uIG9yZGVyIGR1cmluZyBzcGluIHVubG9jayAvIFJDVSB1bmxvY2ssIGFuZCBvd25pbmcgcmVmZXJlbmNlIGNoZWNrcyBpbiBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjoyMS43Nzc3MzU1NzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTk5MjQyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzo0NjoyMS43Nzg0MTgzODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mjk5MjM3MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgcmVnYXJkaW5nIHJlZmVyZW5jZSB0cmFja2luZyAobm9uLW93bmluZyByZWZlcmVuY2VzLCBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMsIGFuZCBwZXItQ1BVIGtwdHJzKSBhbmQgdHlwZSB2YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGluIGEgd2F5IHRoYXQgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB2ZXJpZmllciB0cmFja2luZyBjb3VsZCBsZWFkIHRvIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2RhYWQ2ODNkNTMzNGRhNWZiYjQxYTRhYWUyODY5ZWNkOGUyMGI0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTc6NDU6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMTMzOWMyZjAyOGRiMC4uMzZiNjU3OTc4NzdkMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xMzgxLDcgKzEzODEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3R5cGVfaGFzX3Vuc2FmZV9tb2RpZmllcnModTMyIHR5cGUpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfcHRyX2FsbG9jX29iaih1MzIgdHlwZSlcbiB7XG4tXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2IHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgTUVNX0FMTE9DO1xuK1x0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgTUVNX0FMTE9DIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICEodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfbm9uX293bmluZ19yZWYodTMyIHR5cGUpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkN2RkMGJlZmJkMTBlLi41NmExMGY3OWY5YTgxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC00NDg4LDYgKzQ0ODgsMTMgQEAgc3RhdGljIGludCBtYXBfa3B0cl9tYXRjaF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgfnBlcm1fZmxhZ3MpXG4gXHRcdGdvdG8gYmFkX3R5cGU7XG4gXG4rXHQvKlxuK1x0ICogQSBCUEZfS1BUUl9QRVJDUFUgZmllbGQgaXMgcmVhZCBiYWNrIGFzIE1FTV9QRVJDUFUsIHNvIHRoZSB2YWx1ZVxuK1x0ICogc3RvcmVkIGluIGl0IG11c3QgY2FycnkgdGhlIHNhbWUgZmxhZy5cbitcdCAqL1xuK1x0aWYgKChrcHRyX2ZpZWxkLVx1MDAzZXR5cGUgPT0gQlBGX0tQVFJfUEVSQ1BVKSAhPSAhIShyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1BFUkNQVSkpXG4rXHRcdGdvdG8gYmFkX3R5cGU7XG4rXG4gXHQvKiBXZSBuZWVkIHRvIHZlcmlmeSByZWctXHUwMDNldHlwZSBhbmQgcmVnLVx1MDAzZWJ0ZiwgYmVmb3JlIGFjY2Vzc2luZyByZWctXHUwMDNlYnRmICovXG4gXHRyZWdfbmFtZSA9IGJ0Zl90eXBlX25hbWUocmVnLVx1MDAzZWJ0ZiwgcmVnLVx1MDAzZWJ0Zl9pZCk7XG4gXG5AQCAtNjAzMSw3ICs2MDM4LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuIFxuLVx0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbitcdFx0LypcbitcdFx0ICogQSBmYXVsdC1wcm9uZSBhbGxvY2F0ZWQgb2JqZWN0IG1heSBzdGlsbCBiZSByZWFkIHRocm91Z2ggYVxuK1x0XHQgKiBCUEZfUFJPQkVfTUVNIGxvYWQgYWZ0ZXIgaXRzIGxpZmV0aW1lIHByb3RlY3Rpb24gZW5kcy4gV3JpdGVzXG4rXHRcdCAqIHRocm91Z2ggc3VjaCBwb2ludGVycyB3ZXJlIHJlamVjdGVkIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiAhYnBmX21heV9mYXVsdF9vbl9kZXJlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwiYWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkXCIpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTc0MDksMTAgKzc0MjIsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxuIFx0XHRcdFx0bG9jayk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0LypcbitcdFx0ICogSW52YWxpZGF0ZSBub24tb3duaW5nIHJlZnMgYmVmb3JlIFJDVSBkZW1vdGlvbiBjbGVhcnMgdGhlaXJcbitcdFx0ICogTk9OX09XTl9SRUYgZmxhZy5cbitcdFx0ICovXG4rXHRcdGludmFsaWRhdGVfbm9uX293bmluZ19yZWZzKGVudik7XG4rXG4gXHRcdGlmICghaW5fcmN1X2NzKGVudikpXG4gXHRcdFx0aW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoZW52KTtcbi1cbi1cdFx0aW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoZW52KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NTEyLDcgKzk1MjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayhlbnYtXHUwMDNlY3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHtcbiBcdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSB7XG4gXHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xuLVx0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xuK1x0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwgfCBOT05fT1dOX1JFRik7XG4gXHRcdFx0cmVnLVx1MDAzZXR5cGUgfD0gUFRSX1VOVFJVU1RFRDtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXHRcdH1cbkBAIC0xMzE3MSw3ICsxMzE4OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRcdFx0ICAgICAgYnBmX2RpYWdfcmVnX3R5cGVfcGxhaW4oZW52LCByZWctXHUwMDNldHlwZSkpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxuIFx0XHRcdFx0bWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XG4gXG4gXHRcdFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcGVyY3B1X2FsbG9jX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXG5pbmRleCAwODM3OWMzYjZhMDM4Li4zNzAxZjRlYTU4Yzc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3BlcmNwdV9hbGxvY19mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wZXJjcHVfYWxsb2NfZmFpbC5jXG5AQCAtMzMsNiArMzMsMjAgQEAgc3RydWN0IHtcbiBcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGVsZW0pO1xuIH0gYXJyYXkgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSB7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19wZXJjcHVfa3B0ciAqdGFzaztcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2VybmVsX3BlcmNwdV9lbGVtKTtcbit9IGtlcm5lbF9wZXJjcHVfYXJyYXkgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19mcm9tX3BpZChzMzIgcGlkKSBfX2tzeW07XG4rdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK1xuIGxvbmcgcmV0O1xuIFxuIFNFQyhcIj9mZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuQEAgLTEzNyw2ICsxNTEsNTEgQEAgaW50IEJQRl9QUk9HKHRlc3RfYXJyYXlfbWFwXzUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP3N5c2NhbGxcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIGtwdHIgYWNjZXNzLCBSMiB0eXBlPXRydXN0ZWRfcHRyXyBleHBlY3RlZD1wdHJfdGFza19zdHJ1Y3RcIilcbitpbnQgcmVqZWN0X2tlcm5lbF9wdHJfaW50b19wZXJjcHVfa3B0cih2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGtlcm5lbF9wZXJjcHVfZWxlbSAqZTtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm9sZDtcbitcdGludCBpbmRleCA9IDA7XG4rXG4rXHRlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZrZXJuZWxfcGVyY3B1X2FycmF5LCBcdTAwMjZpbmRleCk7XG4rXHRpZiAoIWUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cCA9IGJwZl90YXNrX2Zyb21fcGlkKDEpO1xuK1x0aWYgKCFwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2ZS1cdTAwM2V0YXNrLCBwKTtcbitcdGlmIChvbGQpXG4rXHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQga3B0ciBhY2Nlc3MsIFIyIHR5cGU9cHRyXyBleHBlY3RlZD1wdHJfdmFsX3RcIilcbitpbnQgQlBGX1BST0cocmVqZWN0X3BsYWluX2FsbG9jX2ludG9fcGVyY3B1X2twdHIpXG4re1xuK1x0c3RydWN0IHZhbF90IF9fcGVyY3B1X2twdHIgKm9sZDtcbitcdHN0cnVjdCB2YWxfdCAqcDtcbitcdHN0cnVjdCBlbGVtICplO1xuK1x0aW50IGluZGV4ID0gMDtcbitcbitcdGUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmFycmF5LCBcdTAwMjZpbmRleCk7XG4rXHRpZiAoIWUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cCA9IGJwZl9vYmpfbmV3KHN0cnVjdCB2YWxfdCk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZlLVx1MDAzZXBjLCBwKTtcbitcdGlmIChvbGQpXG4rXHRcdGJwZl9wZXJjcHVfb2JqX2Ryb3Aob2xkKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/ZmVudHJ5LnMvYnBmX2ZlbnRyeV90ZXN0MVwiKVxuIF9fZmFpbHVyZSBfX21zZyhcImJwZl9wZXJjcHVfb2JqX25ldyB0eXBlIElEIGFyZ3VtZW50IG11c3QgYmUgb2YgYSBzdHJ1Y3Qgb2Ygc2NhbGFyc1wiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2FycmF5X21hcF82KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVhZF9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlYWRfbG9jay5jXG5pbmRleCAzMWQ0MDgxYzNhOWZkLi5jZGIyNTVhZGRiYzMwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWFkX2xvY2suY1xuQEAgLTU5Miw5ICs1OTIsOSBAQCBpbnQgbm9uX293bl9yZWZfdW50cnVzdGVkX2xkKHZvaWQgKmN0eClcbiBcdH1cbiBcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiBcdC8qXG4tXHQgKiBUaGUgdW5sb2NrIGxlYXZlcyBub2RlIGFzIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBQVFJfVU5UUlVTVEVEXG4tXHQgKiB8IE5PTl9PV05fUkVGLCBhbmQgdGhlIGxvYWQgYmVsb3cgaGFzIHRvIGdldCB0aGUgQlBGX1BST0JFX01FTVxuLVx0ICogcmV3cml0ZSBmb3IgaXQsIG90aGVyd2lzZSBhIGJhZCBhZGRyZXNzIHBhbmljcyB0aGUga2VybmVsLlxuK1x0ICogVGhlIHVubG9jayBsZWF2ZXMgbm9kZSBhcyBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgUFRSX1VOVFJVU1RFRCxcbitcdCAqIGFuZCB0aGUgbG9hZCBiZWxvdyBoYXMgdG8gZ2V0IHRoZSBCUEZfUFJPQkVfTUVNIHJld3JpdGUgZm9yIGl0LFxuK1x0ICogb3RoZXJ3aXNlIGEgYmFkIGFkZHJlc3MgcGFuaWNzIHRoZSBrZXJuZWwuXG4gXHQgKi9cbiBcdG5vbl9vd25fcmVmX2tleSA9IG5vZGUtXHUwMDNla2V5O1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5jYWUwMGY3YjBhMjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHtcbiBcdHN0cnVjdCBub2RlX2RhdGEgX19rcHRyICpub2RlO1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4gXHRfX3R5cGUoa2V5LCBpbnQpO1xuQEAgLTMwLDYgKzM5LDEzIEBAIHN0cnVjdCB7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCIubWFwc1wiKTtcbitcbiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHtcbiBcdGxvbmcga2V5O1xuIFx0bG9uZyBkYXRhO1xuQEAgLTgzMiw2ICs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJlZmNvdW50X2FjcXVpcmVfb3duaW5nX2lucHV0X25vX251bGxfY2hlY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuK1xuK1x0biA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpO1xuK1x0aWYgKCFuKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcdGJwZl9vYmpfZHJvcChuKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fc3VjY2Vzc1xuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfbnVsbF9jaGVja2VkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW4pIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGlmICghbSlcbitcdFx0cmV0dXJuIDM7XG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KVxuIHtcbiBcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9ub2RlcywgXHUwMDI2aWR4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCBlYWFlZDA4NTlmOTQ2Li4zMzhlNDM4MjJmZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5AQCAtMTksNiArMTksMjYgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbitzdHJ1Y3QgcmN1X2dyYXBoX25vZGUge1xuK1x0c3RydWN0IGJwZl9yYl9ub2RlIG5vZGU7XG4rXHRsb25nIGRhdGE7XG4rfTtcbitcbitzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKmp1c3RfaGVyZV9iZWNhdXNlX2J0Zl9idWc7XG4rXG4rc3RydWN0IG1hcF92YWx1ZV9yY3VfZ3JhcGgge1xuK1x0c3RydWN0IHJjdV9ncmFwaF9ub2RlIF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yNyw2ICs0NywyMiBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdsb2NrO1xuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTtcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcbitwcml2YXRlKEMpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdyYXBoX2xvY2s7XG4rcHJpdmF0ZShDKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3JhcGhfcm9vdCBfX2NvbnRhaW5zKHJjdV9ncmFwaF9ub2RlLCBub2RlKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yY3VfZ3JhcGggU0VDKFwiLm1hcHNcIik7XG4gXG4gc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiB7XG5AQCAtODksNiArMTI1LDEyMCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbm9uX29iamVjdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUoY3R4KSAhPSBOVUxMO1xuIH1cbiBcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdC8qIEZvcmNlIENsYW5nIHRvIGVtaXQgY29tcGxldGUgQlRGIGZvciBzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5LiAqL1xuK1x0dG1wID0gYnBmX29ial9uZXcodHlwZW9mKCp0bXApKTtcbitcdGlmICghdG1wKVxuK1x0XHRyZXR1cm4gMztcbitcdGJwZl9vYmpfZHJvcCh0bXApO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3N5c2NhbGxcIilcbitfX2ZhaWx1cmVcbitfX21zZyhcImJwZl9yYnRyZWVfcmVtb3ZlIGNhbiBvbmx5IHRha2Ugbm9uLW93bmluZyBvciByZWZjb3VudGVkIFwiXG4rICAgICAgXCJicGZfcmJfbm9kZSBwb2ludGVyXCIpXG4rbG9uZyByYnRyZWVfcmVtb3ZlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmN1X2dyYXBoICptYXB2YWw7XG4rXHRzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7XG4rXHRzdHJ1Y3QgcmN1X2dyYXBoX25vZGUgKm5vZGU7XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yY3VfZ3JhcGgsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFub2RlKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuK1x0cmJfbm9kZSA9IGJwZl9yYnRyZWVfcmVtb3ZlKFx1MDAyNmdyYXBoX3Jvb3QsIFx1MDAyNm5vZGUtXHUwMDNlbm9kZSk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXHRpZiAocmJfbm9kZSlcbitcdFx0YnBmX29ial9kcm9wKGNvbnRhaW5lcl9vZihyYl9ub2RlLCBzdHJ1Y3QgcmN1X2dyYXBoX25vZGUsIG5vZGUpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/c3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbm9kZSwgKnJlZjtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0bm9kZSA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFub2RlKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShub2RlKTtcbitcdGlmIChyZWYpXG4rXHRcdGJwZl9vYmpfZHJvcChyZWYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj9zeXNjYWxsXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4rbG9uZyBncmFwaF9rcHRyX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JjdV9ncmFwaCAqbWFwdmFsO1xuK1x0c3RydWN0IHJjdV9ncmFwaF9ub2RlICpub2RlO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmN1X2dyYXBoLCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3NwaW5fbG9jayhcdTAwMjZncmFwaF9sb2NrKTtcbitcdG5vZGUgPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbm9kZSkge1xuK1x0XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z3JhcGhfbG9jayk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmdyYXBoX2xvY2spO1xuK1xuK1x0cmV0dXJuIG5vZGUtXHUwMDNlZGF0YTtcbit9XG4rXG4gU0VDKFwiP3RjXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cIilcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjIxLjc3ODQxOTYyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjk5MjE1OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIHNldmVyYWwgc3VidGxlIGJ1dCBjcml0aWNhbCBpc3N1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSBhcm91bmQgcmVmZXJlbmNlIHRyYWNraW5nLCBtZW1vcnkgc2FmZXR5LCBhbmQgdHlwZSBjb25zaXN0ZW5jeS5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcywgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIGEgcmVmaW5lbWVudCBvZiBgdHlwZV9pc19wdHJfYWxsb2Nfb2JqYCwgd2l0aCBhbiBleHBsaWNpdCBleGNsdXNpb24gb2YgYFBUUl9VTlRSVVNURURgLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHVudHJ1c3RlZCBwb2ludGVycyBhcyB2YWxpZCBmb3IgYWxsb2NhdGlvbiB0cmFja2luZy4gRm9sbG93aW5nIHRoaXMsIHRoZSBhZGRpdGlvbiB0byBgbWFwX2twdHJfbWF0Y2hfdHlwZWAgZW5zdXJlcyBjb25zaXN0ZW5jeSBiZXR3ZWVuIGBCUEZfS1BUUl9QRVJDUFVgIGZpZWxkcyBhbmQgdGhlIGBNRU1fUEVSQ1BVYCBmbGFnLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIHR5cGUgY29uZnVzaW9uIGR1cmluZyBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy5cblxuVGhlIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgbW9kaWZpY2F0aW9uIGlzIGFsc28gaW50ZXJlc3RpbmcuIFdlJ3JlIG5vdyBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsbHkgZmF1bHQtcHJvbmUgYWxsb2NhdGVkIG9iamVjdHMgYnkgY2hlY2tpbmcgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVx1MDAzZXR5cGUpYCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpYCBpbiBgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgYSBnb29kIG9wdGltaXphdGlvbi4gSXQncyBhIGtleSBkZWZlbnNlIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhZnRlciB0aGUgbGlmZXRpbWUgcHJvdGVjdGlvbiBlbmRzLlxuXG5GdXJ0aGVybW9yZSwgY2hhbmdlcyB0byBgcHJvY2Vzc19zcGluX2xvY2tgIGFuZCBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIHByb3ZpZGUgaW1wcm92ZW1lbnRzIHRvIGhhbmRsaW5nIG5vbi1vd25pbmcgcmVmZXJlbmNlcyBhbmQgUkNVLXByb3RlY3RlZCBwb2ludGVycywgY29ycmVjdGluZyB0aGUgaW52YWxpZGF0aW9uIG9yZGVyIGFuZCBjbGVhcmluZyBgTk9OX09XTl9SRUZgIGFwcHJvcHJpYXRlbHkgZHVyaW5nIFJDVSBkZW1vdGlvbiB0byBhdm9pZCBwb3NzaWJsZSB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuXG5JbiBlc3NlbmNlLCB0aGlzIHBhdGNoIHN0cmVuZ3RoZW5zIHRoZSBCUEYgdmVyaWZpZXIncyBhYmlsaXR5IHRvIGVuZm9yY2UgbWVtb3J5IHNhZmV0eSBieSBpbXByb3ZpbmcgcG9pbnRlciB0eXBlIHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZywgcHJldmVudGluZyBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUuXG5cbkkndmUgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBjaGFuZ2VzIHRvIGRldGVybWluZSBpZiBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlIGNvcnJ1cHRpb24sIG9yIGluZm9ybWF0aW9uIGxlYWtzIG1pZ2h0IG9jY3VyLiBJIHNlZSBubyBldmlkZW5jZSBvZiB0aGVzZSBpc3N1ZXMuIEkgY2hlY2tlZCBmb3IgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzLCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJJ20gc2F0aXNmaWVkIHRoYXQgbm9uZSBvZiB0aGVzZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBwcmVzZW50LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIEknZCBzYXkgdGhhdCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhcyB0aGlzIHBhdGNoIHByaW1hcmlseSBkZWFscyB3aXRoIHN0YXRlIHRyYW5zaXRpb25zIGFuZCB2YWxpZGF0aW9uIHJ1bGVzIHdpdGhpbiB0aGUgdmVyaWZpZXIsIGFuZCB0aGVyZSBhcmUgbm8gbmV3IGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UuIFN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBzeXprYWxsZXIgY2hlY2tzLCBhbG9uZyB3aXRoIEtBU0FOLCB3aWxsIGRldGVjdCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gVGhpcyByZWluZm9yY2VzIG15IGNvbmZpZGVuY2UgaW4gdGhlIHBhdGNoJ3Mgc2FmZXR5LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjksIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjQ2OjI5LjA3NzYzOTMzMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIHJlZ2FyZGluZyByZWZlcmVuY2UgdHJhY2tpbmcgKG5vbi1vd25pbmcgcmVmZXJlbmNlcywgUkNVLXByb3RlY3RlZCByZWZlcmVuY2VzLCBhbmQgcGVyLUNQVSBrcHRycykgYW5kIHR5cGUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBpbiBhIHdheSB0aGF0IHdvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdmVyaWZpZXIgdHJhY2tpbmcgY291bGQgbGVhZCB0byBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyksIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyByZWdhcmRpbmcgcmVmZXJlbmNlIHRyYWNraW5nIChub24tb3duaW5nIHJlZmVyZW5jZXMsIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlcywgYW5kIHBlci1DUFUga3B0cnMpIGFuZCB0eXBlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHZlcmlmaWVyIHRyYWNraW5nIGNvdWxkIGxlYWQgdG8gbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsdvbq[1] Phase: Succeeded StartedAt: 2026-09-05 17:46:42 +0000 UTC FinishedAt: 2026-09-05 17:46:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 17:46:42 +0000 UTC FinishedAt: 2026-09-05 17:46:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2] Phase: Succeeded StartedAt: 2026-09-05 17:46:42 +0000 UTC FinishedAt: 2026-09-05 21:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 17:46:42 +0000 UTC FinishedAt: 2026-09-05 21:28:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 17:46:42 +0000 UTC FinishedAt: 2026-09-05 17:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 17:46:42 +0000 UTC FinishedAt: 2026-09-05 17:46:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowsdvbq/series-workflowsdvbq-convert-artifact-1978115475/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 17:46:54 +0000 UTC FinishedAt: 2026-09-05 18:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 17:46:54 +0000 UTC FinishedAt: 2026-09-05 18:03:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b1792eba-3674-4da0-99bc-58e6b3c84d05,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-workflowsdvbq/series-workflowsdvbq-convert-artifact-1978115475/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": "4b1aac7c-e275-49d1-bbf8-949c11f6c611", "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-workflowsdvbq/series-workflowsdvbq-build-action-1127989953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 17:46:54 +0000 UTC FinishedAt: 2026-09-05 18:03:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b1792eba-3674-4da0-99bc-58e6b3c84d05,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-workflowsdvbq/series-workflowsdvbq-convert-artifact-1978115475/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": "4b1aac7c-e275-49d1-bbf8-949c11f6c611", "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-workflowsdvbq/series-workflowsdvbq-build-action-1127989953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 18:03:53 +0000 UTC FinishedAt: 2026-09-05 18:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 18:03:53 +0000 UTC FinishedAt: 2026-09-05 18:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 18:03:53 +0000 UTC FinishedAt: 2026-09-05 18:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 18:03:53 +0000 UTC FinishedAt: 2026-09-05 18:03:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowsdvbq/series-workflowsdvbq-convert-artifact-3344818058/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 18:04:03 +0000 UTC FinishedAt: 2026-09-05 18:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 18:04:03 +0000 UTC FinishedAt: 2026-09-05 18:06:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b1aac7c-e275-49d1-bbf8-949c11f6c611,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-workflowsdvbq/series-workflowsdvbq-build-action-1127989953/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-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 18:06:16 +0000 UTC FinishedAt: 2026-09-05 18:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 18:06:16 +0000 UTC FinishedAt: 2026-09-05 18:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 18:06:16 +0000 UTC FinishedAt: 2026-09-05 18:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 18:06:16 +0000 UTC FinishedAt: 2026-09-05 18:23:37 +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:*b1792eba-3674-4da0-99bc-58e6b3c84d05,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-workflowsdvbq/series-workflowsdvbq-convert-artifact-3344818058/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": "6ad69b44-ef92-46ce-83d5-796c2f305780", "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-workflowsdvbq/series-workflowsdvbq-build-action-3533512110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 18:06:16 +0000 UTC FinishedAt: 2026-09-05 18:23:27 +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:*b1792eba-3674-4da0-99bc-58e6b3c84d05,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-workflowsdvbq/series-workflowsdvbq-convert-artifact-3344818058/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": "6ad69b44-ef92-46ce-83d5-796c2f305780", "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-workflowsdvbq/series-workflowsdvbq-build-action-3533512110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 18:23:37 +0000 UTC FinishedAt: 2026-09-05 18:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 18:23:37 +0000 UTC FinishedAt: 2026-09-05 18:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 18:23:37 +0000 UTC FinishedAt: 2026-09-05 18:25:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 18:23:37 +0000 UTC FinishedAt: 2026-09-05 18:25:43 +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:*6ad69b44-ef92-46ce-83d5-796c2f305780,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-workflowsdvbq/series-workflowsdvbq-build-action-3533512110/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-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 18:25:52 +0000 UTC FinishedAt: 2026-09-05 21:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 18:25:52 +0000 UTC FinishedAt: 2026-09-05 21:28:36 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"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:*4b1aac7c-e275-49d1-bbf8-949c11f6c611,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ad69b44-ef92-46ce-83d5-796c2f305780,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-workflowsdvbq/series-workflowsdvbq-build-action-1127989953/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-workflowsdvbq/series-workflowsdvbq-build-action-3533512110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 18:25:52 +0000 UTC FinishedAt: 2026-09-05 18:26:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 18:25:52 +0000 UTC FinishedAt: 2026-09-05 18:25:57 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"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-workflowsdvbq/series-workflowsdvbq-convert-artifact-1900993567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 18:25:52 +0000 UTC FinishedAt: 2026-09-05 18:25:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 18:25:52 +0000 UTC FinishedAt: 2026-09-05 18:25:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 18:25:52 +0000 UTC FinishedAt: 2026-09-05 18:25:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 18:26:02 +0000 UTC FinishedAt: 2026-09-05 21:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsdvbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["map_kptr_match_type","check_ptr_to_btf_access","process_spin_lock","invalidate_rcu_protected_refs","check_kfunc_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"254c881fe0554c5efb16d355c273702a27a32a20","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"f418c9f0-cd3d-45de-989d-ce5118e2bd2c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 18:26:02 +0000 UTC FinishedAt: 2026-09-05 21:28:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b1aac7c-e275-49d1-bbf8-949c11f6c611,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ad69b44-ef92-46ce-83d5-796c2f305780,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-workflowsdvbq/series-workflowsdvbq-build-action-1127989953/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-workflowsdvbq/series-workflowsdvbq-build-action-3533512110/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-workflowsdvbq/series-workflowsdvbq-convert-artifact-1900993567/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,}