Name: series-workflowjlcv9 Phase: Succeeded StartedAt: 2026-09-06 11:21:14 +0000 UTC FinishedAt: 2026-09-06 15:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[0] Phase: Succeeded StartedAt: 2026-09-06 11:21:14 +0000 UTC FinishedAt: 2026-09-06 11:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 11:21:14 +0000 UTC FinishedAt: 2026-09-06 11:24:36 +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": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "17dd08c4-341a-490c-a2c5-54eed0993dd8" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check_cfg", "push_insn", "bpf_patch_insn_data", "verifier_remove_insns", "check_pkt_ptr_ids", "regsafe", "bpf_is_state_visited", "map_set_for_each_callback_args", "set_timer_callback_state", "set_task_work_schedule_callback_state" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrX2NmZyYjMzQ7LAogICAgJiMzNDtwdXNoX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXJpZmllcl9yZW1vdmVfaW5zbnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfcGt0X3B0cl9pZHMmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgQ0ZHIGFuYWx5c2lzIGluIHNldmVyYWwgYXJlYXM6XG4xLiBBZGRzIHBhY2tldCBwb2ludGVyIGRpc3BsYWNlbWVudCB0cmFja2luZyBhY3Jvc3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAodXNpbmcgYGNoZWNrX3BrdF9wdHJfaWRzYCBhbmQgaW5pdGlhbGl6aW5nIGBwa3RfcHRyX2RlbHRhX3NldGAgaW4gYGNoZWNrX2lkc2ApLlxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxuMy4gQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGApIHRvIHByZXZlbnQgbm9uLWtpbGxhYmxlIGxvb3BzIGR1cmluZyBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiBwYXRjaGluZy9yZW1vdmFsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cbjQuIEVuc3VyZXMgZGlzdGluY3QgcmVnaXN0ZXIgSURzIGZvciBjYWxsYmFjayBtYXAgdmFsdWVzIHRoYXQgbWF5IHBvaW50IHRvIHNwaW4gbG9ja3MgdW5sZXNzIHRoZSBtYXAgaGFzIHN0YXRpYyBpZGVudGl0eSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS4gQWxsIHN0cnVjdCBmaWVsZHMgYWRkZWQgKGBwa3RfcHRyX2RlbHRhYCwgYHBrdF9wdHJfZGVsdGFfc2V0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHZlcmlmaWVyIGxvZ2ljLCBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYW5kIHNpZ25hbC1oYW5kbGluZyBpbXByb3ZlbWVudHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBleGVjdXRpb24gcGF0aHMsIGluY2x1ZGluZyBjb250cm9sIGZsb3cgZ3JhcGggKENGRykgc3VicHJvZ3JhbSBib3VuZGFyeSBjaGVja3MsIHNpZ25hbC1hd2FyZSBpbnN0cnVjdGlvbiByZXdyaXRpbmcvcmVtb3ZhbCBwYXNzZXMsIHBhY2tldCBwb2ludGVyIHN0YXRlIGVxdWl2YWxlbmNlIGNvbXBhcmlzb24gKHJlZ3NhZmUpLCBhbmQgbG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgY2FsbGJhY2sgYXJndW1lbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCBkaXJlY3RseSBhZmZlY3QgdmVyaWZpY2F0aW9uIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW52YXJpYW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyZWMyYTM4ZTk4M2JhMDAyNDMxZmZiNWJiMTc3MDdjNzM2MGRjZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjIzOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuJiM0MztcdHMzMiBwa3RfcHRyX2RlbHRhO1xuJiM0MztcdGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2lkbWFwIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggODQyYzdkMWVhYmNjYy4uZTNjOTA0MzI4ZWRlMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC0xMDIsNiAmIzQzOzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICYjNDM7MTIyLDI2IEBAIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuJiM0MztcdCAqIHN1YnByb2dyYW0gYm91bmRhcnksIGJ1dCBydW5zIGJlZm9yZSBDTy1SRSByZWxvY2F0aW9ucyBjYW4gcmV3cml0ZSBhblxuJiM0MztcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbiYjNDM7XHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbiYjNDM7XHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbiYjNDM7XHRcdGlmICh3IFx1MDAzYyBzdWJwcm9nLVx1MDAzZXN0YXJ0IHx8IHcgXHUwMDNlPSAoc3VicHJvZyAmIzQzOyAxKS1cdTAwM2VzdGFydCkge1xuJiM0MztcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCYjMzQ7JWQ6IFwmIzM0OywgdCk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuICVkIHRvICVkXFxuXCYjMzQ7LCB0LCB3KTtcbiYjNDM7XHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4mIzQzO1x0XHRcdFx0ZW52LCB0LCBcJiMzNDtmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDtJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHQsIHcpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZGlzYXNtLmhcJiMzNDtcbiBcbkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbiYjNDM7ICogTyhwcm9nLVx1MDAzZWxlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlc1xuJiM0MzsgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuJiM0MztcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gJiM0MzsgbGVuIC0gMSxcbkBAIC01MjMsNiAmIzQzOzU0MCw5IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuIFx0aWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgpKVxuIFx0XHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcbiBcbkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgJiM0MzszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4mIzQzO1x0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO1xuIFx0XHRpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuJiM0MztcdHM2NCBkZWx0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19pZHMob2xkLVx1MDAzZWlkLCBjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIW9sZC1cdTAwM2VpZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXG4mIzQzO1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbiYjNDM7XHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4mIzQzO1x0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4mIzQzO1x0aWYgKGRlbHRhIFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFx1MDAzZSBTMzJfTUFYKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZG1hcC1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobWFwW2ldLm9sZCAhPSBvbGQtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDb21wYXJlIHNjYWxhciByZWdpc3RlciBJRHMgZm9yIHN0YXRlIGVxdWl2YWxlbmNlLlxuICAqXG5AQCAtNjMyLDggJiM0Mzs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4mIzQzO1x0XHRpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdC8qIG5ldyB2YWwgbXVzdCBzYXRpc2Z5IG9sZCB2YWwga25vd2xlZGdlICovXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAxYzMwMzlmM2ZjMzIzLi5iMDg1MDE3MzRkZGZhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC00NDcsNiAmIzQzOzQ0NywxMSBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIHR5cGVfaXNfcmRvbmx5X21lbSh1MzIgdHlwZSlcbiB7XG4gXHRyZXR1cm4gdHlwZSBcdTAwMjYgTUVNX1JET05MWTtcbkBAIC0xMDAzNSw2ICYjNDM7MTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRfX21hcmtfcmVnX2tub3duX3plcm8oXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyKSlcbiYjNDM7XHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqL1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSA9IGNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfM107XG5AQCAtMTAxMzEsNiAmIzQzOzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdF9fbWFya19yZWdfa25vd25femVybyhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xuJiM0MztcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4mIzQzO1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuQEAgLTEwMjQ5LDYgJiM0MzsxMDI2MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyKSlcbiYjNDM7XHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHVudXNlZCAqL1xuIFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5AQCAtMTQsNiAmIzQzOzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuJiM0MztzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4mIzQzO1x0XHRcdFx0ICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4mIzQzO1x0XHRCUEZfQ0FMTF9SRUwoMiksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xuJiM0MztcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbiYjNDM7XHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4mIzQzO1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4mIzQzO1x0XHQudHlwZV9pZCA9IGVudW1faWQsXG4mIzQzO1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbiYjNDM7XHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuJiM0MztcdFx0Lmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksXG4mIzQzO1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4mIzQzO1x0XHQubGljZW5zZSA9IChfX3U2NClcJiMzNDtHUExcJiMzNDssXG4mIzQzO1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4mIzQzO1x0XHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcbiYjNDM7XHRcdC5sb2dfbGV2ZWwgPSAxLFxuJiM0MztcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXG4mIzQzO1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAocmVsb2NhdGUpIHtcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX2NudCA9IDE7XG4mIzQzO1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuJiM0MztcdH1cbiYjNDM7XHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4mIzQzO1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB2b2lkICpyYXdfYnRmO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4mIzQzO1x0X191MzIgcmF3X2J0Zl9zaXplO1xuJiM0MztcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4mIzQzO1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuJiM0MztcbiYjNDM7XHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9uZXdfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGludF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwmIzM0O2ludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgXCYjMzQ7YWRkX2ludFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCYjMzQ7YWRkX2Z1bmNfcHJvdG9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdG1haW5faWQgPSBidGZfX2FkZF9mdW5jKGJ0ZiwgXCYjMzQ7bWFpbl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QobWFpbl9pZCwgMCwgXCYjMzQ7YWRkX21haW5fZnVuY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwmIzM0O3N1Yl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcJiMzNDthZGRfc3ViX2Z1bmNcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcJiMzNDssIDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwmIzM0O2FkZF9lbnVtXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcJiMzNDt2YWx1ZVwmIzM0OywgMCksIFwmIzM0O2FkZF9lbnVtX3ZhbHVlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwmIzM0OzBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcJiMzNDthZGRfYWNjZXNzX3N0clwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCYjMzQ7cmF3X2J0ZlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcJiMzNDtidGZfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocHJvZ19mZCwgMCwgXCYjMzQ7Y29udHJvbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRwcm9nX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdFxuJiM0MztcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuJiM0MztcdCAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcJiMzNDtwb2lzb25lZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihsb2csIFwmIzM0O2ZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O3BvaXNvbmVkX2xvYWRfbG9nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslc1wmIzM0OywgbG9nKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UocHJvZ19mZCk7XG4mIzQzO1x0Y2xvc2UoYnRmX2ZkKTtcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICYjNDM7MjMxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9iYWRfbG9jYWxfaWQodm9pZClcbiBcbiB2b2lkIHRlc3RfY29yZV9yZWxvY19yYXcodm9pZClcbiB7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtiYWRfbG9jYWxfaWRcJiMzNDspKVxuIFx0XHR0ZXN0X2JhZF9sb2NhbF9pZCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wZjc4ZGIzYmNjYzc2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmNcbkBAIC0wLDAgJiM0MzsxLDEzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBOT1BfQ05UXHRcdDMyNzY4XG4mIzQzOyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcdCgxMDBVTEwgKiAxMDAwICogMTAwMClcbiYjNDM7I2RlZmluZSBSRUFQX1RJTUVPVVRfTlNcdFx0KDEwMDBVTEwgKiAxMDAwICogMTAwMClcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyB0cztcbiYjNDM7XG4mIzQzO1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzKTtcbiYjNDM7XHRyZXR1cm4gdHMudHZfc2VjICogMTAwMDAwMDAwMFVMTCAmIzQzOyB0cy50dl9uc2VjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyB0cyA9IHtcbiYjNDM7XHRcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXG4mIzQzO1x0XHQudHZfbnNlYyA9IGR1cmF0aW9uICUgMTAwMDAwMDAwMFVMTCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobmFub3NsZWVwKFx1MDAyNnRzLCBcdTAwMjZ0cykgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdhaXRwaWRfdGltZW91dChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBfX3U2NCB0aW1lb3V0KVxuJiM0Mzt7XG4mIzQzO1x0X191NjQgZGVhZGxpbmUgPSBtb25vdG9uaWNfbnMoKSAmIzQzOyB0aW1lb3V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHdhaXRwaWQocGlkLCBzdGF0dXMsIFdOT0hBTkcpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9IHdoaWxlIChtb25vdG9uaWNfbnMoKSBcdTAwM2MgZGVhZGxpbmUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBOVUxMO1xuJiM0MztcdF9fdTY0IHN0YXJ0LCBjb250cm9sX3RpbWUsIGtpbGxfZGVsYXk7XG4mIzQzO1x0aW50IHBpcGVmZFsyXSA9IHsgLTEsIC0xIH07XG4mIzQzO1x0aW50IHByb2dfZmQgPSAtMSwgc3RhdHVzID0gMDtcbiYjNDM7XHRwaWRfdCBwaWQgPSAtMTtcbiYjNDM7XHRjaGFyIGJ5dGU7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0aW5zbnMgPSBjYWxsb2MoTk9QX0NOVCAmIzQzOyAyLCBzaXplb2YoKmluc25zKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluc25zLCBcJiMzNDtjYWxsb2NcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOT1BfQ05UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGluc25zW2ldID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfMSk7XG4mIzQzO1x0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0aW5zbnNbTk9QX0NOVCAmIzQzOyAxXSA9IEJQRl9FWElUX0lOU04oKTtcbiYjNDM7XG4mIzQzO1x0c3RhcnQgPSBtb25vdG9uaWNfbnMoKTtcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsIFwmIzM0O0dQTFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRpbnNucywgTk9QX0NOVCAmIzQzOyAyLCBOVUxMKTtcbiYjNDM7XHRjb250cm9sX3RpbWUgPSBtb25vdG9uaWNfbnMoKSAtIHN0YXJ0O1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwmIzM0O2NvbnRyb2xfcHJvZ19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRwcm9nX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5PUF9DTlQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aW5zbnNbaV0gPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVmZCksIFwmIzM0O3BpcGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIXBpZCkge1xuJiM0MztcdFx0Y2xvc2UocGlwZWZkWzBdKTtcbiYjNDM7XHRcdGlmICh3cml0ZShwaXBlZmRbMV0sIFwmIzM0O3hcJiMzNDssIDEpICE9IDEpXG4mIzQzO1x0XHRcdF9leGl0KDEpO1xuJiM0MztcdFx0Y2xvc2UocGlwZWZkWzFdKTtcbiYjNDM7XHRcdHByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgXCYjMzQ7R1BMXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0aW5zbnMsIE5PUF9DTlQgJiM0MzsgMiwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdGNsb3NlKHByb2dfZmQpO1xuJiM0MztcdFx0X2V4aXQocHJvZ19mZCBcdTAwM2MgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwaXBlZmRbMV0pO1xuJiM0MztcdHBpcGVmZFsxXSA9IC0xO1xuJiM0MztcdHJldCA9IHJlYWQocGlwZWZkWzBdLCBcdTAwMjZieXRlLCAxKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIDEsIFwmIzM0O2NoaWxkX3JlYWR5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGxvdyBsaW5lYXIgdmVyaWZpY2F0aW9uIHRvIGZpbmlzaCBiZWZvcmUgc2VuZGluZyBTSUdLSUxMLiBUaGUgbm9wXG4mIzQzO1x0ICogcmVtb3ZhbCBwYXNzIGlzIHF1YWRyYXRpYywgc28gZm91ciBjb250cm9sLWxvYWQgdGltZXMgc3RpbGwgbGVhdmVzIGFcbiYjNDM7XHQgKiB3aWRlIHdpbmRvdyBpbiB3aGljaCBhbiBhZmZlY3RlZCBrZXJuZWwgaXMgcmV3cml0aW5nIGluc3RydWN0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRraWxsX2RlbGF5ID0gTUFYKGNvbnRyb2xfdGltZSAqIDQsIE1JTl9LSUxMX0RFTEFZX05TKTtcbiYjNDM7XHRzbGVlcF9ucyhraWxsX2RlbGF5KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhraWxsKHBpZCwgU0lHS0lMTCksIFwmIzM0O2tpbGxcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRzdGFydCA9IG1vbm90b25pY19ucygpO1xuJiM0MztcdHJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsIFx1MDAyNnN0YXR1cywgUkVBUF9USU1FT1VUX05TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgXCYjMzQ7cHJvZ19sb2FkX2tpbGxhYmxlXCYjMzQ7KSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2NvbnRyb2wgbG9hZCAlbGx1IHVzLCBjaGlsZCBzdGlsbCBhbGl2ZSAlbGx1IHVzIGFmdGVyIFNJR0tJTExcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XHRwaWQgPSAtMTtcbiYjNDM7XHRBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXVEVSTVNJRyhzdGF0dXMpID09IFNJR0tJTEwsXG4mIzQzO1x0XHQgICAgXCYjMzQ7a2lsbGVkX2J5X3NpZ2tpbGxcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRpZiAocGlwZWZkWzBdIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHBpcGVmZFswXSk7XG4mIzQzO1x0aWYgKHBpcGVmZFsxXSBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShwaXBlZmRbMV0pO1xuJiM0MztcdGlmIChwaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbiYjNDM7XHRcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuJiM0MztcdH1cbiYjNDM7XHRmcmVlKGluc25zKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgJiM0MzsyNSw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3Muc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZy5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jZmcuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCYjMzQ7XG5AQCAtMTg4LDYgJiM0MzsxODksNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfYnN3YXAodm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnN3YXApOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSk7IH1cbiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCAmIzQzOzEsNzMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGJwZl9tYXA7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbG9ja192YWx1ZSB7XG4mIzQzO1x0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuJiM0Mzt9IGxvY2tfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNldmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4mIzQzO1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsIFx1MDAyNmN0eCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7Y2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDticGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcJiMzNDspXG4mIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBuZXN0X2xvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBsb2NrX3NhbWVfdmFsdWUsIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O25lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5X3NhbWUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG5pbmRleCAwYjg2ZDk1YTQxMzM1Li42OTJhODQ2OGYzZDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbkBAIC01LDYgJiM0Mzs1LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4gXG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7WERQIHBrdCByZWdzYWZlIHByZXNlcnZlcyBwYWNrZXQgcG9pbnRlciBjbGFzcyBkaXNwbGFjZW1lbnRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcJiMzNDspXG4mIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKVxuJiM0MztfX25ha2VkIHZvaWQgcGt0X3JlZ3NhZmVfY2xhc3NfZGlzcGxhY2VtZW50KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1xcXG4mIzQzO1x0cjggPSAqKHUzMiAqKShyMSAmIzQzOyAlW3hkcF9tZF9kYXRhX2VuZF0pO1xcXG4mIzQzO1x0cjkgPSAqKHUzMiAqKShyMSAmIzQzOyAlW3hkcF9tZF9kYXRhXSk7XFxcbiYjNDM7XHRyNiA9IHI5O1xcXG4mIzQzO1x0cjYgJiM0Mzs9IDg7XFxcbiYjNDM7XHRpZiByNiBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbiYjNDM7XHRyMCA9ICoodTY0ICopKHI5ICYjNDM7IDApO1xcXG4mIzQzO1x0cjQgPSByMDtcXFxuJiM0MztcdHI0IFx1MDAyNj0gMTU7XFxcbiYjNDM7XHRyNyA9IHIwO1xcXG4mIzQzO1x0cjcgXHUwMDNlXHUwMDNlPSA2MztcXFxuJiM0MztcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxuJiM0MztcdHIyID0gcjk7XFxcbiYjNDM7XHRyMiAmIzQzOz0gcjQ7XFxcbiYjNDM7XHRyMyA9IHIyO1xcXG4mIzQzO1x0cjMgJiM0Mzs9IDQ7XFxcbiYjNDM7XHRnb3RvIGxfam9pbl8lPTtcXFxuJiM0MztsX3BhdGhfYl8lPTogXFxcbiYjNDM7XHRyNCBcdTAwMjY9IDM7XFxcbiYjNDM7XHRyNCAmIzQzOz0gODtcXFxuJiM0MztcdHIyID0gcjk7XFxcbiYjNDM7XHRyMiAmIzQzOz0gcjQ7XFxcbiYjNDM7XHRyMyA9IHIyO1xcXG4mIzQzO1x0cjMgLT0gNDtcXFxuJiM0MztsX2pvaW5fJT06IFxcXG4mIzQzO1x0cjUgPSByMztcXFxuJiM0MztcdHI1ICYjNDM7PSA0O1xcXG4mIzQzO1x0aWYgcjUgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4mIzQzO1x0cjAgPSAqKHU2NCAqKShyMiAmIzQzOyAwKTtcXFxuJiM0MztsX2V4aXRfJT06IFxcXG4mIzQzO1x0cjAgPSAwO1xcXG4mIzQzO1x0ZXhpdDtcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksXG4mIzQzO1x0ICBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YV9lbmQsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGFfZW5kKSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDt4ZHBcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDtYRFAgcGt0IHJlYWQsIHBrdF9lbmQgbWFuZ2xpbmcsIGJhZCBhY2Nlc3MgMVwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjMgcG9pbnRlciBhcml0aG1ldGljIG9uIHBrdF9lbmRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2tfY2ZnJiMzNDssCiAgICAmIzM0O3B1c2hfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDtjaGVja19wa3RfcHRyX2lkcyYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgICAmIzM0O21hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyYjMzQ7LAogICAgJiMzNDtzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7c2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGV4ZWN1dGlvbiBwYXRocywgaW5jbHVkaW5nIGNvbnRyb2wgZmxvdyBncmFwaCAoQ0ZHKSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGNoZWNrcywgc2lnbmFsLWF3YXJlIGluc3RydWN0aW9uIHJld3JpdGluZy9yZW1vdmFsIHBhc3NlcywgcGFja2V0IHBvaW50ZXIgc3RhdGUgZXF1aXZhbGVuY2UgY29tcGFyaXNvbiAocmVnc2FmZSksIGFuZCBsb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBjYWxsYmFjayBhcmd1bWVudHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIGRpcmVjdGx5IGFmZmVjdCB2ZXJpZmljYXRpb24gY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbnZhcmlhbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDQ3LDYgJiM0Mzs0NDcsMTEgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKIAlyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQocmVnX2J0Zl9yZWNvcmQocmVnKSwgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xMDAzNSw2ICYjNDM7MTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi8KIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzNdOwpAQCAtMTAxMzEsNiAmIzQzOzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMTAyNDksNiAmIzQzOzEwMjYwLDkgQEAgc3RhdGljIGludCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBtYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiB1bnVzZWQgKi8KIAlicGZfbWFya19yZWdfbm90X2luaXQoZW52LCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfbG9hZF9zaWduYWwuYwpAQCAtMCwwICYjNDM7MSwxMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTk9QX0NOVAkJMzI3NjgKJiM0MzsjZGVmaW5lIE1JTl9LSUxMX0RFTEFZX05TCSgxMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsjZGVmaW5lIFJFQVBfVElNRU9VVF9OUwkJKDEwMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsKJiM0MztzdGF0aWMgX191NjQgbW9ub3RvbmljX25zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiYjNDM7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3RzKTsKJiM0MzsJcmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgJiM0MzsgdHMudHZfbnNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2xlZXBfbnMoX191NjQgZHVyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7CiYjNDM7CQkudHZfc2VjID0gZHVyYXRpb24gLyAxMDAwMDAwMDAwVUxMLAomIzQzOwkJLnR2X25zZWMgPSBkdXJhdGlvbiAlIDEwMDAwMDAwMDBVTEwsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXdoaWxlIChuYW5vc2xlZXAoJmFtcDt0cywgJmFtcDt0cykgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUikKJiM0MzsJCTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dCkKJiM0Mzt7CiYjNDM7CV9fdTY0IGRlYWRsaW5lID0gbW9ub3RvbmljX25zKCkgJiM0MzsgdGltZW91dDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd2FpdHBpZChwaWQsIHN0YXR1cywgV05PSEFORyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0gd2hpbGUgKG1vbm90b25pY19ucygpICZsdDsgZGVhZGxpbmUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBOVUxMOwomIzQzOwlfX3U2NCBzdGFydCwgY29udHJvbF90aW1lLCBraWxsX2RlbGF5OwomIzQzOwlpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTsKJiM0MzsJaW50IHByb2dfZmQgPSAtMSwgc3RhdHVzID0gMDsKJiM0MzsJcGlkX3QgcGlkID0gLTE7CiYjNDM7CWNoYXIgYnl0ZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJaW5zbnMgPSBjYWxsb2MoTk9QX0NOVCAmIzQzOyAyLCBzaXplb2YoKmluc25zKSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihpbnNucywgJiMzNDtjYWxsb2MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOT1BfQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluc25zW2ldID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfMSk7CiYjNDM7CWluc25zW05PUF9DTlRdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwlpbnNuc1tOT1BfQ05UICYjNDM7IDFdID0gQlBGX0VYSVRfSU5TTigpOwomIzQzOwomIzQzOwlzdGFydCA9IG1vbm90b25pY19ucygpOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsICYjMzQ7R1BMJiMzNDssCiYjNDM7CQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwljb250cm9sX3RpbWUgPSBtb25vdG9uaWNfbnMoKSAtIHN0YXJ0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfcHJvZ19sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJcHJvZ19mZCA9IC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTk9QX0NOVDsgaSYjNDM7JiM0MzspCiYjNDM7CQlpbnNuc1tpXSA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMCk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHBpcGUocGlwZWZkKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIXBpZCkgewomIzQzOwkJY2xvc2UocGlwZWZkWzBdKTsKJiM0MzsJCWlmICh3cml0ZShwaXBlZmRbMV0sICYjMzQ7eCYjMzQ7LCAxKSAhPSAxKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJY2xvc2UocGlwZWZkWzFdKTsKJiM0MzsJCXByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgJiMzNDtHUEwmIzM0OywKJiM0MzsJCQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwkJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShwcm9nX2ZkKTsKJiM0MzsJCV9leGl0KHByb2dfZmQgJmx0OyAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlwaXBlZmRbMV0gPSAtMTsKJiM0MzsJcmV0ID0gcmVhZChwaXBlZmRbMF0sICZhbXA7Ynl0ZSwgMSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgMSwgJiMzNDtjaGlsZF9yZWFkeSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcAomIzQzOwkgKiByZW1vdmFsIHBhc3MgaXMgcXVhZHJhdGljLCBzbyBmb3VyIGNvbnRyb2wtbG9hZCB0aW1lcyBzdGlsbCBsZWF2ZXMgYQomIzQzOwkgKiB3aWRlIHdpbmRvdyBpbiB3aGljaCBhbiBhZmZlY3RlZCBrZXJuZWwgaXMgcmV3cml0aW5nIGluc3RydWN0aW9ucy4KJiM0MzsJICovCiYjNDM7CWtpbGxfZGVsYXkgPSBNQVgoY29udHJvbF90aW1lICogNCwgTUlOX0tJTExfREVMQVlfTlMpOwomIzQzOwlzbGVlcF9ucyhraWxsX2RlbGF5KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCAmIzM0O2tpbGwmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXN0YXJ0ID0gbW9ub3RvbmljX25zKCk7CiYjNDM7CXJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsICZhbXA7c3RhdHVzLCBSRUFQX1RJTUVPVVRfTlMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgJiMzNDtwcm9nX2xvYWRfa2lsbGFibGUmIzM0OykpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2NvbnRyb2wgbG9hZCAlbGx1IHVzLCBjaGlsZCBzdGlsbCBhbGl2ZSAlbGx1IHVzIGFmdGVyIFNJR0tJTExcbiYjMzQ7LAomIzQzOwkJCWNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CXBpZCA9IC0xOwomIzQzOwlBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpICZhbXA7JmFtcDsgV1RFUk1TSUcoc3RhdHVzKSA9PSBTSUdLSUxMLAomIzQzOwkJICAgICYjMzQ7a2lsbGVkX2J5X3NpZ2tpbGwmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHByb2dfZmQpOwomIzQzOwlpZiAocGlwZWZkWzBdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMF0pOwomIzQzOwlpZiAocGlwZWZkWzFdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0MzsJfQomIzQzOwlmcmVlKGluc25zKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlMDlkZDY2ZjQ2NzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDczIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9tYXA7CiYjNDM7CiYjNDM7c3RydWN0IGxvY2tfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyB3YXJyYW50cyBhIHN5emthbGxlciBmdXp6aW5nIGNhbXBhaWduIGZvciB0aGUgYW1kNjQgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgdG8gYGJwZl9pZF9wYWlyYCBpbiBgYnBmX3ZlcmlmaWVyLmhgIGFuZCBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIGNvcmUgQlBGIGZpbGVzOiBgY2ZnLmNgLCBgZml4dXBzLmNgLCBgc3RhdGVzLmNgLCBhbmQgYHZlcmlmaWVyLmNgLgoKVGhlIGFkZGl0aW9ucyBvZiBgczMyIHBrdF9wdHJfZGVsdGE7IGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7YCBpbiBgYnBmX2lkX3BhaXJgIHNlZW0gbGlrZSBhIHBvdGVudGlhbCBwb2ludGVyLXJlbGF0ZWQgY2hhbmdlLCB3aGljaCBhbHdheXMgcmFpc2VzIGEgZmxhZy4gVGhlbiwgbW9kaWZpY2F0aW9ucyB0byBgcHVzaF9pbnNuKClgIGluIGBjZmcuY2Agd2l0aCBmYWxsdGhyb3VnaCBjaGVja3MgbG9vayBpbnRlcmVzdGluZy4gYGZpeHVwcy5jYCBub3cgaW5jbHVkZXMgYSBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCBmdW5jdGlvbiB3aXRoIGNoZWNrcyBmb3IgYGZhdGFsX3NpZ25hbF9wZW5kaW5nYCBhbmQgYGNvbmRfcmVzY2hlZCgpYCwgaW5kaWNhdGluZyBwb3RlbnRpYWwgaW50ZXJydXB0aW9uIG1lY2hhbmlzbXMuIGBzdGF0ZXMuY2AgaW50cm9kdWNlcyBgY2hlY2tfcGt0X3B0cl9pZHMoKWAsIHNvIHdlJiMzOTtyZSBzZWVpbmcgbW9yZSBwb2ludGVyIGhhbmRsaW5nLiBGaW5hbGx5LCBgdmVyaWZpZXIuY2AgaW5jbHVkZXMgYSBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoKWAgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBpbmNsdWRpbmcgc2V0dGluZyByZWdpc3RlciBpZHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBtb2RpZnkgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIGNvcmUgYW5kIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuIENoYW5nZXMgdG8gdGhlIHZlcmlmaWVyIGFyZSBhbHdheXMgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlIEJQRiB2ZXJpZmllciBpcyBub3RvcmlvdXMgZm9yIGhhdmluZyBzdWJ0bGUgZmxhd3MsIGFuZCB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gdG91Y2ggb24gY3JpdGljYWwgYXJlYXMuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkLCB0aGUgc3Vic3lzdGVtIGlzIGltcG9ydGFudCwgYW5kIHBvaW50ZXIvc3RhdGUvY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMgYXJlIHN0cm9uZyBpbmRpY2F0b3JzLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBtYXliZSBzb21lIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlc2UgbmV3IGNoYW5nZXMuIEnigJlsbCB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciB0aGUga2VybmVsL2JwZiBmaWxlcyB0byBnZXQgdGhhdCBpbmZvcm1hdGlvbi4gSSYjMzk7bSByZWFkeSB0byBjcmFmdCBzb21lIGdvb2Qgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfQlBGX1NZU0NBTExcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGX1NZU0NBTEwgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgLiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBub3cuIE15IGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgcHJlLXJlcXVpc2l0ZXMgdGhhdCB3b3VsZCBhZmZlY3QgdGhlIGF2YWlsYWJpbGl0eSBvZiBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIG90aGVyIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBwb3RlbnRpYWxseSBrZXJuZWwgaGFyZGVuaW5nIG9wdGlvbnMsIG9yIGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHdoZXRoZXIgYEJQRl9TWVNDQUxMYCBpcyBldmVuICpwcmVzZW50KiBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhpZXJhcmNoeSBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIGl0LiBUaGUgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvbnNpc3RlbnQgZm9yIG15IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY29uZmlnIEJQRl9TWVNDQUxMYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBpcyBhY3R1YWxseSBzZXQuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLCBsaWtlbHkgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUgb3IgZmVhdHVyZSBkaXJlY3Rvcmllcy4gSeKAmWxsIHByb2JhYmx5IG5lZWQgdG8gdXNlIGBmaW5kYCBjb21iaW5lZCB3aXRoIGBncmVwYCAob3IgcG9zc2libHkgYGFja2Agb3IgYHJpcGdyZXBgIGZvciBzcGVlZCkgdG8gbG9jYXRlIGl0IGVmZmljaWVudGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIHN5bWJvbCBpcyBlaXRoZXIgZXhwbGljaXRseSBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgd2l0aGluIGRlcGVuZGVuY3kgZXhwcmVzc2lvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgaW5zaWdodCBpbnRvIHRoZSBmdW5jdGlvbmFsaXR5IGd1YXJkZWQgYnkgdGhhdCBjb25maWcsIGFuZCBob3cgdG8gZW5hYmxlL2Rpc2FibGUgaXQuIEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBzdWJ0bGV0eSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIEJQRiBLY29uZmlnIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbiwgSSBuZWVkIHRvIGdyb3VuZCBteXNlbGYgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMaW5lIDI1IG9mIGBrZXJuZWwvYnBmL0tjb25maWdgIHNwZWNpZmljYWxseS4uLiB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBrZXkgZGVwZW5kZW5jaWVzIGZvciB0aGUgQlBGIHN1YnN5c3RlbSBhcmUgZGVjbGFyZWQuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIEJQRiBmZWF0dXJlcyBhcmUgZ2F0ZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdOKAmXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGJhc2UgcmVxdWlyZW1lbnRzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBzZWN1cml0eSBtb2RlbHMsIENQVSBhcmNoaXRlY3R1cmUgZmVhdHVyZXMgb3Igb3RoZXIgc3Vic3lzdGVtcyBhcmUgY2xlYXJseSBzcGVjaWZpZWQuIEkgY2FuIGNoZWNrIHRoaXMgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzIGJlZm9yZSBnb2luZyBmdXJ0aGVyLiBUaGlzJiMzOTtsbCBoZWxwIG1lIGF2b2lkIHdhc3RpbmcgdGltZSBsYXRlciBvbiBieSBjaGFzaW5nIGRvd24gcmVkIGhlcnJpbmdzIHJlbGF0ZWQgdG8gdW5tZXQgcHJlcmVxdWlzaXRlcy4gTGV04oCZcyBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZmlsZSBhbmQgc3ltYm9sIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSB0d28ga2V5IGFyZWFzOgoKRmlyc3QsIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCwgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgLiBBIG5ldyBmaWVsZCwgYHBrdF9wdHJfZGVsdGFgLCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciwgYW5kIGEgYm9vbGVhbiBmbGFnIGBwa3RfcHRyX2RlbHRhX3NldGAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb2ludGVyIGRlbHRhIGNhbGN1bGF0aW9ucyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LCBwcm9iYWJseSByZWxhdGVkIHRvIHBhY2tldCBkYXRhIG1hbmlwdWxhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpbXBhY3RzIGhvdyB3ZSB0cmFjayBhbmQgbWFuYWdlIG9mZnNldHMgd2l0aGluIHRoZSBwYWNrZXQgYnVmZmVyLiBUaGUgYWRkaXRpb24gb2YgYSBib29sZWFuIGZsYWcgc3VnZ2VzdHMgY29uZGl0aW9uYWwgdXNhZ2UsIGltcGx5aW5nIHRoaXMgZGVsdGEgaXNuJiMzOTt0IGFsd2F5cyByZWxldmFudC4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmVyaWZpZXIuCgpUaGVuLCBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2NmZy5jYCwgdGhlIGBwdXNoX2luc25gIGZ1bmN0aW9uIGhhcyBiZWVuIGNoYW5nZWQuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBib3VuZGFyeSBjaGVjayByZWxhdGVkIHRvIGZhbGx0aHJvdWdoIChgZSA9PSBGQUxMVEhST1VHSGApLiBUaGF0IGNhdGNoZXMgbXkgZXllLiBXZSYjMzk7cmUgZXhwbGljaXRseSBndWFyZGluZyBhZ2FpbnN0IHNvbWV0aGluZyB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmYWxsdGhyb3VnaCBzY2VuYXJpbywgd2hpY2ggaXMgdXN1YWxseSBhIGNyaXRpY2FsIHBhdGggZm9yIGNvbnRyb2wgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoZWNrIHByZXZlbnRzLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYHB1c2hfaW5zbmAuIEkmIzM5O2xsIGhhdmUgdG8gcXVpY2tseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBga2VybmVsL2JwZi9jZmcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBjaGVjayB3aWxsIGFmZmVjdCB0aGUgb3ZlcmFsbCBCUEYgdmVyaWZpZXIgYmVoYXZpb3IuIEkgc3VzcGVjdCBpdCYjMzk7cyBwcmV2ZW50aW5nIHNvbWUga2luZCBvZiBwb3RlbnRpYWxseSBpbnZhbGlkIHN0YXRlIGR1cmluZyBpbnN0cnVjdGlvbiBwdXNoIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udHJvbCBmbG93IGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXNoX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2ZnLmM9OTM9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9jZmcuYy0xMDItICovXG5rZXJuZWwvYnBmL2NmZy5jOjEwMzpzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy0xMDQte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmM9MTgyPXN0YXRpYyBpbnQgdmlzaXRfZnVuY19jYWxsX2luc24oaW50IHQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbnMsXG4tLVxua2VybmVsL2JwZi9jZmcuYy0xODktXHRpbnNuX3N6ID0gYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbdF0pID8gMiA6IDE7XG5rZXJuZWwvYnBmL2NmZy5jOjE5MDpcdHJldCA9IHB1c2hfaW5zbih0LCB0ICYjNDM7IGluc25fc3osIEZBTExUSFJPVUdILCBlbnYpO1xua2VybmVsL2JwZi9jZmcuYy0xOTEtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtMjAxLVx0XHRtZXJnZV9jYWxsZWVfZWZmZWN0cyhlbnYsIHQsIHcpO1xua2VybmVsL2JwZi9jZmcuYzoyMDI6XHRcdHJldCA9IHB1c2hfaW5zbih0LCB3LCBCUkFOQ0gsIGVudik7XG5rZXJuZWwvYnBmL2NmZy5jLTIwMy1cdH1cbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQ3ND1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy00OTItXHRcdGluc25fc3ogPSBicGZfaXNfbGRpbW02NChpbnNuKSA/IDIgOiAxO1xua2VybmVsL2JwZi9jZmcuYzo0OTM6XHRcdHJldHVybiBwdXNoX2luc24odCwgdCAmIzQzOyBpbnNuX3N6LCBGQUxMVEhST1VHSCwgZW52KTtcbmtlcm5lbC9icGYvY2ZnLmMtNDk0LVx0fVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTgzLVx0XHQvKiB1bmNvbmRpdGlvbmFsIGp1bXAgd2l0aCBzaW5nbGUgZWRnZSAqL1xua2VybmVsL2JwZi9jZmcuYzo1ODQ6XHRcdHJldCA9IHB1c2hfaW5zbih0LCB0ICYjNDM7IG9mZiAmIzQzOyAxLCBGQUxMVEhST1VHSCwgZW52KTtcbmtlcm5lbC9icGYvY2ZnLmMtNTg1LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTk5LVxua2VybmVsL2JwZi9jZmcuYzo2MDA6XHRcdHJldCA9IHB1c2hfaW5zbih0LCB0ICYjNDM7IDEsIEZBTExUSFJPVUdILCBlbnYpO1xua2VybmVsL2JwZi9jZmcuYy02MDEtXHRcdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9jZmcuYy02MDMtXG5rZXJuZWwvYnBmL2NmZy5jOjYwNDpcdFx0cmV0dXJuIHB1c2hfaW5zbih0LCB0ICYjNDM7IGluc24tXHUwMDNlb2ZmICYjNDM7IDEsIEJSQU5DSCwgZW52KTtcbmtlcm5lbC9icGYvY2ZnLmMtNjA1LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUzNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRW50cnkgUG9pbnQgQW5hbHlzaXMgaW4gYGNmZy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBjZmcuY2AgYW5kIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlbnRyeSBwb2ludHMuIFdoZXJlIGRvZXMgdGhlIGV4ZWN1dGlvbiBiZWdpbiwgYW5kIHdoYXQgZnVuY3Rpb25zIGFyZSB0aGUgY29yZSwgdGhlIGJ1aWxkaW5nIGJsb2Nrcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvbmZpZ3VyYXRpb24gbG9hZGluZywgcGFyc2luZywgYW5kIGFwcGxpY2F0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXM6IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgcGFyc2luZyByb3V0aW5lcywgYW5kIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYXMgd2VsbCDigJMgY2FsbHMgdG8gb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgdGhlIHByb3BlciBvcGVyYXRpb24gb2YgdGhlIG1vZHVsZS4gVW5kZXJzdGFuZGluZyBob3cgYGNmZy5jYCBpbnRlcmZhY2VzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpcyBqdXN0IGFzIGltcG9ydGFudCBhcyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBtb2R1bGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2ZnLmM9NDU9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9jZmcuYy01MS1cbmtlcm5lbC9icGYvY2ZnLmM6NTI6c3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcbmtlcm5lbC9icGYvY2ZnLmMtNTMte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTktXG5rZXJuZWwvYnBmL2NmZy5jOjYwOnN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19taWdodF9zbGVlcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxua2VybmVsL2JwZi9jZmcuYy02MS17XG4tLVxua2VybmVsL2JwZi9jZmcuYy02Ny1cbmtlcm5lbC9icGYvY2ZnLmM6Njg6c3RhdGljIHZvaWQgbWFya19zdWJwcm9nX21pZ2h0X3Rocm93KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpXG5rZXJuZWwvYnBmL2NmZy5jLTY5LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTgxLSAqL1xua2VybmVsL2JwZi9jZmcuYzo4MjpzdGF0aWMgdm9pZCBtZXJnZV9jYWxsZWVfZWZmZWN0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdCwgaW50IHcpXG5rZXJuZWwvYnBmL2NmZy5jLTgzLXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTkzPWVudW0ge1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtMTAyLSAqL1xua2VybmVsL2JwZi9jZmcuYzoxMDM6c3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtMTA0LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTE4MS1cbmtlcm5lbC9icGYvY2ZnLmM6MTgyOnN0YXRpYyBpbnQgdmlzaXRfZnVuY19jYWxsX2luc24oaW50IHQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbnMsXG5rZXJuZWwvYnBmL2NmZy5jLTE4My1cdFx0XHRcdHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jZmcuYy0yMDYtXG5rZXJuZWwvYnBmL2NmZy5jOjIwNzpzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2lhcnJheV9yZWFsbG9jKHN0cnVjdCBicGZfaWFycmF5ICpvbGQsIHNpemVfdCBuX2VsZW0pXG5rZXJuZWwvYnBmL2NmZy5jLTIwOC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yMjItXG5rZXJuZWwvYnBmL2NmZy5jOjIyMzpzdGF0aWMgaW50IGNvcHlfaW5zbl9hcnJheShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgc3RhcnQsIHUzMiBlbmQsIHUzMiAqaXRlbXMpXG5rZXJuZWwvYnBmL2NmZy5jLTIyNC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNDItXG5rZXJuZWwvYnBmL2NmZy5jOjI0MzpzdGF0aWMgaW50IGNtcF9wdHJfdG9fdTMyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5rZXJuZWwvYnBmL2NmZy5jLTI0NC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNDctXG5rZXJuZWwvYnBmL2NmZy5jOjI0ODpzdGF0aWMgaW50IHNvcnRfaW5zbl9hcnJheV91bmlxKHUzMiAqaXRlbXMsIGludCBjbnQpXG5rZXJuZWwvYnBmL2NmZy5jLTI0OS17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNjQtICovXG5rZXJuZWwvYnBmL2NmZy5jOjI2NTppbnQgYnBmX2NvcHlfaW5zbl9hcnJheV91bmlxKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBzdGFydCwgdTMyIGVuZCwgdTMyICpvZmYpXG5rZXJuZWwvYnBmL2NmZy5jLTI2Ni17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNzktICovXG5rZXJuZWwvYnBmL2NmZy5jOjI4MDpzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fbWFwKHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2NmZy5jLTI4MS17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0zMTAtICovXG5rZXJuZWwvYnBmL2NmZy5jOjMxMTpzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jZmcuYy0zMTItXHRcdFx0XHRcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTM2Mz1zdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKlxua2VybmVsL2JwZi9jZmcuYzozNjQ6Y3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy0zNjUte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtMzk2LS8qIFwmIzM0O2NvbmRpdGlvbmFsIGp1bXAgd2l0aCBOIGVkZ2VzXCYjMzQ7ICovXG5rZXJuZWwvYnBmL2NmZy5jOjM5NzpzdGF0aWMgaW50IHZpc2l0X2dvdG94X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2NmZy5jLTM5OC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy00NDktICovXG5rZXJuZWwvYnBmL2NmZy5jOjQ1MDpzdGF0aWMgaW50IHZpc2l0X2Fibm9ybWFsX3JldHVybl9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB0KVxua2VybmVsL2JwZi9jZmcuYy00NTEte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNDczLSAqL1xua2VybmVsL2JwZi9jZmcuYzo0NzQ6c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy00NzUte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNjEwLSAqL1xua2VybmVsL2JwZi9jZmcuYzo2MTE6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNjEyLXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTcxMi0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6NzEzOmludCBicGZfY29tcHV0ZV9wb3N0b3JkZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNzE0LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTc2NS0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6NzY2OmludCBicGZfY29tcHV0ZV9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNzY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIEZsb3cgYW5kIEZpeHVwIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBCUEYgdmVyaWZpZXIgYW5kIGhvdyBpdCBoYW5kbGVzIGluc3RydWN0aW9uIG1vZGlmaWNhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpYCBmdW5jdGlvbiBpcyBrZXk7IGl0IGNhbGxzIGB2aXNpdF9pbnNuYCwgd2hpY2ggdGhlbiBwdXNoZXMgaW5zdHJ1Y3Rpb25zIHVzaW5nIGBwdXNoX2luc25gLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGRlYWwgd2l0aCBwYXRjaGluZyBhbmQgcmVtb3ZpbmcgaW5zdHJ1Y3Rpb25zIGR1cmluZyB2ZXJpZmljYXRpb24uIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBicGZfcGF0Y2hfaW5zbl9kYXRhKClgIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zKClgLiBCb3RoIG9mIHRoZW0gYXJlIGludGVyZXN0aW5nIHNpbmNlIHRoZXkgaGF2ZSBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYC4gVGhhdCBsb29rcyBsaWtlIGEgY3JpdGljYWwgcG9pbnQgd2hlcmUgd2UgbWlnaHQgbmVlZCB0byBhYm9ydCB0aGUgdmVyaWZpY2F0aW9uLgoKT2theSwgSSYjMzk7bGwgZXhhbWluZSBgYnBmX3BhdGNoX2luc25fZGF0YWAgYW5kIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgY2hlY2sgdGhlaXIgY2FsbGVycywgYW5kIHdoZXRoZXIgdGhleSBhcmUgc3RhdGljIG9yIGhhdmUgYnJvYWRlciB2aXNpYmlsaXR5LiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBodW50IHRoZW0gZG93biBpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzLCBvciB1bmV4cGVjdGVkIHVzZXMuIExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYnBmX3BhdGNoX2luc25fZGF0YXx2ZXJpZmllcl9yZW1vdmVfaW5zbnMpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MTU2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTc2LVxua2VybmVsL2JwZi9jb3JlLmM6MTU3NzpcdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTc4LVx0aWYgKGVudilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNjA4LVx0XHRpZiAoZW52KVxua2VybmVsL2JwZi9jb3JlLmM6MTYwOTpcdFx0XHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xua2VybmVsL2JwZi9jb3JlLmMtMTYxMC1cdFx0ZWxzZVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MzE1PXN0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTMyMi1cbmtlcm5lbC9icGYvZml4dXBzLmM6MzIzOnN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxua2VybmVsL2JwZi9maXh1cHMuYy0zMjQtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz01MjM9dm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy01MzYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjUzNzpzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxua2VybmVsL2JwZi9maXh1cHMuYy01Mzgte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NjE1PWludCBicGZfb3B0X3JlbW92ZV9kZWFkX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYyOS1cbmtlcm5lbC9icGYvZml4dXBzLmM6NjMwOlx0XHRlcnIgPSB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoZW52LCBpLCBqKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNjMxLVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NjM5PWludCBicGZfb3B0X3JlbW92ZV9ub3BzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy02NTItXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY1MzpcdFx0ZXJyID0gdmVyaWZpZXJfcmVtb3ZlX2luc25zKGVudiwgaSwgMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY1NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTY2ND1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03NDgtYXBwbHlfcGF0Y2hfYnVmZmVyOlxua2VybmVsL2JwZi9maXh1cHMuYzo3NDk6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03NjY9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzkzLVx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpWzBdO1xua2VybmVsL2JwZi9maXh1cHMuYzo3OTQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc5NS1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODE2LVx0XHR9IGVsc2UgaWYgKGNudCkge1xua2VybmVsL2JwZi9maXh1cHMuYzo4MTc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxOC1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODQ5LVx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg1MDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtODUxLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy05MjItXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIzOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy05MjQtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNTYtcGF0Y2hfaW5zbl9idWY6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwNTc6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xMDU4LVx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUxNi1cdCAqIG9uZXMgZm9yIHRoZSBoaWRkZW4gc3VicHJvZy4gSGVuY2UgYWxsIG9mIHRoZSBhZGp1c3RtZW50IG9wZXJhdGlvbnNcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUxNzpcdCAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy5cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUxOC1cdCAqL1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTE5Olx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMC1cdGlmICghcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTYwMC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTYwMTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTYwMi1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTY5MS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTY5MjpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY5My1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTcyMS1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzoxNzIyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xNzIzLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzQxLVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzQyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xNzQzLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk0LVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk1Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xNzk2LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODM5LVxua2VybmVsL2JwZi9maXh1cHMuYzoxODQwOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODQxLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODYwLVxua2VybmVsL2JwZi9maXh1cHMuYzoxODYxOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODYyLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODg3LVx0XHRcdCAqIHdpdGggdGhhdCBzYW1lIGhhbGYgJiM0MzsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLlxua2VybmVsL2JwZi9maXh1cHMuYzoxODg4Olx0XHRcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxua2VybmVsL2JwZi9maXh1cHMuYy0xODg5LVx0XHRcdCAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODk3LVx0XHRcdGkmIzQzOyYjNDM7O1xua2VybmVsL2JwZi9maXh1cHMuYzoxODk4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODk5LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xOTE4LVxua2VybmVsL2JwZi9maXh1cHMuYzoxOTE5Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xOTIwLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDA1LVx0XHRcdGNudCA9IDM7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDY6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDctXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMzk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDAtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNTctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNTg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNTktXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDAtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxMDE6XHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTAyLVx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4My1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjE4NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4NS1cdFx0XHRcdFx0XHQgICAgICAgY250KTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMTMtI2VuZGlmXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMTQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMTUtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzItXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMzM6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjgtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyOTgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyOTk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMDAtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMjQtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzMjU6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMjYtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzNDAtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzNDE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIDEpO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMzQyLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzk1LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzk2Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMzk3LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDEzLVxua2VybmVsL2JwZi9maXh1cHMuYzoyNDE0Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0yNDE1LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDgxLVxua2VybmVsL2JwZi9maXh1cHMuYzoyNDgyOlx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ4My1cdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0ODktXHRcdCAqIHRvIGluc24gYWZ0ZXIgQlBGX1NUIHRoYXQgaW5pdHMgbWF5X2dvdG8gY291bnQuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI0OTA6XHRcdCAqIEFkanVzdG1lbnQgd2lsbCBzdWNjZWVkIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGRpZG4mIzM5O3QgZmFpbC5cbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ5MS1cdFx0ICovXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0yNTE5PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmlubGluZV9icGZfbG9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4MC1cdCp0b3RhbF9jbnQgPSBjbnQ7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1ODE6XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1ODItXHRpZiAoIW5ld19wcm9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEJQRiBTdGF0ZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGBjaGVja19wa3RfcHRyX2lkc2AgZnVuY3Rpb24sIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGByZWdzYWZlYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcmVnc2FmZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW5kLCBpbXBvcnRhbnRseSwgd2hhdCB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBmdW5jdGlvbnMgd2l0aGluIGBzdGF0ZXMuY2AgYXJlIHRoYXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBvciB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBjb25uZWN0IHRvIGVhY2ggb3RoZXIuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIGNvbnRleHQgZm9yIGBjaGVja19wa3RfcHRyX2lkc2AmIzM5O3Mgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVnc2FmZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY1PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzM1LSAqIEluIHRoZSBmb3JtZXIgY2FzZSwgcHJlY2lzZSBtYXJraW5ncyBpbiBjdXJyZW50IHN0YXRlIGFyZSBjb21wbGV0ZWx5XG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjczNjogKiBpZ25vcmVkIGJ5IHN0YXRlIGNvbXBhcmlzb24gY29kZSAoc2VlIHJlZ3NhZmUoKSBmb3IgZGV0YWlscykuIE9ubHlcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzM3LSAqIGNoZWNrcG9pbnRlZCAoXCYjMzQ7b2xkXCYjMzQ7KSBzdGF0ZSBwcmVjaXNlIG1hcmtpbmdzIGFyZSBpbXBvcnRhbnQsIGFuZCBpZiBvbGRcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzM4OiAqIHN0YXRlJiMzOTtzIHJlZ2lzdGVyL3Nsb3QgaXMgcHJlY2lzZSwgcmVnc2FmZSgpIGFzc3VtZXMgY3VycmVudCBzdGF0ZSYjMzk7c1xua2VybmVsL2JwZi9iYWNrdHJhY2suYy03MzktICogcmVnaXN0ZXIvc2xvdCBhcyBwcmVjaXNlIGFuZCBjaGVja3MgdmFsdWUgcmFuZ2VzIGV4YWN0bHkgYW5kIHByZWNpc2VseS4gSWZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUzNT1lbnVtIGV4YWN0X2xldmVsIHtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0MS0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6NTQyOnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0My1cdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTczNz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03ODQtXHRcdCAqIENvbnN0cnVjdCBhIGZha2UgcmVnaXN0ZXIgZm9yIHN1Y2ggc3RhY2sgYW5kIGNhbGxcbmtlcm5lbC9icGYvc3RhdGVzLmM6Nzg1Olx0XHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxua2VybmVsL2JwZi9zdGF0ZXMuYy03ODYtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzkwLVx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc5MTpcdFx0XHRcdGlmICghcmVnc2FmZShlbnYsIG9sZF9yZWcsIGN1cl9yZWcsIGlkbWFwLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc5Mi1cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtODI3LVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4Mjg6XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgyOS1cdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04ODI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy04OTYtXHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlc3RhY2tfYXJnX3JlZ3NbaV0gOiBcdTAwMjZub3RfaW5pdDtcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODk3Olx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy04OTgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9OTgwPXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTkzLVx0XHRpZiAoKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgbGl2ZV9yZWdzKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTk0Olx0XHQgICAgIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlcmVnc1tpXSwgXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbaV0sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk5NS1cdFx0XHQgICAgIFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzdGF0ZXMuY2AgZm9yIGBmdW5jX3N0YXRlc19lcXVhbGAgYW5kIGByZWdzYWZlYCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHN0YXRlcy5jYCB0aGF0IGFyZSBhY3R1YWxseSAqdXNpbmcqIGBmdW5jX3N0YXRlc19lcXVhbGAgb3IgYHJlZ3NhZmVgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGEgZ3JlcCBzZWFyY2g7IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2FsbHMuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgYSByZWFzb24gd2UmIzM5O3JlIGV4YW1pbmluZyB0aGlzIHNwZWNpZmljYWxseSDigJMgbGlrZWx5IGEgcG90ZW50aWFsIGFyZWEgZm9yIG9wdGltaXphdGlvbiwgYSBzZWN1cml0eSBjb25jZXJuLCBvciBwZXJoYXBzIGp1c3QgYSBjb2RlIHJldmlldyB0byBlbnN1cmUgY29uc2lzdGVudCB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbi4gU3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIGludGVybmFsIHRvIHRoZSBmaWxlLiBJIGFtIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBtb3JlIHZpc2libGUgdG8gdGhlIG91dHNpZGUgd29ybGQsIGFuZCBhbSBmb2N1c2luZyBvbiB0aGlzIGZpcnN0LgoKU28sIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIGZ1bmN0aW9ucywgbm90aW5nICp3aGVyZSogdGhlc2UgY29tcGFyaXNvbnMgb3Igc2FmZXRseSBjaGVja3MgYXJlIGhhcHBlbmluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgcHVycG9zZSBvZiB0aG9zZSBmdW5jdGlvbnMgLSB3aGF0IGlzIGl0IHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBmb3I/IFdoYXQgc3RhdGVzIGFyZSB3ZSB3b3JraW5nIHdpdGg/IFdoYXQgaXMgdGhlIGZ1bmN0aW9uIHRyeWluZyB0byB2YWxpZGF0ZSBvciBzZWN1cmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvZGUgc21lbGxzPyBBcmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgd2hhdCBJIHdvdWxkIGV4cGVjdCwgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBzeXN0ZW0/IEFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBiZSBhIGhpZ2ggcHJpb3JpdHkuIEkgd2FudCB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtb2RlbCBvZiB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGVzZSBjYWxscy4gT25jZSB0aGF0IGNvbnRleHQgaXMgdW5kZXJzdG9vZCwgaXQmIzM5O3MgZWFzaWVyIHRvIGFzc2VzcyB3aGV0aGVyIHRoZSB1c2FnZSBpcyBzb3VuZCBvciBpZiB0aGVyZSYjMzk7cyByb29tIGZvciBpbXByb3ZlbWVudCwgc3VjaCBhcyBjaGFuZ2luZyB0aGUgd2F5IHRoYXQgc29tZSBzdGF0ZXMgYXJlIHZhbGlkYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1bmNfc3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc5LSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTAxNT1zdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwNDYtXHRcdFx0cmV0dXJuIGZhbHNlO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDQ3Olx0XHRpZiAoIWZ1bmNfc3RhdGVzX2VxdWFsKGVudiwgb2xkLVx1MDAzZWZyYW1lW2ldLCBjdXItXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwNDgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI5MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzdGF0ZXNfZXF1YWxgIENhbGwgU2l0ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgdGhpcyBgc3RhdGVzX2VxdWFsYCBmdW5jdGlvbiBiZWluZyB1c2VkPyYjMzQ7IFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGltcGFjdCBhbmQgYmVoYXZpb3IsIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdHMgY29tcGFyaXNvbiBsb2dpYy4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBvZiB0aGUgY29kZWJhc2UsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNyb3NzLXJlZmVyZW5jZXMsIG1heWJlIHVzaW5nIGFuIElERSYjMzk7cyAmIzM0O2ZpbmQgdXNhZ2VzJiMzNDsgZmVhdHVyZSwgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSBhbmFseXNpcyB0b29sIGlmIHRoaXMgaXMgYSBsYXJnZSBwcm9qZWN0LiBUaGUgZ29hbCBoZXJlIGlzbiYjMzk7dCBqdXN0IGEgbGlzdDsgSSYjMzk7bSBhZnRlciB0aGUgKnR5cGVzKiBvZiBjb250ZXh0cy4gQXJlIHdlIGNvbXBhcmluZyBzdGF0ZXMgaW4gYSBzaW11bGF0aW9uIGxvb3AsIGluIHZhbGlkYXRpb24gY2hlY2tzLCBpbiBzZXJpYWxpemF0aW9uIHJvdXRpbmVzLCBvciB3aGF0PyBLbm93aW5nIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2UgdG8gYHN0YXRlc19lcXVhbGAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb3VsZCBhbHNvIHJldmVhbCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3Mgc3RlbW1pbmcgZnJvbSB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz05MDQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk3OS0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTgwOnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05ODEtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxNC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxNTpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxNi1cdFx0XHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTA0Ni1cdFx0XHRyZXR1cm4gZmFsc2U7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwNDc6XHRcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXHUwMDNlZnJhbWVbaV0sIGN1ci1cdTAwM2VmcmFtZVtpXSwgaW5zbl9pZHgsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTA0OC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjc0PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY3LVx0XHRcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzY4Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2OS1cdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXJfZnJhbWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzc3LVx0XHRcdFx0XHRpdGVyX3JlZyA9IFx1MDAyNmN1cl9mcmFtZS1cdTAwM2VyZWdzW0JQRl9SRUdfMV07XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNzg6XHRcdFx0XHRcdC8qIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgZHVlIHRvIHN0YXRlc19lcXVhbCgpLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzc5LVx0XHRcdFx0XHQgKiBzbyB3ZSBjYW4gYXNzdW1lIHZhbGlkIGl0ZXIgYW5kIHJlZyBzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTItXHRcdFx0XHRpZiAoc2wtXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVx1MDAzZW1heV9nb3RvX2RlcHRoIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzkzOlx0XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM5NC1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzk4LVx0XHRcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM5OTpcdFx0XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MDAtXHRcdFx0XHRcdGxvb3AgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwNi1cdFx0XHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDc6XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwOC1cdFx0XHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDM5LVx0XHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUpO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDQwOlx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ0MS1oaXQ6XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDc5LVx0XHRcdCAqXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0ODA6XHRcdFx0ICogLSBXaGVuIGEgdmVyaWZpY2F0aW9uIHBhdGggZW5jb3VudGVycyBhIGBzdGF0ZXNfZXF1YWwoLi4uLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDgxLVx0XHRcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjEzCgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU3RhdGUgVmlzaXRhdGlvbioqCgpPa2F5LCBzbyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2AgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFdoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gdGhlIHZlcmlmaWVyIGNvZGUgdGhhdCByZWxhdGUgdG8gdGhpcyBzdGF0ZSBtYW5hZ2VtZW50PyBMb29rcyBsaWtlIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MoKWAsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoKWAsIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKClgLCBhbmQgdGhhdCBoZWxwZXIsIGBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpYCwgd2VyZSBhbGwgdG91Y2hlZC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGVpciBzY29wZSBiZWNhdXNlIHRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhleSYjMzk7cmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBvciBpZiB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsobWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzfHNldF90aW1lcl9jYWxsYmFja19zdGF0ZXxzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ny1cdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3ODpcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc5LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9hcnJheV9lbGVtLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDItXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5MDM6XHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwNC1cdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjAxOC1cdFx0XHQgKiB3aXRoIGRpZmZlcmVudCBtYXBzIGFuZCB0aGUgcmVnaXN0ZXIgc3RhdGVzIHByZXBhcmVkIGJ5XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMTk6XHRcdFx0ICogc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlIHdpbGwgYmUgYWNjdXJhdGUuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMjAtXHRcdFx0ICpcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM3My1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzc0Olx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTYtXHQubWFwX3NlcV9zaG93X2VsZW0gPSBodGFiX21hcF9zZXFfc2hvd19lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NzpcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk4LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc2LVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc3Olx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk3LVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTk4Olx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTktXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjEtXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjI6XHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMy1cdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTA2PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwMjItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwMjM6aW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDI0LVx0XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMDY5PXN0YXRpYyBpbnQgc2V0X21hcF9lbGVtX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDc5LVx0bWFwID0gaW5zbl9hdXgtXHUwMDNlbWFwX3B0cl9zdGF0ZS5tYXBfcHRyO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDgwOlx0aWYgKCFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDgxLVx0ICAgICFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA4NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDA4NjpcdGVyciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKGVudiwgY2FsbGVyLCBjYWxsZWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDg3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwOTU9c3RhdGljIGludCBzZXRfbG9vcF9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExNi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDExNzpzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTE4LVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDIwNT1zdGF0aWMgaW50IHNldF9yYnRyZWVfYWRkX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjM3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjM4OnN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjM5LVx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MjY9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwOTcyLVx0XHRlcnIgPSBwdXNoX2NhbGxiYWNrX2NhbGwoZW52LCBpbnNuLCBpbnNuX2lkeCwgbWV0YS5zdWJwcm9nbm8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA5NzM6XHRcdFx0XHRcdCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwOTc0LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3Njg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4OTQtXHRcdGVyciA9IHB1c2hfY2FsbGJhY2tfY2FsbChlbnYsIGluc24sIGluc25faWR4LCBtZXRhLnN1YnByb2dubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg5NTpcdFx0XHRcdFx0IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4OTYtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MDQtXHRcdGVyciA9IHB1c2hfY2FsbGJhY2tfY2FsbChlbnYsIGluc24sIGluc25faWR4LCBtZXRhLnN1YnByb2dubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkwNTpcdFx0XHRcdFx0IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTA2LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTc1CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDE0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbnMgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhpcyBwYXRjaCwgYW5kIHRoZSBrZXkgaXMgcGlucG9pbnRpbmcgdGhlIG1vc3QgcmVsZXZhbnQgY29kZS4gRmlyc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIgaXMgYGJwZl9jaGVja2AsIGJ1dCB0aGF0JiMzOTtzIGEgZ2VuZXJhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCBvciBkaXJlY3RseSByZWxldmFudCB0byB0aGUgY2hhbmdlcyB0byBsaXN0IGluIGBGb2N1c1N5bWJvbHNgLgoKSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIGl0IGxvb2tzIGxpa2U6CgoqICAgSW4gYGtlcm5lbC9icGYvY2ZnLmNgLCBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl9jaGVja19jZmdgICh3aGljaCBjYWxscyBgdmlzaXRfaW5zbmAgd2hpY2ggY2FsbHMgYHB1c2hfaW5zbmApLgoqICAgVGhlbiBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AsIHRoZXJlJiMzOTtzIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AsIGBicGZfb3B0X3JlbW92ZV9kZWFkX2NvZGVgLCBhbmQgYGJwZl9vcHRfcmVtb3ZlX25vcHNgLgoqICAgTW92aW5nIG9uIHRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgSSBoYXZlIGBjaGVja19wa3RfcHRyX2lkc2AsIGByZWdzYWZlYCwgYW5kIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuCiogICBGaW5hbGx5LCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSBuZWVkIHRvIGxvb2sgYXQgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGFuZCBgYnBmX2NoZWNrYCAoYWdhaW4pLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBzeW1ib2xzIGFyZSBpbiBgdm1saW51eGAgb3IgaWYgdGhleSBnZXQgaW5saW5lZC4gV2l0aCBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBleHBvcnRlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYSBiaXQgdHJpY2tpZXIsIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgaW5saW5lZCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyJiMzOTtzIG9wdGltaXphdGlvbnMuIFNvLCB0byBiZSBzYWZlLCBJJiMzOTtsbCBsaXN0IGJvdGggbm9uLXN0YXRpYyBzeW1ib2xzIGFzIHdlbGwgYXMgc3RhdGljIG9uZXMgaWYgdGhleSBhcmVuJiMzOTt0IHN0YXRpYyBpbmxpbmUgaW4gaGVhZGVycy4gU2VjdGlvbiA0IGNvbmZpcm1zIHRoaXM6IEkgbmVlZCB0byB0YXJnZXQgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqIGFuZCBlbnRyeXBvaW50cywgYW5kIGFjY291bnQgZm9yIHN0YXRpYyBpbmxpbmVzLgoKU28sIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBsaXN0LCBjb25maXJtaW5nIHRoYXQgYWxsIHRoZSBjb2RlIGZyb20gdGhlIGRpZmYgaXMgaW5jbHVkZWQ6CjEuICBgcHVzaF9pbnNuYCBhbmQgYGJwZl9jaGVja19jZmdgIGluIGBjZmcuY2AKMi4gIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AsIGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0YCBpbiBgZml4dXBzLmNgCjMuICBgY2hlY2tfcGt0X3B0cl9pZHNgLCBgcmVnc2FmZWAsIGFuZCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2AKNC4gIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgIGFuZCBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHlgIGluIGB2ZXJpZmllci5jYAoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGFueSBkZXBlbmRlbmNpZXMgb24gY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbi4gQ2hlY2tpbmcgdGhlIGNvZGUgZm9yIGlmZGVmcyBpbiBgY2ZnLmNgLCBgZml4dXBzLmNgLCBgc3RhdGVzLmNgLCBhbmQgYHZlcmlmaWVyLmNgLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkuIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgYWxsIEkgbmVlZCwgYW5kIGl0IHNlbGVjdHMgQlBGLgoKTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogSXMgdGhpcyBgV29ydGhGdXp6aW5nPXRydWVgPyBBYnNvbHV0ZWx5LiBUaGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBjb250cm9sIGZsb3cgZ3JhcGggY29uc3RydWN0aW9uLCBpbnN0cnVjdGlvbiByZXdyaXRpbmcsIHBhY2tldCBwb2ludGVyIHN0YXRlIGNoZWNrcywgYW5kIGxvY2sgSUQgYXNzaWdubWVudC4gVGhpcyBhbGwgdG91Y2hlcyBjb3JlLCByZWFjaGFibGUgbG9naWMsIGFuZCB0aGUgQlBGIHN5c3RlbSBjYWxsIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LgoKT2theSwgbGV0JiMzOTtzIG1ha2UgYSBmaW5hbCwgYWNjdXJhdGUgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDoKCiogICBgYnBmX2NoZWNrX2NmZ2AKKiAgIGBwdXNoX2luc25gCiogICBgYnBmX3BhdGNoX2luc25fZGF0YWAKKiAgIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgCiogICBgY2hlY2tfcGt0X3B0cl9pZHNgCiogICBgcmVnc2FmZWAKKiAgIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAKKiAgIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgCiogICBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYAoqICAgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgCgpJIG5lZWQgdG8gbWFrZSBzdXJlIG5vbmUgb2YgdGhlc2UgYXJlIGdlbmVyaWMgb3IgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFuZCBub3QgZ2VuZXJhbCBrZXJuZWwgbGlmZWN5Y2xlIGZ1bmN0aW9ucywgd2hpY2ggaXMgZ29vZC4KCkZpbmFsbHksIEkgY2FuIHF1aWNrbHkgc3VtbWFyaXNlIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBzZXJpZXMgaXMgbW9kaWZ5aW5nIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGludm9sdmVkIGluIHZhbGlkYXRpbmcgY29udHJvbCBmbG93LCBzaWduYWwgaGFuZGxpbmcsIHBvaW50ZXIgY29tcGFyaXNvbiwgYW5kIHVuaXF1ZSBsb2NrIElEIGFzc2lnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYXJlIGV4ZXJjaXNlZCB0aHJvdWdoIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLCBzbwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVja19jZmcmIzM0OywKICAgICYjMzQ7cHVzaF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9wYXRjaF9pbnNuX2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O2NoZWNrX3BrdF9wdHJfaWRzJiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAgICYjMzQ7bWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzJiMzNDssCiAgICAmIzM0O3NldF90aW1lcl9jYWxsYmFja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrX2NmZyYjMzQ7LAogICAgJiMzNDtwdXNoX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXJpZmllcl9yZW1vdmVfaW5zbnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfcGt0X3B0cl9pZHMmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBleGVjdXRpb24gcGF0aHMsIGluY2x1ZGluZyBjb250cm9sIGZsb3cgZ3JhcGggKENGRykgc3VicHJvZ3JhbSBib3VuZGFyeSBjaGVja3MsIHNpZ25hbC1hd2FyZSBpbnN0cnVjdGlvbiByZXdyaXRpbmcvcmVtb3ZhbCBwYXNzZXMsIHBhY2tldCBwb2ludGVyIHN0YXRlIGVxdWl2YWxlbmNlIGNvbXBhcmlzb24gKHJlZ3NhZmUpLCBhbmQgbG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgY2FsbGJhY2sgYXJndW1lbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCBkaXJlY3RseSBhZmZlY3QgdmVyaWZpY2F0aW9uIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW52YXJpYW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBDRkcgYW5hbHlzaXMgaW4gc2V2ZXJhbCBhcmVhczpcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXG4yLiBWYWxpZGF0ZXMgc3VicHJvZ3JhbSBib3VuZGFyaWVzIG9uIGZhbGwtdGhyb3VnaCBlZGdlcyBpbiBga2VybmVsL2JwZi9jZmcuY2AuXG4zLiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0YCkgdG8gcHJldmVudCBub24ta2lsbGFibGUgbG9vcHMgZHVyaW5nIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHBhdGNoaW5nL3JlbW92YWwgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLlxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLiBBbGwgc3RydWN0IGZpZWxkcyBhZGRlZCAoYHBrdF9wdHJfZGVsdGFgLCBgcGt0X3B0cl9kZWx0YV9zZXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgdmVyaWZpZXIgbG9naWMsIGNvbnRyb2wtZmxvdyB2YWxpZGF0aW9uLCBhbmQgc2lnbmFsLWhhbmRsaW5nIGltcHJvdmVtZW50cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDQ3LDYgJiM0Mzs0NDcsMTEgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKIAlyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQocmVnX2J0Zl9yZWNvcmQocmVnKSwgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xMDAzNSw2ICYjNDM7MTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi8KIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzNdOwpAQCAtMTAxMzEsNiAmIzQzOzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMTAyNDksNiAmIzQzOzEwMjYwLDkgQEAgc3RhdGljIGludCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBtYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiB1bnVzZWQgKi8KIAlicGZfbWFya19yZWdfbm90X2luaXQoZW52LCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfbG9hZF9zaWduYWwuYwpAQCAtMCwwICYjNDM7MSwxMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTk9QX0NOVAkJMzI3NjgKJiM0MzsjZGVmaW5lIE1JTl9LSUxMX0RFTEFZX05TCSgxMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsjZGVmaW5lIFJFQVBfVElNRU9VVF9OUwkJKDEwMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsKJiM0MztzdGF0aWMgX191NjQgbW9ub3RvbmljX25zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiYjNDM7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3RzKTsKJiM0MzsJcmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgJiM0MzsgdHMudHZfbnNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2xlZXBfbnMoX191NjQgZHVyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7CiYjNDM7CQkudHZfc2VjID0gZHVyYXRpb24gLyAxMDAwMDAwMDAwVUxMLAomIzQzOwkJLnR2X25zZWMgPSBkdXJhdGlvbiAlIDEwMDAwMDAwMDBVTEwsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXdoaWxlIChuYW5vc2xlZXAoJmFtcDt0cywgJmFtcDt0cykgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUikKJiM0MzsJCTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dCkKJiM0Mzt7CiYjNDM7CV9fdTY0IGRlYWRsaW5lID0gbW9ub3RvbmljX25zKCkgJiM0MzsgdGltZW91dDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd2FpdHBpZChwaWQsIHN0YXR1cywgV05PSEFORyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0gd2hpbGUgKG1vbm90b25pY19ucygpICZsdDsgZGVhZGxpbmUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBOVUxMOwomIzQzOwlfX3U2NCBzdGFydCwgY29udHJvbF90aW1lLCBraWxsX2RlbGF5OwomIzQzOwlpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTsKJiM0MzsJaW50IHByb2dfZmQgPSAtMSwgc3RhdHVzID0gMDsKJiM0MzsJcGlkX3QgcGlkID0gLTE7CiYjNDM7CWNoYXIgYnl0ZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJaW5zbnMgPSBjYWxsb2MoTk9QX0NOVCAmIzQzOyAyLCBzaXplb2YoKmluc25zKSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihpbnNucywgJiMzNDtjYWxsb2MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOT1BfQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluc25zW2ldID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfMSk7CiYjNDM7CWluc25zW05PUF9DTlRdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwlpbnNuc1tOT1BfQ05UICYjNDM7IDFdID0gQlBGX0VYSVRfSU5TTigpOwomIzQzOwomIzQzOwlzdGFydCA9IG1vbm90b25pY19ucygpOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsICYjMzQ7R1BMJiMzNDssCiYjNDM7CQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwljb250cm9sX3RpbWUgPSBtb25vdG9uaWNfbnMoKSAtIHN0YXJ0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfcHJvZ19sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJcHJvZ19mZCA9IC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTk9QX0NOVDsgaSYjNDM7JiM0MzspCiYjNDM7CQlpbnNuc1tpXSA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMCk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHBpcGUocGlwZWZkKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIXBpZCkgewomIzQzOwkJY2xvc2UocGlwZWZkWzBdKTsKJiM0MzsJCWlmICh3cml0ZShwaXBlZmRbMV0sICYjMzQ7eCYjMzQ7LCAxKSAhPSAxKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJY2xvc2UocGlwZWZkWzFdKTsKJiM0MzsJCXByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgJiMzNDtHUEwmIzM0OywKJiM0MzsJCQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwkJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShwcm9nX2ZkKTsKJiM0MzsJCV9leGl0KHByb2dfZmQgJmx0OyAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlwaXBlZmRbMV0gPSAtMTsKJiM0MzsJcmV0ID0gcmVhZChwaXBlZmRbMF0sICZhbXA7Ynl0ZSwgMSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgMSwgJiMzNDtjaGlsZF9yZWFkeSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcAomIzQzOwkgKiByZW1vdmFsIHBhc3MgaXMgcXVhZHJhdGljLCBzbyBmb3VyIGNvbnRyb2wtbG9hZCB0aW1lcyBzdGlsbCBsZWF2ZXMgYQomIzQzOwkgKiB3aWRlIHdpbmRvdyBpbiB3aGljaCBhbiBhZmZlY3RlZCBrZXJuZWwgaXMgcmV3cml0aW5nIGluc3RydWN0aW9ucy4KJiM0MzsJICovCiYjNDM7CWtpbGxfZGVsYXkgPSBNQVgoY29udHJvbF90aW1lICogNCwgTUlOX0tJTExfREVMQVlfTlMpOwomIzQzOwlzbGVlcF9ucyhraWxsX2RlbGF5KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCAmIzM0O2tpbGwmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXN0YXJ0ID0gbW9ub3RvbmljX25zKCk7CiYjNDM7CXJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsICZhbXA7c3RhdHVzLCBSRUFQX1RJTUVPVVRfTlMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgJiMzNDtwcm9nX2xvYWRfa2lsbGFibGUmIzM0OykpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2NvbnRyb2wgbG9hZCAlbGx1IHVzLCBjaGlsZCBzdGlsbCBhbGl2ZSAlbGx1IHVzIGFmdGVyIFNJR0tJTExcbiYjMzQ7LAomIzQzOwkJCWNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CXBpZCA9IC0xOwomIzQzOwlBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpICZhbXA7JmFtcDsgV1RFUk1TSUcoc3RhdHVzKSA9PSBTSUdLSUxMLAomIzQzOwkJICAgICYjMzQ7a2lsbGVkX2J5X3NpZ2tpbGwmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHByb2dfZmQpOwomIzQzOwlpZiAocGlwZWZkWzBdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMF0pOwomIzQzOwlpZiAocGlwZWZkWzFdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0MzsJfQomIzQzOwlmcmVlKGluc25zKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlMDlkZDY2ZjQ2NzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDczIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9tYXA7CiYjNDM7CiYjNDM7c3RydWN0IGxvY2tfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgQlBGIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIOKAkyBgTmVlZHNLTVNBTiA9IHRydWUvZmFsc2VgIOKAkyBhbmQgdG8gZG9jdW1lbnQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhhdCBkZWNpc2lvbiAoYEtNU0FOUmVhc29uaW5nYCkuIEkgbmVlZCB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGVzZSBjaGFuZ2VzIGFjcm9zcyB0aGUgZmlsZXMgcHJvdmlkZWQuCgpGaXJzdCwgSSBzZWUgYSBuZXcgbWVtYmVyLCBgcGt0X3B0cl9kZWx0YWAsIGFuZCBgcGt0X3B0cl9kZWx0YV9zZXRgIGFkZGVkIHRvIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgdHJhY2tpbmcgcmVsYXRpdmUgZGlzcGxhY2VtZW50cyBvZiBwYWNrZXQgcG9pbnRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHBvdGVudGlhbCBkYXRhIHJhY2VzLgoKSW4gYGtlcm5lbC9icGYvY2ZnLmNgLCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBDb250cm9sIEZsb3cgR3JhcGggKENGRykgdmFsaWRhdGlvbiB0byByZWplY3QgZmFsbHRocm91Z2ggb3V0IG9mIHN1YnByb2dyYW1zLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kLCBzb2xpZCBkZWZlbnNpdmUgbWVhc3VyZSBhZ2FpbnN0IGNvbnRyb2wtZmxvdyBlcnJvcnMuIEl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGEgS01TQU4gY29uY2VybiBkaXJlY3RseSwgYnV0IGEgZmxhd2VkIENGRyBjb3VsZCBsZWFkIHRvIG90aGVyIGlzc3Vlcy4KCk5leHQsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgdGhlIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgZnVuY3Rpb25zIG5vdyBhYm9ydCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZldHkgY2hlY2sgZHVyaW5nIGluc3RydWN0aW9uIG1hbmlwdWxhdGlvbi4gIFdoaWxlIGhhbmRsaW5nIHNpZ25hbHMgaXMgZ2VuZXJhbGx5IGdvb2QgcHJhY3RpY2UsIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZyBhIHN0cm9uZyBLTVNBTiBpbXBsaWNhdGlvbiBoZXJlLCB1bmxlc3MgdGhlIGFib3J0IGxlYXZlcyBzb21ldGhpbmcgaW4gYW4gdW5zYWZlIHN0YXRlLgoKYGtlcm5lbC9icGYvc3RhdGVzLmNgIGludHJvZHVjZXMgYGNoZWNrX3BrdF9wdHJfaWRzYCBhbmQgdXBkYXRlcyBgcmVnc2FmZWAuICBUaGUgYWRkaXRpb24gb2YgdGhlIGBjaGVja19wa3RfcHRyX2lkc2AgZnVuY3Rpb24gYW5kIHRoZSBsb2dpYyB0byB0cmFjayBwYWNrZXQgcG9pbnRlciBkaXNwbGFjZW1lbnQgd2l0aGluIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBzbyBmYXIuIFRoaXMgYXBwZWFycyB0byBiZSBhaW1lZCBhdCBtYWludGFpbmluZyByZWxhdGl2ZSBkaXNwbGFjZW1lbnQgb2YgcGFja2V0IHBvaW50ZXJzIGFjcm9zcyBCUEYgcHJvZ3JhbSB0cmFuc2Zvcm1hdGlvbnMsIGFuZCB0aGlzIG1pZ2h0IGludHJvZHVjZSBzb21lIHBvdGVudGlhbCByaXNrcy4gVGhlIGV4cGxpY2l0IGNoZWNrcyBmb3IgYFMzMl9NSU5gIGFuZCBgUzMyX01BWGAgZm9yIHRoZSBkZWx0YSBhcmUgZ29vZC4gVGhlIGBjaGVja19pZHNgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYW4gb2xkZXIgY29uc3RydWN0IHRoYXQgdGhpcyBjaGFuZ2UgYnVpbGRzIHVwb24uCgpMZXQgbWUgZXhhbWluZSB3aGVyZSBgc3RydWN0IGJwZl9pZG1hcGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZldGltZSBhbmQgc2NvcGUgb2YgdGhpcyBuZXcgcGFja2V0IHBvaW50ZXIgdHJhY2tpbmcuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBrZXJuZWwgY29kZSBmb3IgYWxsb2NhdGlvbnMgYW5kIHVzZXMgb2YgdGhpcyBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIHBvcHVsYXRlZCBhbmQgZGVhbGxvY2F0ZWQgYW5kIHdobyBoYXMgYWNjZXNzIHRvIGl0LiBBbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgZGF0YSBhY2Nlc3Mgcmlza3Mgd2l0aGluIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgYSBtYWpvciBjb25jZXJuIGZvciBLTVNBTi4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gb2YgdGhpcyBtYXAuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgYmUgZm9jdXNpbmcgbXkgS01TQU4gYW5hbHlzaXMuCgpGaW5hbGx5LCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSBzZWUgYSBmdW5jdGlvbiBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHlgLiBJdCBhcHBlYXJzIHRvIGFkZHJlc3MgbG9jayBpZGVudGl0eSBpbiBjYWxsYmFja3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBhcnJheSBtYXBzLiBJdCBjaGVja3MgdG8gc2VlIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVsZW1lbnQgaW4gdGhlIG1hcCBhbmQgdGhlIG1hcCBpcyBvZiB0eXBlIGBCUEZfTUFQX1RZUEVfQVJSQVlgLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi0mZ3Q7aWRfZ2VuO2AgdG8gYXNzaWduIGFuIElEIHRvIGEgcmVnaXN0ZXIgcG9pbnRpbmcgdG8gYSBzcGlubG9jayBpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIHRoZSBtYXAgZG9lc24mIzM5O3QgaGF2ZSBhIHN0YXRpYyBpZGVudGl0eS4gVGhpcyBhcHBlYXJzIHJlbGV2YW50IGZvciBwcm90ZWN0aW5nIHNwaW5sb2NrcyBpbiB0aGUgY29udGV4dCBvZiBjYWxsYmFja3MuIFRoZSBLTVNBTiBpbXBsaWNhdGlvbnMgYXJlIGxlc3Mgb2J2aW91cyBoZXJlLCBidXQgSSBtdXN0IG5vdCBkaXNjb3VudCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBwb2ludGVyIG1hbmlwdWxhdGlvbi4KClRoZSBzZWxmdGVzdHMgYXJlIGEgZ29vZCBzaWduOyBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGVtIHRvIHNlZSB3aGF0IHNjZW5hcmlvcyB0aGV5IGNvdmVyLiBUZXN0cyBmb3Igc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwcm9ncmFtIGxvYWQsIGNhbGxiYWNrIGxvY2sgaWRlbnRpdHksIGNvcmUgcmVsb2MgcmF3LCBhbmQgeGRwIHJlZ3NhZmUgYWxsIHNlZW0gcmVsZXZhbnQgdG8gcG90ZW50aWFsIGRhdGEgcmFjZSBpc3N1ZXMuCgpPdmVyYWxsLCB0aGUgcGFja2V0IHBvaW50ZXIgdHJhY2tpbmcgYW5kIHRoZSBzcGlubG9jayBwcm90ZWN0aW9uIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXJlYXMgdG8gcmVxdWlyZSBjYXJlZnVsIHNjcnV0aW55IGZvciBLTVNBTiwgYW5kIG15IGBncmVwcGVyYCBzZWFyY2ggZm9yIGBzdHJ1Y3QgYnBmX2lkbWFwYCB3aWxsIGJlIGNydWNpYWwgdG8gZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGBOZWVkc0tNU0FOYCB2YWx1ZSBhbmQgd3JpdGluZyB0aGUgYEtNU0FOUmVhc29uaW5nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJwZl9pZG1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTg1ND1zdHJ1Y3QgYnBmX2lkX3BhaXIge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtODYwLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo4NjE6c3RydWN0IGJwZl9pZG1hcCB7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTg2Mi1cdHUzMiB0bXBfaWRfZ2VuO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTIwPXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTk2Ny1cdHVuaW9uIHtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTY4Olx0XHRzdHJ1Y3QgYnBmX2lkbWFwIGlkbWFwX3NjcmF0Y2g7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTk2OS1cdFx0c3RydWN0IGJwZl9pZHNldCBpZHNldF9zY3JhdGNoO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MzAyPXN0YXRpYyBib29sIHJhbmdlX3dpdGhpbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMzE4LSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzozMTk6c3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMjAte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MzU2PXN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzozNTg6XHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1OS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTctICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQxODpzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTkte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NTI2PXN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUyNy1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1Mjg6XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI5LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTU0Mj1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDM6XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0NC1cdFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03Mzc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3Mzg6XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzM5LVx0XHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9ODgyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4ODM6XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxua2VybmVsL2JwZi9zdGF0ZXMuYy04ODQtXHRcdFx0ICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MDU6XHRcdCAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTA2LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LXtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwOTpcdHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTAtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0Mjc9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Mzc6c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ1NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDU1OnN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ1Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0NjQ9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjctXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Njg6XHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ2OS1cdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLZXJuZWwgQlBGIFN0YXRlIE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGNoZWNrX2lkc2AgYW5kIGByZXNldF9pZG1hcF9zY3JhdGNoYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIGtlcm5lbCBpcyBtYW5hZ2luZyBpdHMgaW50ZXJuYWwgc3RhdGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgSUQgbWFwcGluZy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGFuZCBzdGFydCBkaWdnaW5nLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgY2hlY2tpbmcgYW5kIHBvdGVudGlhbGx5IHJlc2V0dGluZyB0aGUgSUQgbWFwIHNjcmF0Y2ggYXJlYSBsaXZlcy4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IElEcyBhcmUgdmFsaWRhdGVkLCBwb3RlbnRpYWxseSByZS1tYXBwZWQsIGFuZCBob3cgdGVtcG9yYXJ5IHNjcmF0Y2ggc3BhY2UgaXMgaGFuZGxlZCB0byBrZWVwIHRoZSBCUEYgZXhlY3V0aW9uIGVudmlyb25tZW50IGNsZWFuIGFuZCBjb3JyZWN0LiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBrZXkgdG8gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyZSBhbmQgZWZmaWNpZW50IEJQRiBwcm9ncmFtIGV4ZWN1dGlvbjsgdGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdHtcbiAzMjE6XHRcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuIDMyMjpcdFx0dW5zaWduZWQgaW50IGk7XG4gMzIzOlx0XG4gMzI0Olx0XHQvKiBlaXRoZXIgYm90aCBJRHMgc2hvdWxkIGJlIHNldCBvciBib3RoIHNob3VsZCBiZSB6ZXJvICovXG4gMzI1Olx0XHRpZiAoISFvbGRfaWQgIT0gISFjdXJfaWQpXG4gMzI2Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzMjc6XHRcbiAzMjg6XHRcdGlmIChvbGRfaWQgPT0gMCkgLyogY3VyX2lkID09IDAgYXMgd2VsbCAqL1xuIDMyOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzMzA6XHRcbiAzMzE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspIHtcbiAzMzI6XHRcdFx0aWYgKG1hcFtpXS5vbGQgPT0gb2xkX2lkKVxuIDMzMzpcdFx0XHRcdHJldHVybiBtYXBbaV0uY3VyID09IGN1cl9pZDtcbiAzMzQ6XHRcdFx0aWYgKG1hcFtpXS5jdXIgPT0gY3VyX2lkKVxuIDMzNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdC8qIFJlYWNoZWQgdGhlIGVuZCBvZiBrbm93biBtYXBwaW5nczsgaGF2ZW4mIzM5O3Qgc2VlbiB0aGlzIGlkIGJlZm9yZSAqL1xuIDMzOTpcdFx0aWYgKGlkbWFwLVx1MDAzZWNudCBcdTAwM2MgQlBGX0lEX01BUF9TSVpFKSB7XG4gMzQwOlx0XHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLm9sZCA9IG9sZF9pZDtcbiAzNDE6XHRcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0uY3VyID0gY3VyX2lkO1xuIDM0MjpcdFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO1xuIDM0MzpcdFx0XHRpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuIDM0NDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzNDU6XHRcdH1cbiAzNDY6XHRcbiAzNDc6XHRcdC8qXG4gMzQ4Olx0XHQgKiBpZG1hcCBzbG90cyBhcmUgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycyBhbmQgc3RhY2sgc2xvdHMuXG4gMzQ5Olx0XHQgKiBTaW5jZSByZWZlcmVuY2VkIGR5bnB0cnMgYWNxdWlyZSBpbnRlcm1lZGlhdGUgcmVmZXJlbmNlcyB0aGF0IGRvXG4gMzUwOlx0XHQgKiBub3QgbGl2ZSBpbiBlaXRoZXIsIHNvIHRoZSBtYXAgY2FuIGJlIGV4aGF1c3RlZC4gU2luY2UgaXQgaXMgdW5saWtlbHksXG4gMzUxOlx0XHQgKiBmYWlsIHRoZSB2ZXJpZmljYXRpb24gYnkgdHJlYXRpbmcgdGhlIHN0YXRlcyBhcyBub3QgZXF1aXZhbGVudC5cbiAzNTI6XHRcdCAqL1xuIDM1MzpcdFx0cmV0dXJuIGZhbHNlO1xuIDM1NDpcdH1cbiAzNTU6XHRcbiAzNTY6XHRzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuIDM1NzpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXG4gMzU4Olx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gMzU5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGByZXNldF9pZG1hcF9zY3JhdGNoYCoqCgpSaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSwgYW5kIEkgcmVhbGx5IG1lYW4gaXQsIHRvIGFsc28gc2NydXRpbml6ZSBgcmVzZXRfaWRtYXBfc2NyYXRjaGAuIEl0JiMzOTtzIGVhc3kgdG8gZm9jdXMgb24gdGhlIHByaW1hcnkgaXNzdWUsIGJ1dCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCB0aGVzZSBzZWVtaW5nbHkgcGVyaXBoZXJhbCBmdW5jdGlvbnMgY2FuIG9mdGVuIGhhcmJvciBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cyB0aGF0IHVsdGltYXRlbHkgYml0ZSB5b3UgaW4gdGhlIHJlYXIgbGF0ZXIuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiB0aGUgY29yZSBsb2dpYywgYnV0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIGByZXNldF9pZG1hcF9zY3JhdGNoYCBjb3VsZCBwcmV2ZW50IGEgd29ybGQgb2YgaHVydCBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGludm9sdmVkIGluIGFueSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwIHByb2NlZHVyZXMuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl0JiMzOTtzIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGV2ZW4gaWYgaXQgc2VlbXMgdW5yZWxhdGVkIGF0IGZpcnN0IGdsYW5jZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGFuZCB0aGF0IHdhcnJhbnRzIGFuIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwNTpcdH1cbjEwMDY6XHRcbjEwMDc6XHRzdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4xMDA4Olx0e1xuMTAwOTpcdFx0c3RydWN0IGJwZl9pZG1hcCAqaWRtYXAgPSBcdTAwMjZlbnYtXHUwMDNlaWRtYXBfc2NyYXRjaDtcbjEwMTA6XHRcbjEwMTE6XHRcdGlkbWFwLVx1MDAzZXRtcF9pZF9nZW4gPSBlbnYtXHUwMDNlaWRfZ2VuO1xuMTAxMjpcdFx0aWRtYXAtXHUwMDNlY250ID0gMDtcbjEwMTM6XHR9XG4xMDE0Olx0XG4xMDE1Olx0c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMDE2Olx0XHRcdFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcbjEwMTc6XHRcdFx0XHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxuMTAxODpcdFx0XHRcdCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuMTAxOTpcdHtcbjEwMjA6XHRcdHUzMiBpbnNuX2lkeDtcbjEwMjE6XHRcdGludCBpO1xuMTAyMjpcdFxuMTAyMzpcdFx0aWYgKG9sZC1cdTAwM2VjdXJmcmFtZSAhPSBjdXItXHUwMDNlY3VyZnJhbWUpXG4xMDI0Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBpZHN0YWNrX3B1c2hgIGFuZCBgaWRzdGFja19wb3BgIHdpdGggUmVzcGVjdCB0byBgaWRtYXBfc2NyYXRjaGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgYGlkc3RhY2tfcHVzaGAgYW5kIGBpZHN0YWNrX3BvcGAgaW50ZXJhY3Qgd2l0aCBgaWRtYXBfc2NyYXRjaGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgYGlkbWFwX3NjcmF0Y2hgIGxpa2VseSBzZXJ2ZXMgYXMgYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50ICpob3cqIGl0JiMzOTtzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGVzZSBzdGFjayBvcGVyYXRpb25zLiBJcyBpdCBhIHN0YWdpbmcgYXJlYSBmb3IgSURzIGJlZm9yZSBiZWluZyBwbGFjZWQgb24gdGhlIHN0YWNrPyBJcyBpdCB1c2VkIGZvciB2YWxpZGF0aW9uIG9yIGNvbmZsaWN0IGRldGVjdGlvbiBkdXJpbmcgcHVzaC9wb3Agb3BlcmF0aW9ucz8gT3IgcGVyaGFwcyBpdCBoYW5kbGVzIHRlbXBvcmFyeSBzdG9yYWdlIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGJlaW5nICYjMzQ7cG9wcGVkJiMzNDsgYW5kIGxhdGVyIHB1dCBzb21ld2hlcmUgZWxzZT8KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaGludHMgcmVnYXJkaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIENvdWxkIGNvbmN1cnJlbnQgY2FsbHMgdG8gdGhlc2Ugc3RhY2sgZnVuY3Rpb25zIGxlYWQgdG8gY29ycnVwdGlvbiBvZiBkYXRhIGluIGBpZG1hcF9zY3JhdGNoYD8gQXJlIHRoZXJlIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2wgbWVhc3VyZXM/IFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZXNlIHRoaW5ncyB3aWxsIGd1aWRlIG15IGFzc2Vzc21lbnQgb2YgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHNvdW5kbmVzcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNlZSBpZiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWx0ZXIgdGhlIHZhbHVlLCBpbiBhbnkgd2F5LCBvZiBgaWRtYXBfc2NyYXRjaGAuIFRoaXMgd2lsbCB0ZWxsIG1lIG1vcmUgYWJvdXQgaXRzIGV4cGVjdGVkIGJlaGF2aW91ci4KCkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcywgZm9jdXNpbmcgb24gaG93IGBpZG1hcF9zY3JhdGNoYCBpcyBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gdGhlIHN0YWNrIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgSSBuZWVkIHRvIGJlIGV4YWN0LCBzbyB0aGF0IEkgY2FuIHRoZW4gYXBwbHkgdGhpcyBrbm93bGVkZ2UgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQgc2VlIGlmIGl0IGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiBhIHNpbWlsYXIgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTQzMDpcdFxuOTQzMTpcdFx0ZXJyID0gX19yZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xuOTQzMjpcdFx0aWYgKCFlcnIpXG45NDMzOlx0XHRcdGJwZl9kaWFnX3JlY29yZF9yZWZfcmVsZWFzZShlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgaWQpO1xuOTQzNDpcdFx0cmV0dXJuIGVycjtcbjk0MzU6XHR9XG45NDM2Olx0XG45NDM3Olx0c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcbjk0Mzg6XHR7XG45NDM5Olx0XHRpbnQgaTtcbjk0NDA6XHRcbjk0NDE6XHRcdGlmICghaWQpXG45NDQyOlx0XHRcdHJldHVybiAwO1xuOTQ0MzpcdFxuOTQ0NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpJiM0MzsmIzQzOylcbjk0NDU6XHRcdFx0aWYgKGlkbWFwLVx1MDAzZW1hcFtpXS5vbGQgPT0gaWQpXG45NDQ2Olx0XHRcdFx0cmV0dXJuIDA7XG45NDQ3Olx0XG45NDQ4Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGlkbWFwLVx1MDAzZWNudCBcdTAwM2U9IEJQRl9JRF9NQVBfU0laRSkpXG45NDQ5Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuOTQ1MDpcdFxuOTQ1MTpcdFx0aWRtYXAtXHUwMDNlbWFwW2lkbWFwLVx1MDAzZWNudCYjNDM7JiM0MztdLm9sZCA9IGlkO1xuOTQ1MjpcdFx0cmV0dXJuIDA7XG45NDUzOlx0fVxuOTQ1NDpcdFxuOTQ1NTpcdHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG45NDU2Olx0e1xuOTQ1NzpcdFx0aWYgKCFpZG1hcC1cdTAwM2VjbnQpXG45NDU4Olx0XHRcdHJldHVybiAwO1xuOTQ1OTpcdFxuOTQ2MDpcdFx0cmV0dXJuIGlkbWFwLVx1MDAzZW1hcFstLWlkbWFwLVx1MDAzZWNudF0ub2xkO1xuOTQ2MTpcdH1cbjk0NjI6XHRcbjk0NjM6XHQvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi9cbjk0NjQ6XHRzdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZClcbjk0NjU6XHR7XG45NDY2Olx0XHR1MzIgbWFzayA9ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfRFlOUFRSKTtcbjk0Njc6XHRcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG45NDY4Olx0XHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG45NDY5Olx0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODEKCQkJCQkJCW91dHB1dDogMjkxCgkJCQkJCQl0aG91Z2h0czogODI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgcGllY2UgYnkgcGllY2UgYW5kIGFzc2VzcyB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBLTVNBTi4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBsZWFrZWQgdG8gdXNlcnNwYWNlLCBvciBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpGaXJzdCwgdGhlIGBicGZfaWRfcGFpcmAgc3RydWN0dXJlIHVwZGF0ZXMsIGluY2x1ZGluZyB0aGUgbmV3IGZpZWxkcyBgcGt0X3B0cl9kZWx0YWAgYW5kIGBwa3RfcHRyX2RlbHRhX3NldGAsIHNlZW0gc2FmZS4gVGhlIGluaXRpYWxpemF0aW9uIG9mIGBwa3RfcHRyX2RlbHRhX3NldGAgdG8gYGZhbHNlYCB3aXRoaW4gYGNoZWNrX2lkc2AgYW5kIHRoZSBzdWJzZXF1ZW50IHNldHRpbmcgb2YgYHBrdF9wdHJfZGVsdGFgIHdpdGhpbiBgY2hlY2tfcGt0X3B0cl9pZHNgIGVuc3VyZXMgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgc2V0cyB0aGVzZSBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vIHNjZW5hcmlvIHdoZXJlIHRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGBpZG1hcGAgaXMgcHJvcGVybHkgbWFuYWdlZCB3aXRoaW4gYGVudi0mZ3Q7aWRtYXBfc2NyYXRjaGAuIFNvLCBubyBjb25jZXJucyBoZXJlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCk5leHQsIHRoZSBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvY2ZnLmNgIHdpdGggdGhlIGBwdXNoX2luc24oKWAgbG9naWMsIHdoaWNoIGlzIGp1c3Qgc3RhbmRhcmQgbG9naWMgdmFsaWRhdGlvbiBvbiB0aGUgQlBGIENGRywgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBqdXN0IGEgY29udHJvbCBmbG93IHZlcmlmaWNhdGlvbi4KClRoZSBhZGRpdGlvbiBvZiBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCB3aXRoaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgIGFuZCBpdHMgdXNlIGluIGBicGZfcGF0Y2hfaW5zbl9kYXRhKClgIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zKClgIGlzIGFsbCBhYm91dCBoYW5kbGluZyBwb3RlbnRpYWwgc2lnbmFsIGludGVycnVwdGlvbnMuIFRoZSBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYXZvaWQgbG9uZyBzdGFsbHMgYW5kIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGdldHRpbmcgc3R1Y2suIFRoaXMgZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3BlcmF0aW9ucywgZWl0aGVyLgoKVGhlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIGludHJvZHVjZSBkaXN0aW5jdCBgaWRgIGFzc2lnbm1lbnRzIGZvciBjYWxsYmFjayBtYXAgcG9pbnRlcnMgd2hlbiBzcGVjaWZpYyBjb25kaXRpb25zIGFyZSBtZXQsIGFyZSBhbGwgYWJvdXQgc3RhdGUgdHJhY2tpbmcgd2l0aGluIHRoZSB2ZXJpZmllci4gVGhpcyBpcyBhIGNydWNpYWwgbWVjaGFuaXNtIHRvIHByZXZlbnQgcG90ZW50aWFsIGluY29ycmVjdCB1bmxvY2tpbmcgb2Ygc3BpbiBsb2Nrcy4gVGhlIGNvbmRpdGlvbnMgd2hlcmUgaXQgc2V0cyB0aGVzZSBJRHMgYXJlIGNhcmVmdWxseSB2ZXJpZmllZC4gU28sIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBkaXN0aW5jdCBgaWRgIGJhc2VkIG9uIGByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9ja2AgYW5kIHRoZSBtYXAgdmFsdWUgbm90IGJlaW5nIGEgb25lLWVsZW1lbnQgYXJyYXksIGFsc28gYXBwZWFycyBzYWZlIGFuZCBmb2N1c2VkIG9uIHRyYWNraW5nIHZlcmlmaWVyIHN0YXRlLgoKVGhlIGluY2x1c2lvbiBvZiB0aGUgc2VsZnRlc3RzIGNvdmVyaW5nIHRoZSBjaGFuZ2VzIGFuZCB0aGUgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBgYnBmX3Byb2dfbG9hZGAgaXMgaW1wb3J0YW50IGJ1dCBjb25maXJtcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGRlc2NyaWJlZCBsb2dpYy4KCkZpbmFsbHksIHRoZSBLTVNBTiBjcml0ZXJpYS4gQWZ0ZXIgY29uc2lkZXJpbmcgdGhlc2UgY2hhbmdlczogSSBhbSBjb25maWRlbnQgdGhhdCB0aGVzZSBwYXRjaGVzICoqZG8gbm90KiogaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0LiBUaGVyZSYjMzk7cyBubyByaXNrIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvZ2ljYWwgdmFsaWRhdGlvbiwgdmVyaWZpZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIEJQRiBvcGVyYXRpb25zLCBub3QgcmF3IG1lbW9yeSBtYW5pcHVsYXRpb24uIFRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmIGVuZm9yY2VzIHR5cGUgc2FmZXR5IGFuZCBib3VuZHMgY2hlY2tzIG9uIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgYSB2ZXJ5IHJvYnVzdCBtZWNoYW5pc20gZm9yIGVuc3VyaW5nIG92ZXJhbGwgbWVtb3J5IHNhZmV0eS4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGVzdGluZyB3aWxsIGJlIHN1ZmZpY2llbnQgaGVyZS4KCkkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTjogZmFsc2VgIGluIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgQ0ZHIGFuYWx5c2lzIGluIHNldmVyYWwgYXJlYXM6XG4xLiBBZGRzIHBhY2tldCBwb2ludGVyIGRpc3BsYWNlbWVudCB0cmFja2luZyBhY3Jvc3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAodXNpbmcgYGNoZWNrX3BrdF9wdHJfaWRzYCBhbmQgaW5pdGlhbGl6aW5nIGBwa3RfcHRyX2RlbHRhX3NldGAgaW4gYGNoZWNrX2lkc2ApLlxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxuMy4gQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGApIHRvIHByZXZlbnQgbm9uLWtpbGxhYmxlIGxvb3BzIGR1cmluZyBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiBwYXRjaGluZy9yZW1vdmFsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cbjQuIEVuc3VyZXMgZGlzdGluY3QgcmVnaXN0ZXIgSURzIGZvciBjYWxsYmFjayBtYXAgdmFsdWVzIHRoYXQgbWF5IHBvaW50IHRvIHNwaW4gbG9ja3MgdW5sZXNzIHRoZSBtYXAgaGFzIHN0YXRpYyBpZGVudGl0eSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS4gQWxsIHN0cnVjdCBmaWVsZHMgYWRkZWQgKGBwa3RfcHRyX2RlbHRhYCwgYHBrdF9wdHJfZGVsdGFfc2V0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHZlcmlmaWVyIGxvZ2ljLCBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYW5kIHNpZ25hbC1oYW5kbGluZyBpbXByb3ZlbWVudHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBDRkcgYW5hbHlzaXMgaW4gc2V2ZXJhbCBhcmVhczpcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXG4yLiBWYWxpZGF0ZXMgc3VicHJvZ3JhbSBib3VuZGFyaWVzIG9uIGZhbGwtdGhyb3VnaCBlZGdlcyBpbiBga2VybmVsL2JwZi9jZmcuY2AuXG4zLiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0YCkgdG8gcHJldmVudCBub24ta2lsbGFibGUgbG9vcHMgZHVyaW5nIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHBhdGNoaW5nL3JlbW92YWwgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLlxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLiBBbGwgc3RydWN0IGZpZWxkcyBhZGRlZCAoYHBrdF9wdHJfZGVsdGFgLCBgcGt0X3B0cl9kZWx0YV9zZXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgdmVyaWZpZXIgbG9naWMsIGNvbnRyb2wtZmxvdyB2YWxpZGF0aW9uLCBhbmQgc2lnbmFsLWhhbmRsaW5nIGltcHJvdmVtZW50cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoxMi44OTA3MDAwMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1OTIzMzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja19jZmdcIixcbiAgICBcInB1c2hfaW5zblwiLFxuICAgIFwiYnBmX3BhdGNoX2luc25fZGF0YVwiLFxuICAgIFwidmVyaWZpZXJfcmVtb3ZlX2luc25zXCIsXG4gICAgXCJjaGVja19wa3RfcHRyX2lkc1wiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgICBcIm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc1wiLFxuICAgIFwic2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlXCIsXG4gICAgXCJzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgQ0ZHIGFuYWx5c2lzIGluIHNldmVyYWwgYXJlYXM6XFxuMS4gQWRkcyBwYWNrZXQgcG9pbnRlciBkaXNwbGFjZW1lbnQgdHJhY2tpbmcgYWNyb3NzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgKHVzaW5nIGBjaGVja19wa3RfcHRyX2lkc2AgYW5kIGluaXRpYWxpemluZyBgcGt0X3B0cl9kZWx0YV9zZXRgIGluIGBjaGVja19pZHNgKS5cXG4yLiBWYWxpZGF0ZXMgc3VicHJvZ3JhbSBib3VuZGFyaWVzIG9uIGZhbGwtdGhyb3VnaCBlZGdlcyBpbiBga2VybmVsL2JwZi9jZmcuY2AuXFxuMy4gQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGApIHRvIHByZXZlbnQgbm9uLWtpbGxhYmxlIGxvb3BzIGR1cmluZyBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiBwYXRjaGluZy9yZW1vdmFsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cXG40LiBFbnN1cmVzIGRpc3RpbmN0IHJlZ2lzdGVyIElEcyBmb3IgY2FsbGJhY2sgbWFwIHZhbHVlcyB0aGF0IG1heSBwb2ludCB0byBzcGluIGxvY2tzIHVubGVzcyB0aGUgbWFwIGhhcyBzdGF0aWMgaWRlbnRpdHkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS4gQWxsIHN0cnVjdCBmaWVsZHMgYWRkZWQgKGBwa3RfcHRyX2RlbHRhYCwgYHBrdF9wdHJfZGVsdGFfc2V0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHZlcmlmaWVyIGxvZ2ljLCBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYW5kIHNpZ25hbC1oYW5kbGluZyBpbXByb3ZlbWVudHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGV4ZWN1dGlvbiBwYXRocywgaW5jbHVkaW5nIGNvbnRyb2wgZmxvdyBncmFwaCAoQ0ZHKSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGNoZWNrcywgc2lnbmFsLWF3YXJlIGluc3RydWN0aW9uIHJld3JpdGluZy9yZW1vdmFsIHBhc3NlcywgcGFja2V0IHBvaW50ZXIgc3RhdGUgZXF1aXZhbGVuY2UgY29tcGFyaXNvbiAocmVnc2FmZSksIGFuZCBsb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBjYWxsYmFjayBhcmd1bWVudHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIGRpcmVjdGx5IGFmZmVjdCB2ZXJpZmljYXRpb24gY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbnZhcmlhbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoxMi44OTA3MDU1MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjYwNDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyZWMyYTM4ZTk4M2JhMDAyNDMxZmZiNWJiMTc3MDdjNzM2MGRjZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxMToyMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDM2YjY1Nzk3ODc3ZDAuLjVjZjkyY2UxODUyMDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtODU0LDYgKzg1NCw4IEBAIHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUge1xcbiBzdHJ1Y3QgYnBmX2lkX3BhaXIge1xcbiBcXHR1MzIgb2xkO1xcbiBcXHR1MzIgY3VyO1xcbitcXHRzMzIgcGt0X3B0cl9kZWx0YTtcXG4rXFx0Ym9vbCBwa3RfcHRyX2RlbHRhX3NldDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfaWRtYXAge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xcbmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xcbisrKyBiL2tlcm5lbC9icGYvY2ZnLmNcXG5AQCAtMTAyLDYgKzEwMiw3IEBAIGVudW0ge1xcbiAgKi9cXG4gc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZztcXG4gXFx0aW50ICppbnNuX3N0YWNrID0gZW52LVxcdTAwM2VjZmcuaW5zbl9zdGFjaztcXG4gXFx0aW50ICppbnNuX3N0YXRlID0gZW52LVxcdTAwM2VjZmcuaW5zbl9zdGF0ZTtcXG4gXFxuQEAgLTEyMSw2ICsxMjIsMjYgQEAgc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGNoZWNrX3N1YnByb2dzKCkgcHJldmVudHMgY29udHJvbCBmbG93IGZyb20gZmFsbGluZyB0aHJvdWdoIGFcXG4rXFx0ICogc3VicHJvZ3JhbSBib3VuZGFyeSwgYnV0IHJ1bnMgYmVmb3JlIENPLVJFIHJlbG9jYXRpb25zIGNhbiByZXdyaXRlIGFuXFxuK1xcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cXG4rXFx0ICogYmVmb3JlIGNvbnN0cnVjdGluZyB0aGUgQ0ZHIHVzZWQgYnkgbGF0ZXIgcGVyLXN1YnByb2dyYW0gcGFzc2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcXG4rXFx0XFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xcbitcXHRcXHRpZiAodyBcXHUwMDNjIHN1YnByb2ctXFx1MDAzZXN0YXJ0IHx8IHcgXFx1MDAzZT0gKHN1YnByb2cgKyAxKS1cXHUwMDNlc3RhcnQpIHtcXG4rXFx0XFx0XFx0dmVyYm9zZV9saW5mbyhlbnYsIHQsIFxcXCIlZDogXFxcIiwgdCk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxcXFxuXFxcIiwgdCwgdyk7XFxuK1xcdFxcdFxcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxcbitcXHRcXHRcXHRcXHRlbnYsIHQsIFxcXCJmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiS2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCJJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXFxcIixcXG4rXFx0XFx0XFx0XFx0dCwgdyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChlID09IEJSQU5DSCkge1xcbiBcXHRcXHQvKiBtYXJrIGJyYW5jaCB0YXJnZXQgZm9yIHN0YXRlIHBydW5pbmcgKi9cXG4gXFx0XFx0bWFya19wcnVuZV9wb2ludChlbnYsIHcpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JzZWFyY2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZGlzYXNtLmhcXFwiXFxuIFxcbkBAIC0zMDYsMTIgKzMwNywyOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXFxuIFxcdH1cXG4gfVxcbiBcXG4rLypcXG4rICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cXG4rICogTyhwcm9nLVxcdTAwM2VsZW4pIG9wZXJhdGlvbiBwZXIgaW5zdHJ1Y3Rpb24uIEtlZXAgdGhlaXIgc2hhcmVkIHByaW1pdGl2ZXNcXG4rICoga2lsbGFibGUgYW5kIHByZWVtcHRpYmxlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCh2b2lkKVxcbit7XFxuK1xcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpuZXdfZGF0YSA9IE5VTEw7XFxuIFxcbitcXHRpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuIFxcdGlmIChsZW4gXFx1MDAzZSAxKSB7XFxuIFxcdFxcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgYXJyYXlfc2l6ZShlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbiArIGxlbiAtIDEsXFxuQEAgLTUyMyw2ICs1NDAsOSBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxcbiBcXHR1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4rXFxuIFxcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgpKVxcbiBcXHRcXHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcXG4gXFxuQEAgLTI2NjYsNCArMjY4NiwzIEBAIGludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xcbkBAIC0zMzksNiArMzM5LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbiBcXHRpZiAoaWRtYXAtXFx1MDAzZWNudCBcXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xcbiBcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xcbiBcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0uY3VyID0gY3VyX2lkO1xcbitcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcXG4gXFx0XFx0aWRtYXAtXFx1MDAzZWNudCsrO1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbkBAIC0zNTIsNiArMzUzLDQzIEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2lkX3BhaXIgKm1hcCA9IGlkbWFwLVxcdTAwM2VtYXA7XFxuK1xcdHM2NCBkZWx0YTtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRpZiAoIWNoZWNrX2lkcyhvbGQtXFx1MDAzZWlkLCBjdXItXFx1MDAzZWlkLCBpZG1hcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFvbGQtXFx1MDAzZWlkKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXFxuK1xcdCAqIHRoZWlyIHJlbGF0aXZlIGRpc3BsYWNlbWVudCwgd2hpbGUgYWxsb3dpbmcgdGhlIHdob2xlIGNsYXNzIHRvIG1vdmUuXFxuK1xcdCAqIFBhY2tldCBwb2ludGVyIG9mZnNldHMgYXJlIGJvdW5kZWQgYnkgQlBGX01BWF9WQVJfT0ZGLCBzbyB0aGUgZGVsdGFcXG4rXFx0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cXG4rXFx0ICovXFxuK1xcdGRlbHRhID0gKHM2NCkoY3VyLVxcdTAwM2VyNjQuYmFzZSAtIG9sZC1cXHUwMDNlcjY0LmJhc2UpO1xcbitcXHRpZiAoZGVsdGEgXFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFxcdTAwM2UgUzMyX01BWClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRpZiAobWFwW2ldLm9sZCAhPSBvbGQtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcXG4rXFx0XFx0XFx0bWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTtcXG4rXFx0XFx0XFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qXFxuICAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXFxuICAqXFxuQEAgLTYzMiw4ICs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiBcXHRcXHR9IGVsc2UgaWYgKHJvbGQtXFx1MDAzZXJhbmdlIFxcdTAwM2UgcmN1ci1cXHUwMDNlcmFuZ2UpIHtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xcbi1cXHRcXHRpZiAoIWNoZWNrX2lkcyhyb2xkLVxcdTAwM2VpZCwgcmN1ci1cXHUwMDNlaWQsIGlkbWFwKSlcXG4rXFx0XFx0LyogaWQgcmVsYXRpb25zIGFuZCBpbnRyYS1jbGFzcyBkaXNwbGFjZW1lbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cXG4rXFx0XFx0aWYgKCFjaGVja19wa3RfcHRyX2lkcyhyb2xkLCByY3VyLCBpZG1hcCkpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cXG4gXFx0XFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcXHUwMDI2XFx1MDAyNlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCAxYzMwMzlmM2ZjMzIzLi5iMDg1MDE3MzRkZGZhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC00NDcsNiArNDQ3LDExIEBAIHN0YXRpYyBib29sIHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIFxcdHJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbit7XFxuK1xcdHJldHVybiBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNiBtYXAtXFx1MDAzZW1heF9lbnRyaWVzID09IDE7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIHR5cGVfaXNfcmRvbmx5X21lbSh1MzIgdHlwZSlcXG4ge1xcbiBcXHRyZXR1cm4gdHlwZSBcXHUwMDI2IE1FTV9SRE9OTFk7XFxuQEAgLTEwMDM1LDYgKzEwMDQwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IGNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxcbitcXHRcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuIFxcbiBcXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18zXTtcXG5AQCAtMTAxMzEsNiArMTAxMzksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxcbitcXHRcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuIFxcbiBcXHQvKiB1bnVzZWQgKi9cXG4gXFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcXG5AQCAtMTAyNDksNiArMTAyNjAsOSBAQCBzdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBtYXBfcHRyO1xcbiBcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gbWFwX3VpZDtcXG4rXFx0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyKSlcXG4rXFx0XFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbiBcXG4gXFx0LyogdW51c2VkICovXFxuIFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR180XSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xcbkBAIC0xNCw2ICsxNCwxMTcgQEBcXG4gXFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xcbiBcXG4rc3RhdGljIGludCBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGludCBidGZfZmQsIGludCBtYWluX2lkLCBpbnQgc3ViX2lkLFxcbitcXHRcXHRcXHRcXHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XFxuK1xcdFxcdEJQRl9DQUxMX1JFTCgyKSxcXG4rXFx0XFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxcbitcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xcbitcXHRcXHR7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LFxcbitcXHRcXHR7IC5pbnNuX29mZiA9IDMsIC50eXBlX2lkID0gc3ViX2lkIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XFxuK1xcdFxcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcXG4rXFx0XFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxcbitcXHRcXHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcXG4rXFx0XFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxcbitcXHR9O1xcbitcXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xcbitcXHRcXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxcbitcXHRcXHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcXG4rXFx0XFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxcbitcXHRcXHQubGljZW5zZSA9IChfX3U2NClcXFwiR1BMXFxcIixcXG4rXFx0XFx0LmxvZ19idWYgPSAoX191NjQpbG9nLFxcbitcXHRcXHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcXG4rXFx0XFx0LmxvZ19sZXZlbCA9IDEsXFxuK1xcdFxcdC5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCxcXG4rXFx0XFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXFxuK1xcdFxcdC5mdW5jX2luZm8gPSAoX191NjQpZnVuY3MsXFxuK1xcdFxcdC5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksXFxuK1xcdH07XFxuK1xcbitcXHRpZiAocmVsb2NhdGUpIHtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVxcdTAwMjZyZWxvO1xcbitcXHRcXHRhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTtcXG4rXFx0fVxcbitcXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XFxuK1xcdHJldHVybiBzeXNfYnBmX3Byb2dfbG9hZChcXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcXG4re1xcbitcXHRjb25zdCB2b2lkICpyYXdfYnRmO1xcbitcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbitcXHRfX3UzMiByYXdfYnRmX3NpemU7XFxuK1xcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XFxuK1xcdGludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJidGZfbmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXFxcImludFxcXCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcXFwiYWRkX2ludFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcXFwiYWRkX2Z1bmNfcHJvdG9cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJtYWluX2ZuXFxcIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFxcXCJhZGRfbWFpbl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJzdWJfZm5cXFwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcXFwiYWRkX3N1Yl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcXFwiY29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcXFwiLCA0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXFxcImFkZF9lbnVtXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFxcXCJ2YWx1ZVxcXCIsIDApLCBcXFwiYWRkX2VudW1fdmFsdWVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFxcXCIwXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcXFwiYWRkX2FjY2Vzc19zdHJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0cmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcXHUwMDI2cmF3X2J0Zl9zaXplKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHJhd19idGYsIFxcXCJyYXdfYnRmXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXFxcImJ0Zl9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xcbitcXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFxcXCJjb250cm9sX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRjbG9zZShwcm9nX2ZkKTtcXG4rXFx0cHJvZ19mZCA9IC0xO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XFxuK1xcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxcbitcXHQgKi9cXG4rXFx0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFxcXCJwb2lzb25lZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcXFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDNcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJwb2lzb25lZF9sb2FkX2xvZ1xcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKGVudi52ZXJib3NpdHkgXFx1MDAzZSBWRVJCT1NFX05PUk1BTCBcXHUwMDI2XFx1MDAyNiBsb2dbMF0pIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlc1xcXCIsIGxvZyk7XFxuK1xcdFxcdHByaW50ZihcXFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGNsb3NlKGJ0Zl9mZCk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbit9XFxuK1xcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXFxuICAqIHBvaW50aW5nIHRvIG5vbi1leGlzdGVudCBCVEYgdHlwZS5cXG4gICovXFxuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxcbiBcXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXFxuIHtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInBvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvclxcXCIpKVxcbitcXHRcXHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYmFkX2xvY2FsX2lkXFxcIikpXFxuIFxcdFxcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wZjc4ZGIzYmNjYzc2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfbG9hZF9zaWduYWwuY1xcbkBAIC0wLDAgKzEsMTMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgTk9QX0NOVFxcdFxcdDMyNzY4XFxuKyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcXHQoMTAwVUxMICogMTAwMCAqIDEwMDApXFxuKyNkZWZpbmUgUkVBUF9USU1FT1VUX05TXFx0XFx0KDEwMDBVTEwgKiAxMDAwICogMTAwMClcXG4rXFxuK3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgdHM7XFxuK1xcbitcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnRzKTtcXG4rXFx0cmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgKyB0cy50dl9uc2VjO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XFxuK1xcdFxcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXFxuK1xcdFxcdC50dl9uc2VjID0gZHVyYXRpb24gJSAxMDAwMDAwMDAwVUxMLFxcbitcXHR9O1xcbitcXG4rXFx0d2hpbGUgKG5hbm9zbGVlcChcXHUwMDI2dHMsIFxcdTAwMjZ0cykgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpXFxuK1xcdFxcdDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dClcXG4re1xcbitcXHRfX3U2NCBkZWFkbGluZSA9IG1vbm90b25pY19ucygpICsgdGltZW91dDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gd2FpdHBpZChwaWQsIHN0YXR1cywgV05PSEFORyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fSB3aGlsZSAobW9ub3RvbmljX25zKCkgXFx1MDAzYyBkZWFkbGluZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gTlVMTDtcXG4rXFx0X191NjQgc3RhcnQsIGNvbnRyb2xfdGltZSwga2lsbF9kZWxheTtcXG4rXFx0aW50IHBpcGVmZFsyXSA9IHsgLTEsIC0xIH07XFxuK1xcdGludCBwcm9nX2ZkID0gLTEsIHN0YXR1cyA9IDA7XFxuK1xcdHBpZF90IHBpZCA9IC0xO1xcbitcXHRjaGFyIGJ5dGU7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRpbnNucyA9IGNhbGxvYyhOT1BfQ05UICsgMiwgc2l6ZW9mKCppbnNucykpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoaW5zbnMsIFxcXCJjYWxsb2NcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5PUF9DTlQ7IGkrKylcXG4rXFx0XFx0aW5zbnNbaV0gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR18xKTtcXG4rXFx0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdGluc25zW05PUF9DTlQgKyAxXSA9IEJQRl9FWElUX0lOU04oKTtcXG4rXFxuK1xcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XFxuK1xcdHByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgXFxcIkdQTFxcXCIsXFxuK1xcdFxcdFxcdFxcdGluc25zLCBOT1BfQ05UICsgMiwgTlVMTCk7XFxuK1xcdGNvbnRyb2xfdGltZSA9IG1vbm90b25pY19ucygpIC0gc3RhcnQ7XFxuK1xcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFxcXCJjb250cm9sX3Byb2dfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGNsb3NlKHByb2dfZmQpO1xcbitcXHRwcm9nX2ZkID0gLTE7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTk9QX0NOVDsgaSsrKVxcbitcXHRcXHRpbnNuc1tpXSA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMCk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVmZCksIFxcXCJwaXBlXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcXFwiZm9ya1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGlmICghcGlkKSB7XFxuK1xcdFxcdGNsb3NlKHBpcGVmZFswXSk7XFxuK1xcdFxcdGlmICh3cml0ZShwaXBlZmRbMV0sIFxcXCJ4XFxcIiwgMSkgIT0gMSlcXG4rXFx0XFx0XFx0X2V4aXQoMSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVmZFsxXSk7XFxuK1xcdFxcdHByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgXFxcIkdQTFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdGluc25zLCBOT1BfQ05UICsgMiwgTlVMTCk7XFxuK1xcdFxcdGlmIChwcm9nX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKHByb2dfZmQpO1xcbitcXHRcXHRfZXhpdChwcm9nX2ZkIFxcdTAwM2MgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKHBpcGVmZFsxXSk7XFxuK1xcdHBpcGVmZFsxXSA9IC0xO1xcbitcXHRyZXQgPSByZWFkKHBpcGVmZFswXSwgXFx1MDAyNmJ5dGUsIDEpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIDEsIFxcXCJjaGlsZF9yZWFkeVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbGxvdyBsaW5lYXIgdmVyaWZpY2F0aW9uIHRvIGZpbmlzaCBiZWZvcmUgc2VuZGluZyBTSUdLSUxMLiBUaGUgbm9wXFxuK1xcdCAqIHJlbW92YWwgcGFzcyBpcyBxdWFkcmF0aWMsIHNvIGZvdXIgY29udHJvbC1sb2FkIHRpbWVzIHN0aWxsIGxlYXZlcyBhXFxuK1xcdCAqIHdpZGUgd2luZG93IGluIHdoaWNoIGFuIGFmZmVjdGVkIGtlcm5lbCBpcyByZXdyaXRpbmcgaW5zdHJ1Y3Rpb25zLlxcbitcXHQgKi9cXG4rXFx0a2lsbF9kZWxheSA9IE1BWChjb250cm9sX3RpbWUgKiA0LCBNSU5fS0lMTF9ERUxBWV9OUyk7XFxuK1xcdHNsZWVwX25zKGtpbGxfZGVsYXkpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhraWxsKHBpZCwgU0lHS0lMTCksIFxcXCJraWxsXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XFxuK1xcdHJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsIFxcdTAwMjZzdGF0dXMsIFJFQVBfVElNRU9VVF9OUyk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgcGlkLCBcXFwicHJvZ19sb2FkX2tpbGxhYmxlXFxcIikpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJjb250cm9sIGxvYWQgJWxsdSB1cywgY2hpbGQgc3RpbGwgYWxpdmUgJWxsdSB1cyBhZnRlciBTSUdLSUxMXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRjb250cm9sX3RpbWUgLyAxMDAwLCAobW9ub3RvbmljX25zKCkgLSBzdGFydCkgLyAxMDAwKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcdHBpZCA9IC0xO1xcbitcXHRBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdURVJNU0lHKHN0YXR1cykgPT0gU0lHS0lMTCxcXG4rXFx0XFx0ICAgIFxcXCJraWxsZWRfYnlfc2lna2lsbFxcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKHByb2dfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGlmIChwaXBlZmRbMF0gXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocGlwZWZkWzBdKTtcXG4rXFx0aWYgKHBpcGVmZFsxXSBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShwaXBlZmRbMV0pO1xcbitcXHRpZiAocGlkIFxcdTAwM2UgMCkge1xcbitcXHRcXHRraWxsKHBpZCwgU0lHS0lMTCk7XFxuK1xcdFxcdHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKTtcXG4rXFx0fVxcbitcXHRmcmVlKGluc25zKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IDY0YWM0OWFkNjdlNjMuLjVjNTcyZGQ3MjVlNzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtMjUsNiArMjUsNyBAQFxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3Muc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jYWxsYmFja19sb2NrLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2NmZy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2dyb3VwX3NrYi5za2VsLmhcXFwiXFxuQEAgLTE4OCw2ICsxODksNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfYnN3YXAodm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnN3YXApOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2codm9pZCkgIHsgUlVOKHZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSk7IH1cXG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZmcodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZmcpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXFxuQEAgLTAsMCArMSw3MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitzdHJ1Y3QgYnBmX21hcDtcXG4rXFxuK3N0cnVjdCBsb2NrX3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBsb2NrX3ZhbHVlKTtcXG4rfSBsb2NrX21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcXG4rXFx0c3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlO1xcbit9O1xcbitcXG4rc3RhdGljIGxvbmcgbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHN0cnVjdCBjYWxsYmFja19jdHggKmN0eClcXG4re1xcbitcXHRicGZfc3Bpbl9sb2NrKFxcdTAwMjZ2YWx1ZS1cXHUwMDNlbG9jayk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V2YWx1ZS1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XFxuK1xcbitcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmxvY2tfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXFx1MDAyNmN0eCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcImNhbGxiYWNrIG1hcCB2YWx1ZSBoYXMgYSBkaXN0aW5jdCBsb2NrIGlkZW50aXR5XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJicGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcXFwiKVxcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2dmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNnZhbHVlLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXFxuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG5AQCAtNSw2ICs1LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuIFxcbitTRUMoXFxcInhkcFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVnc2FmZSBwcmVzZXJ2ZXMgcGFja2V0IHBvaW50ZXIgY2xhc3MgZGlzcGxhY2VtZW50XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcXG4rX19uYWtlZCB2b2lkIHBrdF9yZWdzYWZlX2NsYXNzX2Rpc3BsYWNlbWVudCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcXFxcXG4rXFx0cjggPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFfZW5kXSk7XFxcXFxcbitcXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXFxcXG4rXFx0cjYgPSByOTtcXFxcXFxuK1xcdHI2ICs9IDg7XFxcXFxcbitcXHRpZiByNiBcXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXFxcXG4rXFx0cjAgPSAqKHU2NCAqKShyOSArIDApO1xcXFxcXG4rXFx0cjQgPSByMDtcXFxcXFxuK1xcdHI0IFxcdTAwMjY9IDE1O1xcXFxcXG4rXFx0cjcgPSByMDtcXFxcXFxuK1xcdHI3IFxcdTAwM2VcXHUwMDNlPSA2MztcXFxcXFxuK1xcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyArPSA0O1xcXFxcXG4rXFx0Z290byBsX2pvaW5fJT07XFxcXFxcbitsX3BhdGhfYl8lPTogXFxcXFxcbitcXHRyNCBcXHUwMDI2PSAzO1xcXFxcXG4rXFx0cjQgKz0gODtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyAtPSA0O1xcXFxcXG4rbF9qb2luXyU9OiBcXFxcXFxuK1xcdHI1ID0gcjM7XFxcXFxcbitcXHRyNSArPSA0O1xcXFxcXG4rXFx0aWYgcjUgXFx1MDAzZSByOCBnb3RvIGxfZXhpdF8lPTtcXFxcXFxuK1xcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxcXFxuK2xfZXhpdF8lPTogXFxcXFxcbitcXHRyMCA9IDA7XFxcXFxcbitcXHRleGl0O1xcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxcbitcXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcFxcXCIpXFxuIF9fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJSMyBwb2ludGVyIGFyaXRobWV0aWMgb24gcGt0X2VuZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjEzLjM1ODA3NjQ5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQ2MTY4Mzg5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tfY2ZnXCIsXG4gICAgXCJwdXNoX2luc25cIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uNWNmOTJjZTE4NTIwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC04NTQsNiArODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuK1x0czMyIHBrdF9wdHJfZGVsdGE7XG4rXHRib29sIHBrdF9wdHJfZGVsdGFfc2V0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9pZG1hcCB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcbmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NmZy5jXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXG5AQCAtMTAyLDYgKzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuK1x0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7XG4gXHRpbnQgKmluc25fc3RhY2sgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhY2s7XG4gXHRpbnQgKmluc25fc3RhdGUgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhdGU7XG4gXG5AQCAtMTIxLDYgKzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBjaGVja19zdWJwcm9ncygpIHByZXZlbnRzIGNvbnRyb2wgZmxvdyBmcm9tIGZhbGxpbmcgdGhyb3VnaCBhXG4rXHQgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW5cbitcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbitcdCAqIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIENGRyB1c2VkIGJ5IGxhdGVyIHBlci1zdWJwcm9ncmFtIHBhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbitcdFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xuK1x0XHRpZiAodyBcdTAwM2Mgc3VicHJvZy1cdTAwM2VzdGFydCB8fCB3IFx1MDAzZT0gKHN1YnByb2cgKyAxKS1cdTAwM2VzdGFydCkge1xuK1x0XHRcdHZlcmJvc2VfbGluZm8oZW52LCB0LCBcIiVkOiBcIiwgdCk7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxcblwiLCB0LCB3KTtcbitcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbitcdFx0XHRcdGVudiwgdCwgXCJmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cIixcbitcdFx0XHRcdFwiS2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0XCJJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCIsXG4rXHRcdFx0XHR0LCB3KTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZGlzYXNtLmhcIlxuIFxuQEAgLTMwNiwxMiArMzA3LDI4IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9wb2tlX2Rlc2NzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGxlbilcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBTb21lIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXMgcmVxdWlyZSBhblxuKyAqIE8ocHJvZy1cdTAwM2VsZW4pIG9wZXJhdGlvbiBwZXIgaW5zdHJ1Y3Rpb24uIEtlZXAgdGhlaXIgc2hhcmVkIHByaW1pdGl2ZXNcbisgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4rICovXG4rc3RhdGljIGJvb2wgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCh2b2lkKVxuK3tcbitcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjb25kX3Jlc2NoZWQoKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gKyBsZW4gLSAxLFxuQEAgLTUyMyw2ICs1NDAsOSBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFx0dW5zaWduZWQgaW50IG9yaWdfcHJvZ19sZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIC1FSU5UUjtcbitcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG5AQCAtMjY2Niw0ICsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgKzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdGlmIChpZG1hcC1cdTAwM2VjbnQgXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5vbGQgPSBvbGRfaWQ7XG4gXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLmN1ciA9IGN1cl9pZDtcbitcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcbiBcdFx0aWRtYXAtXHUwMDNlY250Kys7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTM1Miw2ICszNTMsNDMgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXG4rXHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4re1xuK1x0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cdTAwM2VtYXA7XG4rXHRzNjQgZGVsdGE7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghY2hlY2tfaWRzKG9sZC1cdTAwM2VpZCwgY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghb2xkLVx1MDAzZWlkKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZVxuK1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbitcdCAqIFBhY2tldCBwb2ludGVyIG9mZnNldHMgYXJlIGJvdW5kZWQgYnkgQlBGX01BWF9WQVJfT0ZGLCBzbyB0aGUgZGVsdGFcbitcdCAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuXG4rXHQgKi9cbitcdGRlbHRhID0gKHM2NCkoY3VyLVx1MDAzZXI2NC5iYXNlIC0gb2xkLVx1MDAzZXI2NC5iYXNlKTtcbitcdGlmIChkZWx0YSBcdTAwM2MgUzMyX01JTiB8fCBkZWx0YSBcdTAwM2UgUzMyX01BWClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpKyspIHtcbitcdFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIW1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCkge1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XG4rXHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS5cbiAgKlxuQEAgLTYzMiw4ICs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbitcdFx0LyogaWQgcmVsYXRpb25zIGFuZCBpbnRyYS1jbGFzcyBkaXNwbGFjZW1lbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cbitcdFx0aWYgKCFjaGVja19wa3RfcHRyX2lkcyhyb2xkLCByY3VyLCBpZG1hcCkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBuZXcgdmFsIG11c3Qgc2F0aXNmeSBvbGQgdmFsIGtub3dsZWRnZSAqL1xuIFx0XHRyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3LDYgKzQ0NywxMSBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4re1xuK1x0cmV0dXJuIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTAwMzUsNiArMTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRfX21hcmtfcmVnX2tub3duX3plcm8oXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzNdO1xuQEAgLTEwMTMxLDYgKzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdF9fbWFya19yZWdfa25vd25femVybyhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI2MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5pbmRleCBhMThkMzY4MGZiMTY5Li5jMzUwZmJiOTU4NDU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuQEAgLTE0LDYgKzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuK3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCxcbitcdFx0XHRcdCAgaW50IGVudW1faWQsIGludCBhY2Nlc3Nfc3RyX29mZiwgYm9vbCByZWxvY2F0ZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbitcdFx0QlBGX0NBTExfUkVMKDIpLFxuK1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9mdW5jX2luZm8gZnVuY3NbXSA9IHtcbitcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbitcdFx0eyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LFxuK1x0fTtcbitcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4rXHRcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcbitcdFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxuK1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbitcdFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxuK1x0fTtcbitcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4rXHRcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsXG4rXHRcdC5pbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpLFxuK1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4rXHRcdC5saWNlbnNlID0gKF9fdTY0KVwiR1BMXCIsXG4rXHRcdC5sb2dfYnVmID0gKF9fdTY0KWxvZyxcbitcdFx0LmxvZ19zaXplID0gc2l6ZW9mKGxvZyksXG4rXHRcdC5sb2dfbGV2ZWwgPSAxLFxuK1x0XHQucHJvZ19idGZfZmQgPSBidGZfZmQsXG4rXHRcdC5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLFxuK1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuK1x0XHQuZnVuY19pbmZvX2NudCA9IEFSUkFZX1NJWkUoZnVuY3MpLFxuK1x0fTtcbitcbitcdGlmIChyZWxvY2F0ZSkge1xuK1x0XHRhdHRyLmNvcmVfcmVsb19jbnQgPSAxO1xuK1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbitcdFx0YXR0ci5jb3JlX3JlbG9fcmVjX3NpemUgPSBzaXplb2YocmVsbyk7XG4rXHR9XG4rXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4rXHRyZXR1cm4gc3lzX2JwZl9wcm9nX2xvYWQoXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcbit7XG4rXHRjb25zdCB2b2lkICpyYXdfYnRmO1xuK1x0c3RydWN0IGJ0ZiAqYnRmID0gTlVMTDtcbitcdF9fdTMyIHJhd19idGZfc2l6ZTtcbitcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4rXHRpbnQgaW50X2lkLCBtYWluX2lkLCBwcm9nX2ZkID0gLTEsIHByb3RvX2lkLCBzdWJfaWQ7XG4rXG4rXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXHRpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVChpbnRfaWQsIDAsIFwiYWRkX2ludFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcImFkZF9mdW5jX3Byb3RvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwibWFpbl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFwiYWRkX21haW5fZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwic3ViX2ZuXCIsIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpO1xuK1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcImFkZF9zdWJfZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcImNvcmVfcmVsb19zdWJwcm9nX3BvaXNvbl9taXNzaW5nXCIsIDQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXCJhZGRfZW51bVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFwidmFsdWVcIiwgMCksIFwiYWRkX2VudW1fdmFsdWVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgXCIwXCIpO1xuK1x0aWYgKCFBU1NFUlRfR1QoYWNjZXNzX3N0cl9vZmYsIDAsIFwiYWRkX2FjY2Vzc19zdHJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCBcInJhd19idGZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcImJ0Zl9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBUaGUgc2FtZSB0d28tc3VicHJvZ3JhbSBwcm9ncmFtIGlzIHZhbGlkIGJlZm9yZSB0aGUgcmVsb2NhdGlvbi4gKi9cbitcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuK1x0XHRcdFx0XHQgYWNjZXNzX3N0cl9vZmYsIGZhbHNlKTtcbitcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwiY29udHJvbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdC8qXG4rXHQgKiBQb2lzb24gdGhlIGZpcnN0IHN1YnByb2dyYW0ncyB0ZXJtaW5hbCBleGl0LiBUaGUgdmVyaWZpZXIgbXVzdCByZWplY3RcbitcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuK1x0ICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFwicG9pc29uZWRfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCIsXG4rXHRcdFx0ICBcInBvaXNvbmVkX2xvYWRfbG9nXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoZW52LnZlcmJvc2l0eSBcdTAwM2UgVkVSQk9TRV9OT1JNQUwgXHUwMDI2XHUwMDI2IGxvZ1swXSkge1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCIpO1xuK1x0XHRwcmludGYoXCIlc1wiLCBsb2cpO1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCIpO1xuK1x0fVxuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRjbG9zZShidGZfZmQpO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rfVxuK1xuIC8qIENoZWNrIHRoYXQgdmVyaWZpZXIgcmVqZWN0cyBCUEYgcHJvZ3JhbSBjb250YWluaW5nIHJlbG9jYXRpb25cbiAgKiBwb2ludGluZyB0byBub24tZXhpc3RlbnQgQlRGIHR5cGUuXG4gICovXG5AQCAtMTIwLDYgKzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpXG4gXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXG4ge1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJwb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3JcIikpXG4rXHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJhZF9sb2NhbF9pZFwiKSlcbiBcdFx0dGVzdF9iYWRfbG9jYWxfaWQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5AQCAtMCwwICsxLDEzMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNkZWZpbmUgTk9QX0NOVFx0XHQzMjc2OFxuKyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcdCgxMDBVTEwgKiAxMDAwICogMTAwMClcbisjZGVmaW5lIFJFQVBfVElNRU9VVF9OU1x0XHQoMTAwMFVMTCAqIDEwMDAgKiAxMDAwKVxuK1xuK3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHM7XG4rXG4rXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1x0cmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgKyB0cy50dl9uc2VjO1xuK31cbitcbitzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XG4rXHRcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXG4rXHRcdC50dl9uc2VjID0gZHVyYXRpb24gJSAxMDAwMDAwMDAwVUxMLFxuK1x0fTtcbitcbitcdHdoaWxlIChuYW5vc2xlZXAoXHUwMDI2dHMsIFx1MDAyNnRzKSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpXG4rXHRcdDtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dClcbit7XG4rXHRfX3U2NCBkZWFkbGluZSA9IG1vbm90b25pY19ucygpICsgdGltZW91dDtcbitcdGludCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdhaXRwaWQocGlkLCBzdGF0dXMsIFdOT0hBTkcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH0gd2hpbGUgKG1vbm90b25pY19ucygpIFx1MDAzYyBkZWFkbGluZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gTlVMTDtcbitcdF9fdTY0IHN0YXJ0LCBjb250cm9sX3RpbWUsIGtpbGxfZGVsYXk7XG4rXHRpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTtcbitcdGludCBwcm9nX2ZkID0gLTEsIHN0YXR1cyA9IDA7XG4rXHRwaWRfdCBwaWQgPSAtMTtcbitcdGNoYXIgYnl0ZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRpbnNucyA9IGNhbGxvYyhOT1BfQ05UICsgMiwgc2l6ZW9mKCppbnNucykpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluc25zLCBcImNhbGxvY1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTk9QX0NOVDsgaSsrKVxuK1x0XHRpbnNuc1tpXSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzEpO1xuK1x0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRpbnNuc1tOT1BfQ05UICsgMV0gPSBCUEZfRVhJVF9JTlNOKCk7XG4rXG4rXHRzdGFydCA9IG1vbm90b25pY19ucygpO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0aW5zbnMsIE5PUF9DTlQgKyAyLCBOVUxMKTtcbitcdGNvbnRyb2xfdGltZSA9IG1vbm90b25pY19ucygpIC0gc3RhcnQ7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfcHJvZ19sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5PUF9DTlQ7IGkrKylcbitcdFx0aW5zbnNbaV0gPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDApO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlZmQpLCBcInBpcGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIXBpZCkge1xuK1x0XHRjbG9zZShwaXBlZmRbMF0pO1xuK1x0XHRpZiAod3JpdGUocGlwZWZkWzFdLCBcInhcIiwgMSkgIT0gMSlcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0Y2xvc2UocGlwZWZkWzFdKTtcbitcdFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0XHRpbnNucywgTk9QX0NOVCArIDIsIE5VTEwpO1xuK1x0XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRcdF9leGl0KHByb2dfZmQgXHUwMDNjIDApO1xuK1x0fVxuK1xuK1x0Y2xvc2UocGlwZWZkWzFdKTtcbitcdHBpcGVmZFsxXSA9IC0xO1xuK1x0cmV0ID0gcmVhZChwaXBlZmRbMF0sIFx1MDAyNmJ5dGUsIDEpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAxLCBcImNoaWxkX3JlYWR5XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcFxuK1x0ICogcmVtb3ZhbCBwYXNzIGlzIHF1YWRyYXRpYywgc28gZm91ciBjb250cm9sLWxvYWQgdGltZXMgc3RpbGwgbGVhdmVzIGFcbitcdCAqIHdpZGUgd2luZG93IGluIHdoaWNoIGFuIGFmZmVjdGVkIGtlcm5lbCBpcyByZXdyaXRpbmcgaW5zdHJ1Y3Rpb25zLlxuK1x0ICovXG4rXHRraWxsX2RlbGF5ID0gTUFYKGNvbnRyb2xfdGltZSAqIDQsIE1JTl9LSUxMX0RFTEFZX05TKTtcbitcdHNsZWVwX25zKGtpbGxfZGVsYXkpO1xuK1x0aWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCBcImtpbGxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XG4rXHRyZXQgPSB3YWl0cGlkX3RpbWVvdXQocGlkLCBcdTAwMjZzdGF0dXMsIFJFQVBfVElNRU9VVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgXCJwcm9nX2xvYWRfa2lsbGFibGVcIikpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiY29udHJvbCBsb2FkICVsbHUgdXMsIGNoaWxkIHN0aWxsIGFsaXZlICVsbHUgdXMgYWZ0ZXIgU0lHS0lMTFxcblwiLFxuK1x0XHRcdGNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXHRwaWQgPSAtMTtcbitcdEFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdURVJNU0lHKHN0YXR1cykgPT0gU0lHS0lMTCxcbitcdFx0ICAgIFwia2lsbGVkX2J5X3NpZ2tpbGxcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChwcm9nX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRpZiAocGlwZWZkWzBdIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocGlwZWZkWzBdKTtcbitcdGlmIChwaXBlZmRbMV0gXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwaXBlZmRbMV0pO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuK1x0fVxuK1x0ZnJlZShpbnNucyk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSw3MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rc3RydWN0IGJwZl9tYXA7XG4rXG4rc3RydWN0IGxvY2tfdmFsdWUge1xuK1x0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XG4rfSBsb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbitcdHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTtcbit9O1xuK1xuK3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgc3RydWN0IGNhbGxiYWNrX2N0eCAqY3R4KVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4rXG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCBcdTAwMjZjdHgsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fZGVzY3JpcHRpb24oXCJjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwibmVzdGVkIGNhbGxiYWNrIGNhbiBsb2NrIGl0cyBvd24gbWFwIHZhbHVlXCIpXG4rX19zdWNjZXNzXG4raW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHlfc2FtZSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG5AQCAtNSw2ICs1LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuK1NFQyhcInhkcFwiKVxuK19fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZVwiKVxuK19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKVxuK19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXFxcbitcdHI4ID0gKih1MzIgKikocjEgKyAlW3hkcF9tZF9kYXRhX2VuZF0pO1xcXG4rXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXG4rXHRyNiA9IHI5O1xcXG4rXHRyNiArPSA4O1xcXG4rXHRpZiByNiBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjkgKyAwKTtcXFxuK1x0cjQgPSByMDtcXFxuK1x0cjQgXHUwMDI2PSAxNTtcXFxuK1x0cjcgPSByMDtcXFxuK1x0cjcgXHUwMDNlXHUwMDNlPSA2MztcXFxuK1x0aWYgcjcgIT0gMCBnb3RvIGxfcGF0aF9iXyU9O1xcXG4rXHRyMiA9IHI5O1xcXG4rXHRyMiArPSByNDtcXFxuK1x0cjMgPSByMjtcXFxuK1x0cjMgKz0gNDtcXFxuK1x0Z290byBsX2pvaW5fJT07XFxcbitsX3BhdGhfYl8lPTogXFxcbitcdHI0IFx1MDAyNj0gMztcXFxuK1x0cjQgKz0gODtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzIC09IDQ7XFxcbitsX2pvaW5fJT06IFxcXG4rXHRyNSA9IHIzO1xcXG4rXHRyNSArPSA0O1xcXG4rXHRpZiByNSBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxuK2xfZXhpdF8lPTogXFxcbitcdHIwID0gMDtcXFxuK1x0ZXhpdDtcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksXG4rXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gU0VDKFwieGRwXCIpXG4gX19kZXNjcmlwdGlvbihcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUjMgcG9pbnRlciBhcml0aG1ldGljIG9uIHBrdF9lbmRcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjEzLjM1ODA3ODE1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjc1MzI0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2ggU2VyaWVzIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyB3YXJyYW50cyBhIHN5emthbGxlciBmdXp6aW5nIGNhbXBhaWduIGZvciB0aGUgYW1kNjQgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGNoYW5nZWQuIEknbSBzZWVpbmcgYWRkaXRpb25zIHRvIGBicGZfaWRfcGFpcmAgaW4gYGJwZl92ZXJpZmllci5oYCBhbmQgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBjb3JlIEJQRiBmaWxlczogYGNmZy5jYCwgYGZpeHVwcy5jYCwgYHN0YXRlcy5jYCwgYW5kIGB2ZXJpZmllci5jYC5cblxuVGhlIGFkZGl0aW9ucyBvZiBgczMyIHBrdF9wdHJfZGVsdGE7IGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7YCBpbiBgYnBmX2lkX3BhaXJgIHNlZW0gbGlrZSBhIHBvdGVudGlhbCBwb2ludGVyLXJlbGF0ZWQgY2hhbmdlLCB3aGljaCBhbHdheXMgcmFpc2VzIGEgZmxhZy4gVGhlbiwgbW9kaWZpY2F0aW9ucyB0byBgcHVzaF9pbnNuKClgIGluIGBjZmcuY2Agd2l0aCBmYWxsdGhyb3VnaCBjaGVja3MgbG9vayBpbnRlcmVzdGluZy4gYGZpeHVwcy5jYCBub3cgaW5jbHVkZXMgYSBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCBmdW5jdGlvbiB3aXRoIGNoZWNrcyBmb3IgYGZhdGFsX3NpZ25hbF9wZW5kaW5nYCBhbmQgYGNvbmRfcmVzY2hlZCgpYCwgaW5kaWNhdGluZyBwb3RlbnRpYWwgaW50ZXJydXB0aW9uIG1lY2hhbmlzbXMuIGBzdGF0ZXMuY2AgaW50cm9kdWNlcyBgY2hlY2tfcGt0X3B0cl9pZHMoKWAsIHNvIHdlJ3JlIHNlZWluZyBtb3JlIHBvaW50ZXIgaGFuZGxpbmcuIEZpbmFsbHksIGB2ZXJpZmllci5jYCBpbmNsdWRlcyBhIGBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpYCBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIGluY2x1ZGluZyBzZXR0aW5nIHJlZ2lzdGVyIGlkcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBEb2VzIHRoaXMgcGF0Y2ggbW9kaWZ5IGV4ZWN1dGFibGUga2VybmVsIGNvZGUgdGhhdCdzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMgY29yZSBhbmQgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gQ2hhbmdlcyB0byB0aGUgdmVyaWZpZXIgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIG5vdG9yaW91cyBmb3IgaGF2aW5nIHN1YnRsZSBmbGF3cywgYW5kIHRoZXNlIGNoYW5nZXMgc2VlbSB0byB0b3VjaCBvbiBjcml0aWNhbCBhcmVhcy5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCwgdGhlIHN1YnN5c3RlbSBpcyBpbXBvcnRhbnQsIGFuZCBwb2ludGVyL3N0YXRlL2NvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zIGFyZSBzdHJvbmcgaW5kaWNhdG9ycy4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgbWF5YmUgc29tZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZXNlIG5ldyBjaGFuZ2VzLiBJ4oCZbGwgdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlIGtlcm5lbC9icGYgZmlsZXMgdG8gZ2V0IHRoYXQgaW5mb3JtYXRpb24uIEknbSByZWFkeSB0byBjcmFmdCBzb21lIGdvb2Qgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjE3LjY4NTYxMzQzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjczNDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19CUEZfU1lTQ0FMTFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTIzPWlmZXEgKCQoQ09ORklHX05FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGV2bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzdGFja21hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJldXNlcG9ydF9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc3RydWN0X29wcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfcmVsb2NhdGUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrbWVtX2NhY2hlX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRtYWJ1Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjE3Ljc0MjM1MjM5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzOTg4NjQ2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEZfU1lTQ0FMTCBEZXBlbmRlbmNpZXMgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9TWVNDQUxMYC4gSSdtIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBub3cuIE15IGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgcHJlLXJlcXVpc2l0ZXMgdGhhdCB3b3VsZCBhZmZlY3QgdGhlIGF2YWlsYWJpbGl0eSBvZiBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2Ugb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHBvdGVudGlhbGx5IGtlcm5lbCBoYXJkZW5pbmcgb3B0aW9ucywgb3IgZXZlbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2Ugd2hldGhlciBgQlBGX1NZU0NBTExgIGlzIGV2ZW4gKnByZXNlbnQqIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGllcmFyY2h5IGFuZCBob3cgZGlmZmVyZW50IGZlYXR1cmVzIGludGVyYWN0IHdpdGggaXQuIFRoZSBvYmplY3RpdmUgaXMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgY29uc2lzdGVudCBmb3IgbXkgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MjEuMTQxMjIwMDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjEwMDc2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoyMS4xODg4Mzg3MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDczOTAyMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbmZpZyBCUEZfU1lTQ0FMTGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBjb25maWcgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5IHNldC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlcywgbGlrZWx5IHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlIG9yIGZlYXR1cmUgZGlyZWN0b3JpZXMuIEnigJlsbCBwcm9iYWJseSBuZWVkIHRvIHVzZSBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAgKG9yIHBvc3NpYmx5IGBhY2tgIG9yIGByaXBncmVwYCBmb3Igc3BlZWQpIHRvIGxvY2F0ZSBpdCBlZmZpY2llbnRseS4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIHN5bWJvbCBpcyBlaXRoZXIgZXhwbGljaXRseSBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgd2l0aGluIGRlcGVuZGVuY3kgZXhwcmVzc2lvbnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBpbnNpZ2h0IGludG8gdGhlIGZ1bmN0aW9uYWxpdHkgZ3VhcmRlZCBieSB0aGF0IGNvbmZpZywgYW5kIGhvdyB0byBlbmFibGUvZGlzYWJsZSBpdC4gSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBzdWJ0bGV0eSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEyMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjIzLjY2Mjc0MzMxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2ODEzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjI1LjQ4OTU2MTAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTczMzc2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBCUEYgS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBCUEYgc2l0dWF0aW9uLCBJIG5lZWQgdG8gZ3JvdW5kIG15c2VsZiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIExpbmUgMjUgb2YgYGtlcm5lbC9icGYvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5Li4uIHRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUga2V5IGRlcGVuZGVuY2llcyBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0gYXJlIGRlY2xhcmVkLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBCUEYgZmVhdHVyZXMgYXJlIGdhdGVkIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJ20gYXNzdW1pbmcgdGhhdCBpdOKAmXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGJhc2UgcmVxdWlyZW1lbnRzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBzZWN1cml0eSBtb2RlbHMsIENQVSBhcmNoaXRlY3R1cmUgZmVhdHVyZXMgb3Igb3RoZXIgc3Vic3lzdGVtcyBhcmUgY2xlYXJseSBzcGVjaWZpZWQuIEkgY2FuIGNoZWNrIHRoaXMgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzIGJlZm9yZSBnb2luZyBmdXJ0aGVyLiBUaGlzJ2xsIGhlbHAgbWUgYXZvaWQgd2FzdGluZyB0aW1lIGxhdGVyIG9uIGJ5IGNoYXNpbmcgZG93biByZWQgaGVycmluZ3MgcmVsYXRlZCB0byB1bm1ldCBwcmVyZXF1aXNpdGVzLiBMZXTigJlzIGRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjI3LjQ4NjkwMTM3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2MzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoyNy40ODY5NjcwMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NzMwMzE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmaWxlIGFuZCBzeW1ib2wgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIHR3byBrZXkgYXJlYXM6XG5cbkZpcnN0LCBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgLiBBIG5ldyBmaWVsZCwgYHBrdF9wdHJfZGVsdGFgLCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciwgYW5kIGEgYm9vbGVhbiBmbGFnIGBwa3RfcHRyX2RlbHRhX3NldGAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBvaW50ZXIgZGVsdGEgY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcGFja2V0IGRhdGEgbWFuaXB1bGF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGlzIGltcGFjdHMgaG93IHdlIHRyYWNrIGFuZCBtYW5hZ2Ugb2Zmc2V0cyB3aXRoaW4gdGhlIHBhY2tldCBidWZmZXIuIFRoZSBhZGRpdGlvbiBvZiBhIGJvb2xlYW4gZmxhZyBzdWdnZXN0cyBjb25kaXRpb25hbCB1c2FnZSwgaW1wbHlpbmcgdGhpcyBkZWx0YSBpc24ndCBhbHdheXMgcmVsZXZhbnQuIEl0J2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmVyaWZpZXIuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvY2ZnLmNgLCB0aGUgYHB1c2hfaW5zbmAgZnVuY3Rpb24gaGFzIGJlZW4gY2hhbmdlZC4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgYm91bmRhcnkgY2hlY2sgcmVsYXRlZCB0byBmYWxsdGhyb3VnaCAoYGUgPT0gRkFMTFRIUk9VR0hgKS4gVGhhdCBjYXRjaGVzIG15IGV5ZS4gV2UncmUgZXhwbGljaXRseSBndWFyZGluZyBhZ2FpbnN0IHNvbWV0aGluZyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZhbGx0aHJvdWdoIHNjZW5hcmlvLCB3aGljaCBpcyB1c3VhbGx5IGEgY3JpdGljYWwgcGF0aCBmb3IgY29udHJvbCBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgcHJldmVudHMuIFRvIGRvIHRoYXQsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBwdXNoX2luc25gLiBJJ2xsIGhhdmUgdG8gcXVpY2tseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBga2VybmVsL2JwZi9jZmcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBjaGVjayB3aWxsIGFmZmVjdCB0aGUgb3ZlcmFsbCBCUEYgdmVyaWZpZXIgYmVoYXZpb3IuIEkgc3VzcGVjdCBpdCdzIHByZXZlbnRpbmcgc29tZSBraW5kIG9mIHBvdGVudGlhbGx5IGludmFsaWQgc3RhdGUgZHVyaW5nIGluc3RydWN0aW9uIHB1c2ggb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEJQRiBjb250cm9sIGZsb3cgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MzAuNDQ0Mjc0MTA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE1MTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXNoX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZmcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NmZy5jPTkzPWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0xMDItICovXFxua2VybmVsL2JwZi9jZmcuYzoxMDM6c3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTEwNC17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTE4Mj1zdGF0aWMgaW50IHZpc2l0X2Z1bmNfY2FsbF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX2luc24gKmluc25zLFxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0xODktXFx0aW5zbl9zeiA9IGJwZl9pc19sZGltbTY0KFxcdTAwMjZpbnNuc1t0XSkgPyAyIDogMTtcXG5rZXJuZWwvYnBmL2NmZy5jOjE5MDpcXHRyZXQgPSBwdXNoX2luc24odCwgdCArIGluc25fc3osIEZBTExUSFJPVUdILCBlbnYpO1xcbmtlcm5lbC9icGYvY2ZnLmMtMTkxLVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTIwMS1cXHRcXHRtZXJnZV9jYWxsZWVfZWZmZWN0cyhlbnYsIHQsIHcpO1xcbmtlcm5lbC9icGYvY2ZnLmM6MjAyOlxcdFxcdHJldCA9IHB1c2hfaW5zbih0LCB3LCBCUkFOQ0gsIGVudik7XFxua2VybmVsL2JwZi9jZmcuYy0yMDMtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz00NzQ9c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy00OTItXFx0XFx0aW5zbl9zeiA9IGJwZl9pc19sZGltbTY0KGluc24pID8gMiA6IDE7XFxua2VybmVsL2JwZi9jZmcuYzo0OTM6XFx0XFx0cmV0dXJuIHB1c2hfaW5zbih0LCB0ICsgaW5zbl9zeiwgRkFMTFRIUk9VR0gsIGVudik7XFxua2VybmVsL2JwZi9jZmcuYy00OTQtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01ODMtXFx0XFx0LyogdW5jb25kaXRpb25hbCBqdW1wIHdpdGggc2luZ2xlIGVkZ2UgKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjU4NDpcXHRcXHRyZXQgPSBwdXNoX2luc24odCwgdCArIG9mZiArIDEsIEZBTExUSFJPVUdILCBlbnYpO1xcbmtlcm5lbC9icGYvY2ZnLmMtNTg1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTU5OS1cXG5rZXJuZWwvYnBmL2NmZy5jOjYwMDpcXHRcXHRyZXQgPSBwdXNoX2luc24odCwgdCArIDEsIEZBTExUSFJPVUdILCBlbnYpO1xcbmtlcm5lbC9icGYvY2ZnLmMtNjAxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTYwMy1cXG5rZXJuZWwvYnBmL2NmZy5jOjYwNDpcXHRcXHRyZXR1cm4gcHVzaF9pbnNuKHQsIHQgKyBpbnNuLVxcdTAwM2VvZmYgKyAxLCBCUkFOQ0gsIGVudik7XFxua2VybmVsL2JwZi9jZmcuYy02MDUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzozMC40OTU0MzIzNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyODkwMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFbnRyeSBQb2ludCBBbmFseXNpcyBpbiBgY2ZnLmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBjZmcuY2AgYW5kIGltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVudHJ5IHBvaW50cy4gV2hlcmUgZG9lcyB0aGUgZXhlY3V0aW9uIGJlZ2luLCBhbmQgd2hhdCBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlLCB0aGUgYnVpbGRpbmcgYmxvY2tzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGUgY29uZmlndXJhdGlvbiBsb2FkaW5nLCBwYXJzaW5nLCBhbmQgYXBwbGljYXRpb24uIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgb2J2aW91cyBjYW5kaWRhdGVzOiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIHBhcnNpbmcgcm91dGluZXMsIGFuZCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmVzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBhcyB3ZWxsIOKAkyBjYWxscyB0byBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcyB0aGF0IGFyZSBjcnVjaWFsIGZvciB0aGUgcHJvcGVyIG9wZXJhdGlvbiBvZiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGhvdyBgY2ZnLmNgIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIGlzIGp1c3QgYXMgaW1wb3J0YW50IGFzIHRoZSBpbnRlcm5hbHMgb2YgdGhlIG1vZHVsZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTM2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MzIuNzI0MzQ0NTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE5ODM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2NmZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2ZnLmM9NDU9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTUxLVxcbmtlcm5lbC9icGYvY2ZnLmM6NTI6c3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG5rZXJuZWwvYnBmL2NmZy5jLTUzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTktXFxua2VybmVsL2JwZi9jZmcuYzo2MDpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfbWlnaHRfc2xlZXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG5rZXJuZWwvYnBmL2NmZy5jLTYxLXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNjctXFxua2VybmVsL2JwZi9jZmcuYzo2ODpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfbWlnaHRfdGhyb3coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG5rZXJuZWwvYnBmL2NmZy5jLTY5LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtODEtICovXFxua2VybmVsL2JwZi9jZmcuYzo4MjpzdGF0aWMgdm9pZCBtZXJnZV9jYWxsZWVfZWZmZWN0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdCwgaW50IHcpXFxua2VybmVsL2JwZi9jZmcuYy04My17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTkzPWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0xMDItICovXFxua2VybmVsL2JwZi9jZmcuYzoxMDM6c3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTEwNC17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTE4MS1cXG5rZXJuZWwvYnBmL2NmZy5jOjE4MjpzdGF0aWMgaW50IHZpc2l0X2Z1bmNfY2FsbF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX2luc24gKmluc25zLFxcbmtlcm5lbC9icGYvY2ZnLmMtMTgzLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTIwNi1cXG5rZXJuZWwvYnBmL2NmZy5jOjIwNzpzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2lhcnJheV9yZWFsbG9jKHN0cnVjdCBicGZfaWFycmF5ICpvbGQsIHNpemVfdCBuX2VsZW0pXFxua2VybmVsL2JwZi9jZmcuYy0yMDgte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0yMjItXFxua2VybmVsL2JwZi9jZmcuYzoyMjM6c3RhdGljIGludCBjb3B5X2luc25fYXJyYXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIHN0YXJ0LCB1MzIgZW5kLCB1MzIgKml0ZW1zKVxcbmtlcm5lbC9icGYvY2ZnLmMtMjI0LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtMjQyLVxcbmtlcm5lbC9icGYvY2ZnLmM6MjQzOnN0YXRpYyBpbnQgY21wX3B0cl90b191MzIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5rZXJuZWwvYnBmL2NmZy5jLTI0NC17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTI0Ny1cXG5rZXJuZWwvYnBmL2NmZy5jOjI0ODpzdGF0aWMgaW50IHNvcnRfaW5zbl9hcnJheV91bmlxKHUzMiAqaXRlbXMsIGludCBjbnQpXFxua2VybmVsL2JwZi9jZmcuYy0yNDkte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0yNjQtICovXFxua2VybmVsL2JwZi9jZmcuYzoyNjU6aW50IGJwZl9jb3B5X2luc25fYXJyYXlfdW5pcShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgc3RhcnQsIHUzMiBlbmQsIHUzMiAqb2ZmKVxcbmtlcm5lbC9icGYvY2ZnLmMtMjY2LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtMjc5LSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6MjgwOnN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9tYXAoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2NmZy5jLTI4MS17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTMxMC0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjMxMTpzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvY2ZnLmMtMzEyLVxcdFxcdFxcdFxcdFxcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9MzYzPXN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqXFxua2VybmVsL2JwZi9jZmcuYzozNjQ6Y3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtMzY1LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtMzk2LS8qIFxcXCJjb25kaXRpb25hbCBqdW1wIHdpdGggTiBlZGdlc1xcXCIgKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjM5NzpzdGF0aWMgaW50IHZpc2l0X2dvdG94X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy0zOTgte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy00NDktICovXFxua2VybmVsL2JwZi9jZmcuYzo0NTA6c3RhdGljIGludCB2aXNpdF9hYm5vcm1hbF9yZXR1cm5faW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdClcXG5rZXJuZWwvYnBmL2NmZy5jLTQ1MS17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTQ3My0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjQ3NDpzdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy00NzUte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy02MTAtICovXFxua2VybmVsL2JwZi9jZmcuYzo2MTE6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTYxMi17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTcxMi0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjcxMzppbnQgYnBmX2NvbXB1dGVfcG9zdG9yZGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy03MTQte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy03NjUtICovXFxua2VybmVsL2JwZi9jZmcuYzo3NjY6aW50IGJwZl9jb21wdXRlX3NjYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNzY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MzIuNzcxNTQ4NTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzA2NzQ1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFZlcmlmaWVyIEZsb3cgYW5kIEZpeHVwIENvbmNlcm5zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgQlBGIHZlcmlmaWVyIGFuZCBob3cgaXQgaGFuZGxlcyBpbnN0cnVjdGlvbiBtb2RpZmljYXRpb25zLiBJIHNlZSB0aGF0IHRoZSBgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KWAgZnVuY3Rpb24gaXMga2V5OyBpdCBjYWxscyBgdmlzaXRfaW5zbmAsIHdoaWNoIHRoZW4gcHVzaGVzIGluc3RydWN0aW9ucyB1c2luZyBgcHVzaF9pbnNuYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgZGVhbCB3aXRoIHBhdGNoaW5nIGFuZCByZW1vdmluZyBpbnN0cnVjdGlvbnMgZHVyaW5nIHZlcmlmaWNhdGlvbi4gTGV0J3MgZGVsdmUgaW50byBga2VybmVsL2JwZi9maXh1cHMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYnBmX3BhdGNoX2luc25fZGF0YSgpYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNucygpYC4gQm90aCBvZiB0aGVtIGFyZSBpbnRlcmVzdGluZyBzaW5jZSB0aGV5IGhhdmUgYGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKWAuIFRoYXQgbG9va3MgbGlrZSBhIGNyaXRpY2FsIHBvaW50IHdoZXJlIHdlIG1pZ2h0IG5lZWQgdG8gYWJvcnQgdGhlIHZlcmlmaWNhdGlvbi5cblxuT2theSwgSSdsbCBleGFtaW5lIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBjaGVjayB0aGVpciBjYWxsZXJzLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzdGF0aWMgb3IgaGF2ZSBicm9hZGVyIHZpc2liaWxpdHkuIEknbGwgcmVhY2ggZm9yIGBncmVwYCBhbmQgaHVudCB0aGVtIGRvd24gaW4gdGhlIGNvZGViYXNlLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzLCBvciB1bmV4cGVjdGVkIHVzZXMuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjEwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjM2LjI0MjIyNjI1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMTA3ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihicGZfcGF0Y2hfaW5zbl9kYXRhfHZlcmlmaWVyX3JlbW92ZV9pbnNucylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MTU2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE1NzYtXFxua2VybmVsL2JwZi9jb3JlLmM6MTU3NzpcXHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xcbmtlcm5lbC9icGYvY29yZS5jLTE1NzgtXFx0aWYgKGVudilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE2MDgtXFx0XFx0aWYgKGVudilcXG5rZXJuZWwvYnBmL2NvcmUuYzoxNjA5OlxcdFxcdFxcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxua2VybmVsL2JwZi9jb3JlLmMtMTYxMC1cXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTMxNT1zdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTMyMi1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjMyMzpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTMyNC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTUyMz12b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNTM2LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6NTM3OnN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxua2VybmVsL2JwZi9maXh1cHMuYy01Mzgte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02MTU9aW50IGJwZl9vcHRfcmVtb3ZlX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy02MjktXFxua2VybmVsL2JwZi9maXh1cHMuYzo2MzA6XFx0XFx0ZXJyID0gdmVyaWZpZXJfcmVtb3ZlX2luc25zKGVudiwgaSwgaik7XFxua2VybmVsL2JwZi9maXh1cHMuYy02MzEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM5PWludCBicGZfb3B0X3JlbW92ZV9ub3BzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY1Mi1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY1MzpcXHRcXHRlcnIgPSB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoZW52LCBpLCAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY1NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02NjQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NDgtYXBwbHlfcGF0Y2hfYnVmZmVyOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ5OlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzUwLVxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTc2Nj1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc5My1cXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaVswXTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc5NS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy04MTYtXFx0XFx0fSBlbHNlIGlmIChjbnQpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjgxNzpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxOC1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy04NDktXFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg1MDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtODUxLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyMi1cXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIzOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy05MjQtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTA1Ni1wYXRjaF9pbnNuX2J1ZjpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwNTc6XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNTgtXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTE2LVxcdCAqIG9uZXMgZm9yIHRoZSBoaWRkZW4gc3VicHJvZy4gSGVuY2UgYWxsIG9mIHRoZSBhZGp1c3RtZW50IG9wZXJhdGlvbnNcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MTc6XFx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUxOC1cXHQgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MTk6XFx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMC1cXHRpZiAoIXByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNjAwLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTYwMTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTYwMi1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNjkxLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTY5MjpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY5My1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIxLVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzIyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIzLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzQyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzQzLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk1OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk2LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4MzktXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODQwOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODQxLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjAtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODYxOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODYyLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4ODctXFx0XFx0XFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiArIG1vdjY0X3BlcmNwdV9yZWcgaW5zbi5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4ODg6XFx0XFx0XFx0ICogQWxsIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGNhbiBvbmx5XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODg5LVxcdFxcdFxcdCAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4OTctXFx0XFx0XFx0aSsrO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg5ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg5OS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xOTE4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTkxOTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTkyMC1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDA1LVxcdFxcdFxcdGNudCA9IDM7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDA2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDA3LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMzgtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDM5OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQwLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNTctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDU4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDU5LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDAtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTAxOlxcdFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTgzLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjE4NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250KTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIxMy0jZW5kaWZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMTQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMTUtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIzMi1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMzM6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI2Ni1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjgtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5OC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyOTk6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMDAtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjMyNC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzMjU6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMjYtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM0MC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzNDE6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgMSk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzQyLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzOTUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzk2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzk3LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0MTMtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDE0OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDE1LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0ODEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDgyOlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ4My1cXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDg5LVxcdFxcdCAqIHRvIGluc24gYWZ0ZXIgQlBGX1NUIHRoYXQgaW5pdHMgbWF5X2dvdG8gY291bnQuXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDkwOlxcdFxcdCAqIEFkanVzdG1lbnQgd2lsbCBzdWNjZWVkIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGRpZG4ndCBmYWlsLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ5MS1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MjUxOT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4MC1cXHQqdG90YWxfY250ID0gY250O1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MjU4MTpcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yNTgyLVxcdGlmICghbmV3X3Byb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjM2LjUxNDMzODg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MTc0MjUwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIFN0YXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBCUEYgc3RhdGUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBgY2hlY2tfcGt0X3B0cl9pZHNgIGZ1bmN0aW9uLCBzaW5jZSBpdCdzIGNhbGxlZCBmcm9tIGByZWdzYWZlYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcmVnc2FmZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW5kLCBpbXBvcnRhbnRseSwgd2hhdCB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBmdW5jdGlvbnMgd2l0aGluIGBzdGF0ZXMuY2AgYXJlIHRoYXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBvciB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IuIEknbSBsb29raW5nIGZvciBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGNvbm5lY3QgdG8gZWFjaCBvdGhlci4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgY29udGV4dCBmb3IgYGNoZWNrX3BrdF9wdHJfaWRzYCdzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDAuMDMxNzY2NTQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY5NzAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdzYWZlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9iYWNrdHJhY2suYz02NjU9dm9pZCBicGZfbWFya19hbGxfc2NhbGFyc19wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTczNS0gKiBJbiB0aGUgZm9ybWVyIGNhc2UsIHByZWNpc2UgbWFya2luZ3MgaW4gY3VycmVudCBzdGF0ZSBhcmUgY29tcGxldGVseVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzM2OiAqIGlnbm9yZWQgYnkgc3RhdGUgY29tcGFyaXNvbiBjb2RlIChzZWUgcmVnc2FmZSgpIGZvciBkZXRhaWxzKS4gT25seVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzM3LSAqIGNoZWNrcG9pbnRlZCAoXFxcIm9sZFxcXCIpIHN0YXRlIHByZWNpc2UgbWFya2luZ3MgYXJlIGltcG9ydGFudCwgYW5kIGlmIG9sZFxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzM4OiAqIHN0YXRlJ3MgcmVnaXN0ZXIvc2xvdCBpcyBwcmVjaXNlLCByZWdzYWZlKCkgYXNzdW1lcyBjdXJyZW50IHN0YXRlJ3NcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTczOS0gKiByZWdpc3Rlci9zbG90IGFzIHByZWNpc2UgYW5kIGNoZWNrcyB2YWx1ZSByYW5nZXMgZXhhY3RseSBhbmQgcHJlY2lzZWx5LiBJZlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MzU9ZW51bSBleGFjdF9sZXZlbCB7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0MS0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjU0MjpzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTQzLVxcdFxcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTczNz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4NC1cXHRcXHQgKiBDb25zdHJ1Y3QgYSBmYWtlIHJlZ2lzdGVyIGZvciBzdWNoIHN0YWNrIGFuZCBjYWxsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3ODU6XFx0XFx0ICogcmVnc2FmZSgpIHRvIGVuc3VyZSBzY2FsYXIgaWRzIGFyZSBjb21wYXJlZC5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4Ni1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzkwLVxcdFxcdFxcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IGN1cl9yZWcpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc5MTpcXHRcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzkyLVxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODI3LVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODI4OlxcdFxcdFxcdGlmICghcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04MjktXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBpZG1hcCwgZXhhY3QpKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04ODI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg5Ni1cXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrX2FyZ19yZWdzW2ldIDogXFx1MDAyNm5vdF9pbml0O1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODk3OlxcdFxcdGlmICghcmVnc2FmZShlbnYsIG9sZF9hcmcsIGN1cl9hcmcsIGlkbWFwLCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04OTgtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05ODA9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk5My1cXHRcXHRpZiAoKCgxIFxcdTAwM2NcXHUwMDNjIGkpIFxcdTAwMjYgbGl2ZV9yZWdzKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTk0OlxcdFxcdCAgICAhcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXJlZ3NbaV0sIFxcdTAwMjZjdXItXFx1MDAzZXJlZ3NbaV0sXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05OTUtXFx0XFx0XFx0ICAgICBcXHUwMDI2ZW52LVxcdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjQwLjA4MTQ2OTYzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU0MDU2MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHN0YXRlcy5jYCBmb3IgYGZ1bmNfc3RhdGVzX2VxdWFsYCBhbmQgYHJlZ3NhZmVgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHN0YXRlcy5jYCB0aGF0IGFyZSBhY3R1YWxseSAqdXNpbmcqIGBmdW5jX3N0YXRlc19lcXVhbGAgb3IgYHJlZ3NhZmVgLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYSBncmVwIHNlYXJjaDsgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjYWxscy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgYSByZWFzb24gd2UncmUgZXhhbWluaW5nIHRoaXMgc3BlY2lmaWNhbGx5IOKAkyBsaWtlbHkgYSBwb3RlbnRpYWwgYXJlYSBmb3Igb3B0aW1pemF0aW9uLCBhIHNlY3VyaXR5IGNvbmNlcm4sIG9yIHBlcmhhcHMganVzdCBhIGNvZGUgcmV2aWV3IHRvIGVuc3VyZSBjb25zaXN0ZW50IHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9uLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgZGVmaW5pdGlvbiwgaW50ZXJuYWwgdG8gdGhlIGZpbGUuIEkgYW0gbG9va2luZyBmb3Igc29tZXRoaW5nIG1vcmUgdmlzaWJsZSB0byB0aGUgb3V0c2lkZSB3b3JsZCwgYW5kIGFtIGZvY3VzaW5nIG9uIHRoaXMgZmlyc3QuXG5cblNvLCBJJ2xsIGdvIHRocm91Z2ggdGhlIGZ1bmN0aW9ucywgbm90aW5nICp3aGVyZSogdGhlc2UgY29tcGFyaXNvbnMgb3Igc2FmZXRseSBjaGVja3MgYXJlIGhhcHBlbmluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwdXJwb3NlIG9mIHRob3NlIGZ1bmN0aW9ucyAtIHdoYXQgaXMgaXQgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGZvcj8gV2hhdCBzdGF0ZXMgYXJlIHdlIHdvcmtpbmcgd2l0aD8gV2hhdCBpcyB0aGUgZnVuY3Rpb24gdHJ5aW5nIHRvIHZhbGlkYXRlIG9yIHNlY3VyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29kZSBzbWVsbHM/IEFyZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aGF0IEkgd291bGQgZXhwZWN0LCBnaXZlbiB0aGUgY29uc3RyYWludHMgb2YgdGhlIHN5c3RlbT8gQW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHdvdWxkIGJlIGEgaGlnaCBwcmlvcml0eS4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgbWVudGFsIG1vZGVsIG9mIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGNhbGxzLiBPbmNlIHRoYXQgY29udGV4dCBpcyB1bmRlcnN0b29kLCBpdCdzIGVhc2llciB0byBhc3Nlc3Mgd2hldGhlciB0aGUgdXNhZ2UgaXMgc291bmQgb3IgaWYgdGhlcmUncyByb29tIGZvciBpbXByb3ZlbWVudCwgc3VjaCBhcyBjaGFuZ2luZyB0aGUgd2F5IHRoYXQgc29tZSBzdGF0ZXMgYXJlIHZhbGlkYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDIuNzM1NTI4ODY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEzNjMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdW5jX3N0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9OTA0PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk3OS0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk4MDpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMDE1PXN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ2LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwNDc6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDIuNzgzNjcwMzE2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTkyNTY4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzdGF0ZXNfZXF1YWxgIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHN0YXRlc19lcXVhbGAgZnVuY3Rpb24gYmVpbmcgdXNlZD9cIiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGJlaGF2aW9yLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdHMgY29tcGFyaXNvbiBsb2dpYy4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBvZiB0aGUgY29kZWJhc2UsIEknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcywgbWF5YmUgdXNpbmcgYW4gSURFJ3MgXCJmaW5kIHVzYWdlc1wiIGZlYXR1cmUsIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGNvZGUgYW5hbHlzaXMgdG9vbCBpZiB0aGlzIGlzIGEgbGFyZ2UgcHJvamVjdC4gVGhlIGdvYWwgaGVyZSBpc24ndCBqdXN0IGEgbGlzdDsgSSdtIGFmdGVyIHRoZSAqdHlwZXMqIG9mIGNvbnRleHRzLiBBcmUgd2UgY29tcGFyaW5nIHN0YXRlcyBpbiBhIHNpbXVsYXRpb24gbG9vcCwgaW4gdmFsaWRhdGlvbiBjaGVja3MsIGluIHNlcmlhbGl6YXRpb24gcm91dGluZXMsIG9yIHdoYXQ/IEtub3dpbmcgdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZSB0byBgc3RhdGVzX2VxdWFsYC4gVW5kZXJzdGFuZGluZyB0aGlzIGNvdWxkIGFsc28gcmV2ZWFsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgYnVncyBzdGVtbWluZyBmcm9tIHRoZSBmdW5jdGlvbidzIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyOTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo0NC44MDI5Mjk3MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA2MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzktICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05ODEtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTAwNz1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTQtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDE1OnN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxNi1cXHRcXHRcXHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ2LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwNDc6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTI3ND1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY3LVxcdFxcdFxcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2ODpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyX2ZyYW1lO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzc3LVxcdFxcdFxcdFxcdFxcdGl0ZXJfcmVnID0gXFx1MDAyNmN1cl9mcmFtZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzFdO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM3ODpcXHRcXHRcXHRcXHRcXHQvKiBjdXJyZW50IHN0YXRlIGlzIHZhbGlkIGR1ZSB0byBzdGF0ZXNfZXF1YWwoKSxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNzktXFx0XFx0XFx0XFx0XFx0ICogc28gd2UgY2FuIGFzc3VtZSB2YWxpZCBpdGVyIGFuZCByZWcgc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTItXFx0XFx0XFx0XFx0aWYgKHNsLVxcdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXFx1MDAzZW1heV9nb3RvX2RlcHRoIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzkzOlxcdFxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTQtXFx0XFx0XFx0XFx0XFx0bG9vcCA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTgtXFx0XFx0XFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM5OTpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAwLVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA2LVxcdFxcdFxcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDA3OlxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwOC1cXHRcXHRcXHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDM5LVxcdFxcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NDA6XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDEtaGl0Olxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDc5LVxcdFxcdFxcdCAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDgwOlxcdFxcdFxcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIGVuY291bnRlcnMgYSBgc3RhdGVzX2VxdWFsKC4uLixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0ODEtXFx0XFx0XFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDQuODUxMzQzOTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzMjI1MjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFN0YXRlIFZpc2l0YXRpb24qKlxuXG5Pa2F5LCBzbyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2AgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBXaGF0IGNoYW5nZXMgd2VyZSBtYWRlIGluIHRoZSB2ZXJpZmllciBjb2RlIHRoYXQgcmVsYXRlIHRvIHRoaXMgc3RhdGUgbWFuYWdlbWVudD8gTG9va3MgbGlrZSBgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKClgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlKClgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSgpYCwgYW5kIHRoYXQgaGVscGVyLCBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoKWAsIHdlcmUgYWxsIHRvdWNoZWQuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlaXIgc2NvcGUgYmVjYXVzZSB0aGF0J2xsIHRlbGwgbWUgaWYgdGhleSdyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIG9yIGlmIHRoZXkncmUgaW50ZXJuYWwgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gTGV0J3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTYxMywiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo0OC4zODM1OTkzNTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTc5NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3N8c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlfHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc3LVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4Nzg6XFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc5LVxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMi1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAzOlxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwNC1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2FycmF5X2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDE4LVxcdFxcdFxcdCAqIHdpdGggZGlmZmVyZW50IG1hcHMgYW5kIHRoZSByZWdpc3RlciBzdGF0ZXMgcHJlcGFyZWQgYnlcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMTk6XFx0XFx0XFx0ICogc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlIHdpbGwgYmUgYWNjdXJhdGUuXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDIwLVxcdFxcdFxcdCAqXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3NDpcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSBodGFiX21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTc6XFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk4LVxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzYtXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3NzpcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTctXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU5ODpcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTktXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIyOlxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMy1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTA2PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwMjM6aW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDA2OT1zdGF0aWMgaW50IHNldF9tYXBfZWxlbV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDc5LVxcdG1hcCA9IGluc25fYXV4LVxcdTAwM2VtYXBfcHRyX3N0YXRlLm1hcF9wdHI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDgwOlxcdGlmICghbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA4MS1cXHQgICAgIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZm9yX2VhY2hfY2FsbGJhY2spIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA4NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwODY6XFx0ZXJyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhlbnYsIGNhbGxlciwgY2FsbGVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwODctXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDA5NT1zdGF0aWMgaW50IHNldF9sb29wX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMTYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTE3OnN0YXRpYyBpbnQgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTE4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDIwNT1zdGF0aWMgaW50IHNldF9yYnRyZWVfYWRkX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyMzctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjM4OnN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDIzOS1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MjY9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5NzItXFx0XFx0ZXJyID0gcHVzaF9jYWxsYmFja19jYWxsKGVudiwgaW5zbiwgaW5zbl9pZHgsIG1ldGEuc3VicHJvZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk3MzpcXHRcXHRcXHRcXHRcXHQgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5NzQtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3Njg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg5NC1cXHRcXHRlcnIgPSBwdXNoX2NhbGxiYWNrX2NhbGwoZW52LCBpbnNuLCBpbnNuX2lkeCwgbWV0YS5zdWJwcm9nbm8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzODk1OlxcdFxcdFxcdFxcdFxcdCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg5Ni1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MDQtXFx0XFx0ZXJyID0gcHVzaF9jYWxsYmFja19jYWxsKGVudiwgaW5zbiwgaW5zbl9pZHgsIG1ldGEuc3VicHJvZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkwNTpcXHRcXHRcXHRcXHRcXHQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTA2LVxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDguNDM2MTg0MDI0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NjUxNTEyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IGlzIHBpbnBvaW50aW5nIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUuIEZpcnN0LCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGlzIGBicGZfY2hlY2tgLCBidXQgdGhhdCdzIGEgZ2VuZXJhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCBvciBkaXJlY3RseSByZWxldmFudCB0byB0aGUgY2hhbmdlcyB0byBsaXN0IGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlOlxuXG4qICAgSW4gYGtlcm5lbC9icGYvY2ZnLmNgLCBJJ20gbG9va2luZyBhdCBgYnBmX2NoZWNrX2NmZ2AgKHdoaWNoIGNhbGxzIGB2aXNpdF9pbnNuYCB3aGljaCBjYWxscyBgcHVzaF9pbnNuYCkuXG4qICAgVGhlbiBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AsIHRoZXJlJ3MgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYGJwZl9vcHRfcmVtb3ZlX2RlYWRfY29kZWAsIGFuZCBgYnBmX29wdF9yZW1vdmVfbm9wc2AuXG4qICAgTW92aW5nIG9uIHRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgSSBoYXZlIGBjaGVja19wa3RfcHRyX2lkc2AsIGByZWdzYWZlYCwgYW5kIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuXG4qICAgRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgbmVlZCB0byBsb29rIGF0IGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgLCBhbmQgYGJwZl9jaGVja2AgKGFnYWluKS5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBzeW1ib2xzIGFyZSBpbiBgdm1saW51eGAgb3IgaWYgdGhleSBnZXQgaW5saW5lZC4gV2l0aCBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhleSdyZSBkZWZpbml0ZWx5IGV4cG9ydGVkLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGJpdCB0cmlja2llciwgdGhleSBtYXkgb3IgbWF5IG5vdCBiZSBpbmxpbmVkIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIncyBvcHRpbWl6YXRpb25zLiBTbywgdG8gYmUgc2FmZSwgSSdsbCBsaXN0IGJvdGggbm9uLXN0YXRpYyBzeW1ib2xzIGFzIHdlbGwgYXMgc3RhdGljIG9uZXMgaWYgdGhleSBhcmVuJ3Qgc3RhdGljIGlubGluZSBpbiBoZWFkZXJzLiBTZWN0aW9uIDQgY29uZmlybXMgdGhpczogSSBuZWVkIHRvIHRhcmdldCAqc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyogYW5kIGVudHJ5cG9pbnRzLCBhbmQgYWNjb3VudCBmb3Igc3RhdGljIGlubGluZXMuXG5cblNvLCBsZXQncyBuYWlsIGRvd24gdGhpcyBsaXN0LCBjb25maXJtaW5nIHRoYXQgYWxsIHRoZSBjb2RlIGZyb20gdGhlIGRpZmYgaXMgaW5jbHVkZWQ6XG4xLiAgYHB1c2hfaW5zbmAgYW5kIGBicGZfY2hlY2tfY2ZnYCBpbiBgY2ZnLmNgXG4yLiAgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgIGluIGBmaXh1cHMuY2BcbjMuICBgY2hlY2tfcGt0X3B0cl9pZHNgLCBgcmVnc2FmZWAsIGFuZCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2BcbjQuICBgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzYCwgYHNldF90aW1lcl9jYWxsYmFja19zdGF0ZWAsIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlYCBhbmQgYG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5YCBpbiBgdmVyaWZpZXIuY2BcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGFueSBkZXBlbmRlbmNpZXMgb24gY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgaXQncyBhIHNpbXBsZSBib29sZWFuLiBDaGVja2luZyB0aGUgY29kZSBmb3IgaWZkZWZzIGluIGBjZmcuY2AsIGBmaXh1cHMuY2AsIGBzdGF0ZXMuY2AsIGFuZCBgdmVyaWZpZXIuY2AsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55LiBgQlBGX1NZU0NBTExgIHNlZW1zIHRvIGJlIGFsbCBJIG5lZWQsIGFuZCBpdCBzZWxlY3RzIEJQRi5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogSXMgdGhpcyBgV29ydGhGdXp6aW5nPXRydWVgPyBBYnNvbHV0ZWx5LiBUaGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIEJQRiB2ZXJpZmllcidzIGNvbnRyb2wgZmxvdyBncmFwaCBjb25zdHJ1Y3Rpb24sIGluc3RydWN0aW9uIHJld3JpdGluZywgcGFja2V0IHBvaW50ZXIgc3RhdGUgY2hlY2tzLCBhbmQgbG9jayBJRCBhc3NpZ25tZW50LiBUaGlzIGFsbCB0b3VjaGVzIGNvcmUsIHJlYWNoYWJsZSBsb2dpYywgYW5kIHRoZSBCUEYgc3lzdGVtIGNhbGwgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuXG5cbk9rYXksIGxldCdzIG1ha2UgYSBmaW5hbCwgYWNjdXJhdGUgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDpcblxuKiAgIGBicGZfY2hlY2tfY2ZnYFxuKiAgIGBwdXNoX2luc25gXG4qICAgYGJwZl9wYXRjaF9pbnNuX2RhdGFgXG4qICAgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2BcbiogICBgY2hlY2tfcGt0X3B0cl9pZHNgXG4qICAgYHJlZ3NhZmVgXG4qICAgYGJwZl9pc19zdGF0ZV92aXNpdGVkYFxuKiAgIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgXG4qICAgYHNldF90aW1lcl9jYWxsYmFja19zdGF0ZWBcbiogICBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWBcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBub25lIG9mIHRoZXNlIGFyZSBnZW5lcmljIG9yIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgQlBGIHZlcmlmaWVyIHN1YnN5c3RlbSBhbmQgbm90IGdlbmVyYWwga2VybmVsIGxpZmVjeWNsZSBmdW5jdGlvbnMsIHdoaWNoIGlzIGdvb2QuXG5cbkZpbmFsbHksIEkgY2FuIHF1aWNrbHkgc3VtbWFyaXNlIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBzZXJpZXMgaXMgbW9kaWZ5aW5nIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGludm9sdmVkIGluIHZhbGlkYXRpbmcgY29udHJvbCBmbG93LCBzaWduYWwgaGFuZGxpbmcsIHBvaW50ZXIgY29tcGFyaXNvbiwgYW5kIHVuaXF1ZSBsb2NrIElEIGFzc2lnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYXJlIGV4ZXJjaXNlZCB0aHJvdWdoIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLCBzb1xuXG4iLCJJbnB1dFRva2VucyI6MjgxNzUsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo1Ny45MDEzMzc2NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU3NDcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tfY2ZnXCIsXG4gICAgXCJwdXNoX2luc25cIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tfY2ZnXCIsXG4gICAgXCJwdXNoX2luc25cIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjU3Ljk3NDkxODMyNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNzUwMDAzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo1Ny45NzU0MDE1OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjM3NDUxMTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIENGRyBhbmFseXNpcyBpbiBzZXZlcmFsIGFyZWFzOlxcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXFxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxcbjMuIEFkZHMgZmF0YWwgc2lnbmFsIGNoZWNrcyAoYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgKSB0byBwcmV2ZW50IG5vbi1raWxsYWJsZSBsb29wcyBkdXJpbmcgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcvcmVtb3ZhbCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuXFxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuIEFsbCBzdHJ1Y3QgZmllbGRzIGFkZGVkIChgcGt0X3B0cl9kZWx0YWAsIGBwa3RfcHRyX2RlbHRhX3NldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSByZWFkIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB2ZXJpZmllciBsb2dpYywgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGFuZCBzaWduYWwtaGFuZGxpbmcgaW1wcm92ZW1lbnRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uNWNmOTJjZTE4NTIwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC04NTQsNiArODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuK1x0czMyIHBrdF9wdHJfZGVsdGE7XG4rXHRib29sIHBrdF9wdHJfZGVsdGFfc2V0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9pZG1hcCB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcbmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NmZy5jXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXG5AQCAtMTAyLDYgKzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuK1x0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7XG4gXHRpbnQgKmluc25fc3RhY2sgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhY2s7XG4gXHRpbnQgKmluc25fc3RhdGUgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhdGU7XG4gXG5AQCAtMTIxLDYgKzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBjaGVja19zdWJwcm9ncygpIHByZXZlbnRzIGNvbnRyb2wgZmxvdyBmcm9tIGZhbGxpbmcgdGhyb3VnaCBhXG4rXHQgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW5cbitcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbitcdCAqIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIENGRyB1c2VkIGJ5IGxhdGVyIHBlci1zdWJwcm9ncmFtIHBhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbitcdFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xuK1x0XHRpZiAodyBcdTAwM2Mgc3VicHJvZy1cdTAwM2VzdGFydCB8fCB3IFx1MDAzZT0gKHN1YnByb2cgKyAxKS1cdTAwM2VzdGFydCkge1xuK1x0XHRcdHZlcmJvc2VfbGluZm8oZW52LCB0LCBcIiVkOiBcIiwgdCk7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxcblwiLCB0LCB3KTtcbitcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbitcdFx0XHRcdGVudiwgdCwgXCJmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cIixcbitcdFx0XHRcdFwiS2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0XCJJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCIsXG4rXHRcdFx0XHR0LCB3KTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZGlzYXNtLmhcIlxuIFxuQEAgLTMwNiwxMiArMzA3LDI4IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9wb2tlX2Rlc2NzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGxlbilcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBTb21lIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXMgcmVxdWlyZSBhblxuKyAqIE8ocHJvZy1cdTAwM2VsZW4pIG9wZXJhdGlvbiBwZXIgaW5zdHJ1Y3Rpb24uIEtlZXAgdGhlaXIgc2hhcmVkIHByaW1pdGl2ZXNcbisgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4rICovXG4rc3RhdGljIGJvb2wgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCh2b2lkKVxuK3tcbitcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjb25kX3Jlc2NoZWQoKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gKyBsZW4gLSAxLFxuQEAgLTUyMyw2ICs1NDAsOSBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFx0dW5zaWduZWQgaW50IG9yaWdfcHJvZ19sZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIC1FSU5UUjtcbitcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG5AQCAtMjY2Niw0ICsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgKzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdGlmIChpZG1hcC1cdTAwM2VjbnQgXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5vbGQgPSBvbGRfaWQ7XG4gXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLmN1ciA9IGN1cl9pZDtcbitcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcbiBcdFx0aWRtYXAtXHUwMDNlY250Kys7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTM1Miw2ICszNTMsNDMgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXG4rXHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4re1xuK1x0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cdTAwM2VtYXA7XG4rXHRzNjQgZGVsdGE7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghY2hlY2tfaWRzKG9sZC1cdTAwM2VpZCwgY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghb2xkLVx1MDAzZWlkKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZVxuK1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbitcdCAqIFBhY2tldCBwb2ludGVyIG9mZnNldHMgYXJlIGJvdW5kZWQgYnkgQlBGX01BWF9WQVJfT0ZGLCBzbyB0aGUgZGVsdGFcbitcdCAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuXG4rXHQgKi9cbitcdGRlbHRhID0gKHM2NCkoY3VyLVx1MDAzZXI2NC5iYXNlIC0gb2xkLVx1MDAzZXI2NC5iYXNlKTtcbitcdGlmIChkZWx0YSBcdTAwM2MgUzMyX01JTiB8fCBkZWx0YSBcdTAwM2UgUzMyX01BWClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpKyspIHtcbitcdFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIW1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCkge1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XG4rXHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS5cbiAgKlxuQEAgLTYzMiw4ICs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbitcdFx0LyogaWQgcmVsYXRpb25zIGFuZCBpbnRyYS1jbGFzcyBkaXNwbGFjZW1lbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cbitcdFx0aWYgKCFjaGVja19wa3RfcHRyX2lkcyhyb2xkLCByY3VyLCBpZG1hcCkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBuZXcgdmFsIG11c3Qgc2F0aXNmeSBvbGQgdmFsIGtub3dsZWRnZSAqL1xuIFx0XHRyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3LDYgKzQ0NywxMSBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4re1xuK1x0cmV0dXJuIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTAwMzUsNiArMTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRfX21hcmtfcmVnX2tub3duX3plcm8oXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzNdO1xuQEAgLTEwMTMxLDYgKzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdF9fbWFya19yZWdfa25vd25femVybyhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI2MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5pbmRleCBhMThkMzY4MGZiMTY5Li5jMzUwZmJiOTU4NDU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuQEAgLTE0LDYgKzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuK3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCxcbitcdFx0XHRcdCAgaW50IGVudW1faWQsIGludCBhY2Nlc3Nfc3RyX29mZiwgYm9vbCByZWxvY2F0ZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbitcdFx0QlBGX0NBTExfUkVMKDIpLFxuK1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9mdW5jX2luZm8gZnVuY3NbXSA9IHtcbitcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbitcdFx0eyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LFxuK1x0fTtcbitcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4rXHRcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcbitcdFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxuK1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbitcdFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxuK1x0fTtcbitcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4rXHRcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsXG4rXHRcdC5pbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpLFxuK1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4rXHRcdC5saWNlbnNlID0gKF9fdTY0KVwiR1BMXCIsXG4rXHRcdC5sb2dfYnVmID0gKF9fdTY0KWxvZyxcbitcdFx0LmxvZ19zaXplID0gc2l6ZW9mKGxvZyksXG4rXHRcdC5sb2dfbGV2ZWwgPSAxLFxuK1x0XHQucHJvZ19idGZfZmQgPSBidGZfZmQsXG4rXHRcdC5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLFxuK1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuK1x0XHQuZnVuY19pbmZvX2NudCA9IEFSUkFZX1NJWkUoZnVuY3MpLFxuK1x0fTtcbitcbitcdGlmIChyZWxvY2F0ZSkge1xuK1x0XHRhdHRyLmNvcmVfcmVsb19jbnQgPSAxO1xuK1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbitcdFx0YXR0ci5jb3JlX3JlbG9fcmVjX3NpemUgPSBzaXplb2YocmVsbyk7XG4rXHR9XG4rXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4rXHRyZXR1cm4gc3lzX2JwZl9wcm9nX2xvYWQoXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcbit7XG4rXHRjb25zdCB2b2lkICpyYXdfYnRmO1xuK1x0c3RydWN0IGJ0ZiAqYnRmID0gTlVMTDtcbitcdF9fdTMyIHJhd19idGZfc2l6ZTtcbitcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4rXHRpbnQgaW50X2lkLCBtYWluX2lkLCBwcm9nX2ZkID0gLTEsIHByb3RvX2lkLCBzdWJfaWQ7XG4rXG4rXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXHRpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVChpbnRfaWQsIDAsIFwiYWRkX2ludFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcImFkZF9mdW5jX3Byb3RvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwibWFpbl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFwiYWRkX21haW5fZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwic3ViX2ZuXCIsIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpO1xuK1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcImFkZF9zdWJfZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcImNvcmVfcmVsb19zdWJwcm9nX3BvaXNvbl9taXNzaW5nXCIsIDQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXCJhZGRfZW51bVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFwidmFsdWVcIiwgMCksIFwiYWRkX2VudW1fdmFsdWVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgXCIwXCIpO1xuK1x0aWYgKCFBU1NFUlRfR1QoYWNjZXNzX3N0cl9vZmYsIDAsIFwiYWRkX2FjY2Vzc19zdHJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCBcInJhd19idGZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcImJ0Zl9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBUaGUgc2FtZSB0d28tc3VicHJvZ3JhbSBwcm9ncmFtIGlzIHZhbGlkIGJlZm9yZSB0aGUgcmVsb2NhdGlvbi4gKi9cbitcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuK1x0XHRcdFx0XHQgYWNjZXNzX3N0cl9vZmYsIGZhbHNlKTtcbitcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwiY29udHJvbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdC8qXG4rXHQgKiBQb2lzb24gdGhlIGZpcnN0IHN1YnByb2dyYW0ncyB0ZXJtaW5hbCBleGl0LiBUaGUgdmVyaWZpZXIgbXVzdCByZWplY3RcbitcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuK1x0ICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFwicG9pc29uZWRfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCIsXG4rXHRcdFx0ICBcInBvaXNvbmVkX2xvYWRfbG9nXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoZW52LnZlcmJvc2l0eSBcdTAwM2UgVkVSQk9TRV9OT1JNQUwgXHUwMDI2XHUwMDI2IGxvZ1swXSkge1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCIpO1xuK1x0XHRwcmludGYoXCIlc1wiLCBsb2cpO1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCIpO1xuK1x0fVxuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRjbG9zZShidGZfZmQpO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rfVxuK1xuIC8qIENoZWNrIHRoYXQgdmVyaWZpZXIgcmVqZWN0cyBCUEYgcHJvZ3JhbSBjb250YWluaW5nIHJlbG9jYXRpb25cbiAgKiBwb2ludGluZyB0byBub24tZXhpc3RlbnQgQlRGIHR5cGUuXG4gICovXG5AQCAtMTIwLDYgKzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpXG4gXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXG4ge1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJwb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3JcIikpXG4rXHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJhZF9sb2NhbF9pZFwiKSlcbiBcdFx0dGVzdF9iYWRfbG9jYWxfaWQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5AQCAtMCwwICsxLDEzMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNkZWZpbmUgTk9QX0NOVFx0XHQzMjc2OFxuKyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcdCgxMDBVTEwgKiAxMDAwICogMTAwMClcbisjZGVmaW5lIFJFQVBfVElNRU9VVF9OU1x0XHQoMTAwMFVMTCAqIDEwMDAgKiAxMDAwKVxuK1xuK3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHM7XG4rXG4rXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1x0cmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgKyB0cy50dl9uc2VjO1xuK31cbitcbitzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XG4rXHRcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXG4rXHRcdC50dl9uc2VjID0gZHVyYXRpb24gJSAxMDAwMDAwMDAwVUxMLFxuK1x0fTtcbitcbitcdHdoaWxlIChuYW5vc2xlZXAoXHUwMDI2dHMsIFx1MDAyNnRzKSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpXG4rXHRcdDtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dClcbit7XG4rXHRfX3U2NCBkZWFkbGluZSA9IG1vbm90b25pY19ucygpICsgdGltZW91dDtcbitcdGludCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdhaXRwaWQocGlkLCBzdGF0dXMsIFdOT0hBTkcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH0gd2hpbGUgKG1vbm90b25pY19ucygpIFx1MDAzYyBkZWFkbGluZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gTlVMTDtcbitcdF9fdTY0IHN0YXJ0LCBjb250cm9sX3RpbWUsIGtpbGxfZGVsYXk7XG4rXHRpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTtcbitcdGludCBwcm9nX2ZkID0gLTEsIHN0YXR1cyA9IDA7XG4rXHRwaWRfdCBwaWQgPSAtMTtcbitcdGNoYXIgYnl0ZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRpbnNucyA9IGNhbGxvYyhOT1BfQ05UICsgMiwgc2l6ZW9mKCppbnNucykpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluc25zLCBcImNhbGxvY1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTk9QX0NOVDsgaSsrKVxuK1x0XHRpbnNuc1tpXSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzEpO1xuK1x0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRpbnNuc1tOT1BfQ05UICsgMV0gPSBCUEZfRVhJVF9JTlNOKCk7XG4rXG4rXHRzdGFydCA9IG1vbm90b25pY19ucygpO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0aW5zbnMsIE5PUF9DTlQgKyAyLCBOVUxMKTtcbitcdGNvbnRyb2xfdGltZSA9IG1vbm90b25pY19ucygpIC0gc3RhcnQ7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfcHJvZ19sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5PUF9DTlQ7IGkrKylcbitcdFx0aW5zbnNbaV0gPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDApO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlZmQpLCBcInBpcGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIXBpZCkge1xuK1x0XHRjbG9zZShwaXBlZmRbMF0pO1xuK1x0XHRpZiAod3JpdGUocGlwZWZkWzFdLCBcInhcIiwgMSkgIT0gMSlcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0Y2xvc2UocGlwZWZkWzFdKTtcbitcdFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0XHRpbnNucywgTk9QX0NOVCArIDIsIE5VTEwpO1xuK1x0XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRcdF9leGl0KHByb2dfZmQgXHUwMDNjIDApO1xuK1x0fVxuK1xuK1x0Y2xvc2UocGlwZWZkWzFdKTtcbitcdHBpcGVmZFsxXSA9IC0xO1xuK1x0cmV0ID0gcmVhZChwaXBlZmRbMF0sIFx1MDAyNmJ5dGUsIDEpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAxLCBcImNoaWxkX3JlYWR5XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcFxuK1x0ICogcmVtb3ZhbCBwYXNzIGlzIHF1YWRyYXRpYywgc28gZm91ciBjb250cm9sLWxvYWQgdGltZXMgc3RpbGwgbGVhdmVzIGFcbitcdCAqIHdpZGUgd2luZG93IGluIHdoaWNoIGFuIGFmZmVjdGVkIGtlcm5lbCBpcyByZXdyaXRpbmcgaW5zdHJ1Y3Rpb25zLlxuK1x0ICovXG4rXHRraWxsX2RlbGF5ID0gTUFYKGNvbnRyb2xfdGltZSAqIDQsIE1JTl9LSUxMX0RFTEFZX05TKTtcbitcdHNsZWVwX25zKGtpbGxfZGVsYXkpO1xuK1x0aWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCBcImtpbGxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XG4rXHRyZXQgPSB3YWl0cGlkX3RpbWVvdXQocGlkLCBcdTAwMjZzdGF0dXMsIFJFQVBfVElNRU9VVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgXCJwcm9nX2xvYWRfa2lsbGFibGVcIikpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiY29udHJvbCBsb2FkICVsbHUgdXMsIGNoaWxkIHN0aWxsIGFsaXZlICVsbHUgdXMgYWZ0ZXIgU0lHS0lMTFxcblwiLFxuK1x0XHRcdGNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXHRwaWQgPSAtMTtcbitcdEFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdURVJNU0lHKHN0YXR1cykgPT0gU0lHS0lMTCxcbitcdFx0ICAgIFwia2lsbGVkX2J5X3NpZ2tpbGxcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChwcm9nX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRpZiAocGlwZWZkWzBdIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocGlwZWZkWzBdKTtcbitcdGlmIChwaXBlZmRbMV0gXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwaXBlZmRbMV0pO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuK1x0fVxuK1x0ZnJlZShpbnNucyk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSw3MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rc3RydWN0IGJwZl9tYXA7XG4rXG4rc3RydWN0IGxvY2tfdmFsdWUge1xuK1x0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XG4rfSBsb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbitcdHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTtcbit9O1xuK1xuK3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgc3RydWN0IGNhbGxiYWNrX2N0eCAqY3R4KVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4rXG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCBcdTAwMjZjdHgsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fZGVzY3JpcHRpb24oXCJjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwibmVzdGVkIGNhbGxiYWNrIGNhbiBsb2NrIGl0cyBvd24gbWFwIHZhbHVlXCIpXG4rX19zdWNjZXNzXG4raW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHlfc2FtZSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG5AQCAtNSw2ICs1LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuK1NFQyhcInhkcFwiKVxuK19fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZVwiKVxuK19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKVxuK19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXFxcbitcdHI4ID0gKih1MzIgKikocjEgKyAlW3hkcF9tZF9kYXRhX2VuZF0pO1xcXG4rXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXG4rXHRyNiA9IHI5O1xcXG4rXHRyNiArPSA4O1xcXG4rXHRpZiByNiBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjkgKyAwKTtcXFxuK1x0cjQgPSByMDtcXFxuK1x0cjQgXHUwMDI2PSAxNTtcXFxuK1x0cjcgPSByMDtcXFxuK1x0cjcgXHUwMDNlXHUwMDNlPSA2MztcXFxuK1x0aWYgcjcgIT0gMCBnb3RvIGxfcGF0aF9iXyU9O1xcXG4rXHRyMiA9IHI5O1xcXG4rXHRyMiArPSByNDtcXFxuK1x0cjMgPSByMjtcXFxuK1x0cjMgKz0gNDtcXFxuK1x0Z290byBsX2pvaW5fJT07XFxcbitsX3BhdGhfYl8lPTogXFxcbitcdHI0IFx1MDAyNj0gMztcXFxuK1x0cjQgKz0gODtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzIC09IDQ7XFxcbitsX2pvaW5fJT06IFxcXG4rXHRyNSA9IHIzO1xcXG4rXHRyNSArPSA0O1xcXG4rXHRpZiByNSBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxuK2xfZXhpdF8lPTogXFxcbitcdHIwID0gMDtcXFxuK1x0ZXhpdDtcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksXG4rXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gU0VDKFwieGRwXCIpXG4gX19kZXNjcmlwdGlvbihcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUjMgcG9pbnRlciBhcml0aG1ldGljIG9uIHBrdF9lbmRcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjU3Ljk3NTQwNDUyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDU5NDM1ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzIG9mIEJQRiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24g4oCTIGBOZWVkc0tNU0FOID0gdHJ1ZS9mYWxzZWAg4oCTIGFuZCB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGF0IGRlY2lzaW9uIChgS01TQU5SZWFzb25pbmdgKS4gSSBuZWVkIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZXNlIGNoYW5nZXMgYWNyb3NzIHRoZSBmaWxlcyBwcm92aWRlZC5cblxuRmlyc3QsIEkgc2VlIGEgbmV3IG1lbWJlciwgYHBrdF9wdHJfZGVsdGFgLCBhbmQgYHBrdF9wdHJfZGVsdGFfc2V0YCBhZGRlZCB0byBgc3RydWN0IGJwZl9pZF9wYWlyYCBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRyYWNraW5nIHJlbGF0aXZlIGRpc3BsYWNlbWVudHMgb2YgcGFja2V0IHBvaW50ZXJzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHBvdGVudGlhbCBkYXRhIHJhY2VzLlxuXG5JbiBga2VybmVsL2JwZi9jZmcuY2AsIGEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIENvbnRyb2wgRmxvdyBHcmFwaCAoQ0ZHKSB2YWxpZGF0aW9uIHRvIHJlamVjdCBmYWxsdGhyb3VnaCBvdXQgb2Ygc3VicHJvZ3JhbXMuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QsIHNvbGlkIGRlZmVuc2l2ZSBtZWFzdXJlIGFnYWluc3QgY29udHJvbC1mbG93IGVycm9ycy4gSXQncyB1bmxpa2VseSB0byBiZSBhIEtNU0FOIGNvbmNlcm4gZGlyZWN0bHksIGJ1dCBhIGZsYXdlZCBDRkcgY291bGQgbGVhZCB0byBvdGhlciBpc3N1ZXMuXG5cbk5leHQsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgdGhlIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgZnVuY3Rpb25zIG5vdyBhYm9ydCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZldHkgY2hlY2sgZHVyaW5nIGluc3RydWN0aW9uIG1hbmlwdWxhdGlvbi4gIFdoaWxlIGhhbmRsaW5nIHNpZ25hbHMgaXMgZ2VuZXJhbGx5IGdvb2QgcHJhY3RpY2UsIEknbSBub3QgaW1tZWRpYXRlbHkgc2VlaW5nIGEgc3Ryb25nIEtNU0FOIGltcGxpY2F0aW9uIGhlcmUsIHVubGVzcyB0aGUgYWJvcnQgbGVhdmVzIHNvbWV0aGluZyBpbiBhbiB1bnNhZmUgc3RhdGUuXG5cbmBrZXJuZWwvYnBmL3N0YXRlcy5jYCBpbnRyb2R1Y2VzIGBjaGVja19wa3RfcHRyX2lkc2AgYW5kIHVwZGF0ZXMgYHJlZ3NhZmVgLiAgVGhlIGFkZGl0aW9uIG9mIHRoZSBgY2hlY2tfcGt0X3B0cl9pZHNgIGZ1bmN0aW9uIGFuZCB0aGUgbG9naWMgdG8gdHJhY2sgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHdpdGhpbiBgc3RydWN0IGJwZl9pZF9wYWlyYCBhcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgc28gZmFyLiBUaGlzIGFwcGVhcnMgdG8gYmUgYWltZWQgYXQgbWFpbnRhaW5pbmcgcmVsYXRpdmUgZGlzcGxhY2VtZW50IG9mIHBhY2tldCBwb2ludGVycyBhY3Jvc3MgQlBGIHByb2dyYW0gdHJhbnNmb3JtYXRpb25zLCBhbmQgdGhpcyBtaWdodCBpbnRyb2R1Y2Ugc29tZSBwb3RlbnRpYWwgcmlza3MuIFRoZSBleHBsaWNpdCBjaGVja3MgZm9yIGBTMzJfTUlOYCBhbmQgYFMzMl9NQVhgIGZvciB0aGUgZGVsdGEgYXJlIGdvb2QuIFRoZSBgY2hlY2tfaWRzYCBmdW5jdGlvbiBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGFuIG9sZGVyIGNvbnN0cnVjdCB0aGF0IHRoaXMgY2hhbmdlIGJ1aWxkcyB1cG9uLlxuXG5MZXQgbWUgZXhhbWluZSB3aGVyZSBgc3RydWN0IGJwZl9pZG1hcGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZldGltZSBhbmQgc2NvcGUgb2YgdGhpcyBuZXcgcGFja2V0IHBvaW50ZXIgdHJhY2tpbmcuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGtlcm5lbCBjb2RlIGZvciBhbGxvY2F0aW9ucyBhbmQgdXNlcyBvZiB0aGlzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBwb3B1bGF0ZWQgYW5kIGRlYWxsb2NhdGVkIGFuZCB3aG8gaGFzIGFjY2VzcyB0byBpdC4gQW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGRhdGEgYWNjZXNzIHJpc2tzIHdpdGhpbiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGEgbWFqb3IgY29uY2VybiBmb3IgS01TQU4uIEknbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gb2YgdGhpcyBtYXAuIFRoaXMgaXMgd2hlcmUgSSdsbCBiZSBmb2N1c2luZyBteSBLTVNBTiBhbmFseXNpcy5cblxuRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIGEgZnVuY3Rpb24gYG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5YC4gSXQgYXBwZWFycyB0byBhZGRyZXNzIGxvY2sgaWRlbnRpdHkgaW4gY2FsbGJhY2tzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYXJyYXkgbWFwcy4gSXQgY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlbGVtZW50IGluIHRoZSBtYXAgYW5kIHRoZSBtYXAgaXMgb2YgdHlwZSBgQlBGX01BUF9UWVBFX0FSUkFZYC4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO2AgdG8gYXNzaWduIGFuIElEIHRvIGEgcmVnaXN0ZXIgcG9pbnRpbmcgdG8gYSBzcGlubG9jayBpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIHRoZSBtYXAgZG9lc24ndCBoYXZlIGEgc3RhdGljIGlkZW50aXR5LiBUaGlzIGFwcGVhcnMgcmVsZXZhbnQgZm9yIHByb3RlY3Rpbmcgc3BpbmxvY2tzIGluIHRoZSBjb250ZXh0IG9mIGNhbGxiYWNrcy4gVGhlIEtNU0FOIGltcGxpY2F0aW9ucyBhcmUgbGVzcyBvYnZpb3VzIGhlcmUsIGJ1dCBJIG11c3Qgbm90IGRpc2NvdW50IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHBvaW50ZXIgbWFuaXB1bGF0aW9uLlxuXG5UaGUgc2VsZnRlc3RzIGFyZSBhIGdvb2Qgc2lnbjsgSSdsbCBuZWVkIHRvIHJldmlldyB0aGVtIHRvIHNlZSB3aGF0IHNjZW5hcmlvcyB0aGV5IGNvdmVyLiBUZXN0cyBmb3Igc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwcm9ncmFtIGxvYWQsIGNhbGxiYWNrIGxvY2sgaWRlbnRpdHksIGNvcmUgcmVsb2MgcmF3LCBhbmQgeGRwIHJlZ3NhZmUgYWxsIHNlZW0gcmVsZXZhbnQgdG8gcG90ZW50aWFsIGRhdGEgcmFjZSBpc3N1ZXMuXG5cbk92ZXJhbGwsIHRoZSBwYWNrZXQgcG9pbnRlciB0cmFja2luZyBhbmQgdGhlIHNwaW5sb2NrIHByb3RlY3Rpb24gc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBhcmVhcyB0byByZXF1aXJlIGNhcmVmdWwgc2NydXRpbnkgZm9yIEtNU0FOLCBhbmQgbXkgYGdyZXBwZXJgIHNlYXJjaCBmb3IgYHN0cnVjdCBicGZfaWRtYXBgIHdpbGwgYmUgY3J1Y2lhbCB0byBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgYE5lZWRzS01TQU5gIHZhbHVlIGFuZCB3cml0aW5nIHRoZSBgS01TQU5SZWFzb25pbmdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyNDowNi40MzQ4NDQxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MTE2OTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYnBmX2lkbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9ODU0PXN0cnVjdCBicGZfaWRfcGFpciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTg2MC1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjg2MTpzdHJ1Y3QgYnBmX2lkbWFwIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTg2Mi1cXHR1MzIgdG1wX2lkX2dlbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTIwPXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTY3LVxcdHVuaW9uIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjk2ODpcXHRcXHRzdHJ1Y3QgYnBmX2lkbWFwIGlkbWFwX3NjcmF0Y2g7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05NjktXFx0XFx0c3RydWN0IGJwZl9pZHNldCBpZHNldF9zY3JhdGNoO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0zMDI9c3RhdGljIGJvb2wgcmFuZ2Vfd2l0aGluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMxOC0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjMxOTpzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMjAte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0zNTY9c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1Ny1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MzU4OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzU5LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDE3LSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDE4OnN0YXRpYyBib29sIGNoZWNrX3NjYWxhcl9pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MjY9c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUyNy1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1Mjg6XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI5LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9NTQyPXN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDM6XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0NC1cXHRcXHQgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9NzM3PXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjczODpcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MzktXFx0XFx0ICAgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODgyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODgzOlxcdFxcdFxcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg4NC1cXHRcXHRcXHQgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05MDQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjkwNTpcXHRcXHQgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05MDYte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMDA3PXN0YXRpYyB2b2lkIHJlc2V0X2lkbWFwX3NjcmF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDgte1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwOTpcXHRzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEwLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0Mjc9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0MzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Mzc6c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQzOC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ1NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ1NTpzdGF0aWMgaW50IGlkc3RhY2tfcG9wKHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDU2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NDY0PXN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjctXFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Njg6XFx0c3RydWN0IGJwZl9pZG1hcCAqaWRzdGFjayA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjktXFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjA4LjM4NjAxOTMxMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIxMDM0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLZXJuZWwgQlBGIFN0YXRlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgY2hlY2tfaWRzYCBhbmQgYHJlc2V0X2lkbWFwX3NjcmF0Y2hgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCUEYga2VybmVsIGlzIG1hbmFnaW5nIGl0cyBpbnRlcm5hbCBzdGF0ZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJRCBtYXBwaW5nLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgc3RhcnQgZGlnZ2luZy4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGNoZWNraW5nIGFuZCBwb3RlbnRpYWxseSByZXNldHRpbmcgdGhlIElEIG1hcCBzY3JhdGNoIGFyZWEgbGl2ZXMuIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QuIEknbSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IElEcyBhcmUgdmFsaWRhdGVkLCBwb3RlbnRpYWxseSByZS1tYXBwZWQsIGFuZCBob3cgdGVtcG9yYXJ5IHNjcmF0Y2ggc3BhY2UgaXMgaGFuZGxlZCB0byBrZWVwIHRoZSBCUEYgZXhlY3V0aW9uIGVudmlyb25tZW50IGNsZWFuIGFuZCBjb3JyZWN0LiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBrZXkgdG8gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyZSBhbmQgZWZmaWNpZW50IEJQRiBwcm9ncmFtIGV4ZWN1dGlvbjsgdGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjEwLjUwNzA1NjQ0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0e1xcbiAzMjE6XFx0XFx0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cXHUwMDNlbWFwO1xcbiAzMjI6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdC8qIGVpdGhlciBib3RoIElEcyBzaG91bGQgYmUgc2V0IG9yIGJvdGggc2hvdWxkIGJlIHplcm8gKi9cXG4gMzI1OlxcdFxcdGlmICghIW9sZF9pZCAhPSAhIWN1cl9pZClcXG4gMzI2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aWYgKG9sZF9pZCA9PSAwKSAvKiBjdXJfaWQgPT0gMCBhcyB3ZWxsICovXFxuIDMyOTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKykge1xcbiAzMzI6XFx0XFx0XFx0aWYgKG1hcFtpXS5vbGQgPT0gb2xkX2lkKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIG1hcFtpXS5jdXIgPT0gY3VyX2lkO1xcbiAzMzQ6XFx0XFx0XFx0aWYgKG1hcFtpXS5jdXIgPT0gY3VyX2lkKVxcbiAzMzU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHQvKiBSZWFjaGVkIHRoZSBlbmQgb2Yga25vd24gbWFwcGluZ3M7IGhhdmVuJ3Qgc2VlbiB0aGlzIGlkIGJlZm9yZSAqL1xcbiAzMzk6XFx0XFx0aWYgKGlkbWFwLVxcdTAwM2VjbnQgXFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcXG4gMzQwOlxcdFxcdFxcdG1hcFtpZG1hcC1cXHUwMDNlY250XS5vbGQgPSBvbGRfaWQ7XFxuIDM0MTpcXHRcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0uY3VyID0gY3VyX2lkO1xcbiAzNDI6XFx0XFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XFxuIDM0MzpcXHRcXHRcXHRpZG1hcC1cXHUwMDNlY250Kys7XFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzQ1OlxcdFxcdH1cXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0LypcXG4gMzQ4OlxcdFxcdCAqIGlkbWFwIHNsb3RzIGFyZSBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGFuZCBzdGFjayBzbG90cy5cXG4gMzQ5OlxcdFxcdCAqIFNpbmNlIHJlZmVyZW5jZWQgZHlucHRycyBhY3F1aXJlIGludGVybWVkaWF0ZSByZWZlcmVuY2VzIHRoYXQgZG9cXG4gMzUwOlxcdFxcdCAqIG5vdCBsaXZlIGluIGVpdGhlciwgc28gdGhlIG1hcCBjYW4gYmUgZXhoYXVzdGVkLiBTaW5jZSBpdCBpcyB1bmxpa2VseSxcXG4gMzUxOlxcdFxcdCAqIGZhaWwgdGhlIHZlcmlmaWNhdGlvbiBieSB0cmVhdGluZyB0aGUgc3RhdGVzIGFzIG5vdCBlcXVpdmFsZW50LlxcbiAzNTI6XFx0XFx0ICovXFxuIDM1MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM1NDpcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdHN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXFxuIDM1NzpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxcbiAzNTg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIDM1OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjEwLjUwNzE5ODg4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODYzNTU4NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgcmVzZXRfaWRtYXBfc2NyYXRjaGAqKlxuXG5SaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSwgYW5kIEkgcmVhbGx5IG1lYW4gaXQsIHRvIGFsc28gc2NydXRpbml6ZSBgcmVzZXRfaWRtYXBfc2NyYXRjaGAuIEl0J3MgZWFzeSB0byBmb2N1cyBvbiB0aGUgcHJpbWFyeSBpc3N1ZSwgYnV0IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IHRoZXNlIHNlZW1pbmdseSBwZXJpcGhlcmFsIGZ1bmN0aW9ucyBjYW4gb2Z0ZW4gaGFyYm9yIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzIHRoYXQgdWx0aW1hdGVseSBiaXRlIHlvdSBpbiB0aGUgcmVhciBsYXRlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGxvZ2ljLCBidXQgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgYHJlc2V0X2lkbWFwX3NjcmF0Y2hgIGNvdWxkIHByZXZlbnQgYSB3b3JsZCBvZiBodXJ0IGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaWYgaXQncyBpbnZvbHZlZCBpbiBhbnkgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3IgY2xlYW51cCBwcm9jZWR1cmVzLiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3Mgd29ya2luZyBhcyBleHBlY3RlZCwgZXZlbiBpZiBpdCBzZWVtcyB1bnJlbGF0ZWQgYXQgZmlyc3QgZ2xhbmNlLiBJdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSBhbmQgdGhhdCB3YXJyYW50cyBhbiBpbnNwZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjQ6MTQuMzcwNzYwMjU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDU6XFx0fVxcbjEwMDY6XFx0XFxuMTAwNzpcXHRzdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuMTAwODpcXHR7XFxuMTAwOTpcXHRcXHRzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdGlkbWFwLVxcdTAwM2V0bXBfaWRfZ2VuID0gZW52LVxcdTAwM2VpZF9nZW47XFxuMTAxMjpcXHRcXHRpZG1hcC1cXHUwMDNlY250ID0gMDtcXG4xMDEzOlxcdH1cXG4xMDE0OlxcdFxcbjEwMTU6XFx0c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMTAxNjpcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbjEwMTc6XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG4xMDE4OlxcdFxcdFxcdFxcdCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbjEwMTk6XFx0e1xcbjEwMjA6XFx0XFx0dTMyIGluc25faWR4O1xcbjEwMjE6XFx0XFx0aW50IGk7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdGlmIChvbGQtXFx1MDAzZWN1cmZyYW1lICE9IGN1ci1cXHUwMDNlY3VyZnJhbWUpXFxuMTAyNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjE0LjM3MDkxODMyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDU1NTE2NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBpZHN0YWNrX3B1c2hgIGFuZCBgaWRzdGFja19wb3BgIHdpdGggUmVzcGVjdCB0byBgaWRtYXBfc2NyYXRjaGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gaG93IGBpZHN0YWNrX3B1c2hgIGFuZCBgaWRzdGFja19wb3BgIGludGVyYWN0IHdpdGggYGlkbWFwX3NjcmF0Y2hgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgYGlkbWFwX3NjcmF0Y2hgIGxpa2VseSBzZXJ2ZXMgYXMgYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50ICpob3cqIGl0J3MgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZXNlIHN0YWNrIG9wZXJhdGlvbnMuIElzIGl0IGEgc3RhZ2luZyBhcmVhIGZvciBJRHMgYmVmb3JlIGJlaW5nIHBsYWNlZCBvbiB0aGUgc3RhY2s/IElzIGl0IHVzZWQgZm9yIHZhbGlkYXRpb24gb3IgY29uZmxpY3QgZGV0ZWN0aW9uIGR1cmluZyBwdXNoL3BvcCBvcGVyYXRpb25zPyBPciBwZXJoYXBzIGl0IGhhbmRsZXMgdGVtcG9yYXJ5IHN0b3JhZ2Ugb2YgZWxlbWVudHMgdGhhdCBhcmUgYmVpbmcgXCJwb3BwZWRcIiBhbmQgbGF0ZXIgcHV0IHNvbWV3aGVyZSBlbHNlP1xuXG5JJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaGludHMgcmVnYXJkaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIENvdWxkIGNvbmN1cnJlbnQgY2FsbHMgdG8gdGhlc2Ugc3RhY2sgZnVuY3Rpb25zIGxlYWQgdG8gY29ycnVwdGlvbiBvZiBkYXRhIGluIGBpZG1hcF9zY3JhdGNoYD8gQXJlIHRoZXJlIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2wgbWVhc3VyZXM/IFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZXNlIHRoaW5ncyB3aWxsIGd1aWRlIG15IGFzc2Vzc21lbnQgb2YgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHNvdW5kbmVzcy4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBhbHRlciB0aGUgdmFsdWUsIGluIGFueSB3YXksIG9mIGBpZG1hcF9zY3JhdGNoYC4gVGhpcyB3aWxsIHRlbGwgbWUgbW9yZSBhYm91dCBpdHMgZXhwZWN0ZWQgYmVoYXZpb3VyLlxuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMsIGZvY3VzaW5nIG9uIGhvdyBgaWRtYXBfc2NyYXRjaGAgaXMgYWNjZXNzZWQgYW5kIG1vZGlmaWVkIGluIHJlbGF0aW9uIHRvIHRoZSBzdGFjayBtYW5pcHVsYXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IEkgbmVlZCB0byBiZSBleGFjdCwgc28gdGhhdCBJIGNhbiB0aGVuIGFwcGx5IHRoaXMga25vd2xlZGdlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHNlZSBpZiBpdCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gYSBzaW1pbGFyIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjE3LjgyNjQzNzUzN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5NDMwOlxcdFxcbjk0MzE6XFx0XFx0ZXJyID0gX19yZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVxcdTAwM2VjdXJfc3RhdGUsIGlkKTtcXG45NDMyOlxcdFxcdGlmICghZXJyKVxcbjk0MzM6XFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3JlZl9yZWxlYXNlKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgaWQpO1xcbjk0MzQ6XFx0XFx0cmV0dXJuIGVycjtcXG45NDM1OlxcdH1cXG45NDM2OlxcdFxcbjk0Mzc6XFx0c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcXG45NDM4OlxcdHtcXG45NDM5OlxcdFxcdGludCBpO1xcbjk0NDA6XFx0XFxuOTQ0MTpcXHRcXHRpZiAoIWlkKVxcbjk0NDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuOTQ0MzpcXHRcXG45NDQ0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpZG1hcC1cXHUwMDNlY250OyBpKyspXFxuOTQ0NTpcXHRcXHRcXHRpZiAoaWRtYXAtXFx1MDAzZW1hcFtpXS5vbGQgPT0gaWQpXFxuOTQ0NjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG45NDQ3OlxcdFxcbjk0NDg6XFx0XFx0aWYgKFdBUk5fT05fT05DRShpZG1hcC1cXHUwMDNlY250IFxcdTAwM2U9IEJQRl9JRF9NQVBfU0laRSkpXFxuOTQ0OTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG45NDUwOlxcdFxcbjk0NTE6XFx0XFx0aWRtYXAtXFx1MDAzZW1hcFtpZG1hcC1cXHUwMDNlY250KytdLm9sZCA9IGlkO1xcbjk0NTI6XFx0XFx0cmV0dXJuIDA7XFxuOTQ1MzpcXHR9XFxuOTQ1NDpcXHRcXG45NDU1OlxcdHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuOTQ1NjpcXHR7XFxuOTQ1NzpcXHRcXHRpZiAoIWlkbWFwLVxcdTAwM2VjbnQpXFxuOTQ1ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG45NDU5OlxcdFxcbjk0NjA6XFx0XFx0cmV0dXJuIGlkbWFwLVxcdTAwM2VtYXBbLS1pZG1hcC1cXHUwMDNlY250XS5vbGQ7XFxuOTQ2MTpcXHR9XFxuOTQ2MjpcXHRcXG45NDYzOlxcdC8qIFJlbGVhc2UgaWQgYW5kIG9iamVjdHMgZGVyaXZlZCBmcm9tIGl0IGl0ZXJhdGl2ZWx5IGluIGEgREZTIG1hbm5lciAqL1xcbjk0NjQ6XFx0c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuOTQ2NTpcXHR7XFxuOTQ2NjpcXHRcXHR1MzIgbWFzayA9ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX0RZTlBUUik7XFxuOTQ2NzpcXHRcXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXFx1MDAzZWN1cl9zdGF0ZTtcXG45NDY4OlxcdFxcdHN0cnVjdCBicGZfaWRtYXAgKmlkc3RhY2sgPSBcXHUwMDI2ZW52LVxcdTAwM2VpZG1hcF9zY3JhdGNoO1xcbjk0Njk6XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjE3LjgyNzYwMTU0N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTIyMjg5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlIGFuZCBhc3Nlc3MgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgS01TQU4uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbGVha2VkIHRvIHVzZXJzcGFjZSwgb3IgbGVhZGluZyB0byB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5GaXJzdCwgdGhlIGBicGZfaWRfcGFpcmAgc3RydWN0dXJlIHVwZGF0ZXMsIGluY2x1ZGluZyB0aGUgbmV3IGZpZWxkcyBgcGt0X3B0cl9kZWx0YWAgYW5kIGBwa3RfcHRyX2RlbHRhX3NldGAsIHNlZW0gc2FmZS4gVGhlIGluaXRpYWxpemF0aW9uIG9mIGBwa3RfcHRyX2RlbHRhX3NldGAgdG8gYGZhbHNlYCB3aXRoaW4gYGNoZWNrX2lkc2AgYW5kIHRoZSBzdWJzZXF1ZW50IHNldHRpbmcgb2YgYHBrdF9wdHJfZGVsdGFgIHdpdGhpbiBgY2hlY2tfcGt0X3B0cl9pZHNgIGVuc3VyZXMgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgc2V0cyB0aGVzZSBmaWVsZHMuIFRoZXJlJ3Mgbm8gc2NlbmFyaW8gd2hlcmUgdGhlc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgYGlkbWFwYCBpcyBwcm9wZXJseSBtYW5hZ2VkIHdpdGhpbiBgZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2hgLiBTbywgbm8gY29uY2VybnMgaGVyZSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbk5leHQsIHRoZSBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvY2ZnLmNgIHdpdGggdGhlIGBwdXNoX2luc24oKWAgbG9naWMsIHdoaWNoIGlzIGp1c3Qgc3RhbmRhcmQgbG9naWMgdmFsaWRhdGlvbiBvbiB0aGUgQlBGIENGRywgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MganVzdCBhIGNvbnRyb2wgZmxvdyB2ZXJpZmljYXRpb24uXG5cblRoZSBhZGRpdGlvbiBvZiBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCB3aXRoaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgIGFuZCBpdHMgdXNlIGluIGBicGZfcGF0Y2hfaW5zbl9kYXRhKClgIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zKClgIGlzIGFsbCBhYm91dCBoYW5kbGluZyBwb3RlbnRpYWwgc2lnbmFsIGludGVycnVwdGlvbnMuIFRoZSBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYXZvaWQgbG9uZyBzdGFsbHMgYW5kIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGdldHRpbmcgc3R1Y2suIFRoaXMgZG9lc24ndCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvcGVyYXRpb25zLCBlaXRoZXIuXG5cblRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aGljaCBpbnRyb2R1Y2UgZGlzdGluY3QgYGlkYCBhc3NpZ25tZW50cyBmb3IgY2FsbGJhY2sgbWFwIHBvaW50ZXJzIHdoZW4gc3BlY2lmaWMgY29uZGl0aW9ucyBhcmUgbWV0LCBhcmUgYWxsIGFib3V0IHN0YXRlIHRyYWNraW5nIHdpdGhpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBjcnVjaWFsIG1lY2hhbmlzbSB0byBwcmV2ZW50IHBvdGVudGlhbCBpbmNvcnJlY3QgdW5sb2NraW5nIG9mIHNwaW4gbG9ja3MuIFRoZSBjb25kaXRpb25zIHdoZXJlIGl0IHNldHMgdGhlc2UgSURzIGFyZSBjYXJlZnVsbHkgdmVyaWZpZWQuIFNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgZGlzdGluY3QgYGlkYCBiYXNlZCBvbiBgcmVnX21heV9wb2ludF90b19zcGluX2xvY2tgIGFuZCB0aGUgbWFwIHZhbHVlIG5vdCBiZWluZyBhIG9uZS1lbGVtZW50IGFycmF5LCBhbHNvIGFwcGVhcnMgc2FmZSBhbmQgZm9jdXNlZCBvbiB0cmFja2luZyB2ZXJpZmllciBzdGF0ZS5cblxuVGhlIGluY2x1c2lvbiBvZiB0aGUgc2VsZnRlc3RzIGNvdmVyaW5nIHRoZSBjaGFuZ2VzIGFuZCB0aGUgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBgYnBmX3Byb2dfbG9hZGAgaXMgaW1wb3J0YW50IGJ1dCBjb25maXJtcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGRlc2NyaWJlZCBsb2dpYy5cblxuRmluYWxseSwgdGhlIEtNU0FOIGNyaXRlcmlhLiBBZnRlciBjb25zaWRlcmluZyB0aGVzZSBjaGFuZ2VzOiBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXNlIHBhdGNoZXMgKipkbyBub3QqKiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIHNwZWNpZmljYWxseSB0YXJnZXQuIFRoZXJlJ3Mgbm8gcmlzayBvZiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsb2dpY2FsIHZhbGlkYXRpb24sIHZlcmlmaWVyIHN0YXRlIHRyYWNraW5nLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBCUEYgb3BlcmF0aW9ucywgbm90IHJhdyBtZW1vcnkgbWFuaXB1bGF0aW9uLiBUaGUgQlBGIHZlcmlmaWVyIGl0c2VsZiBlbmZvcmNlcyB0eXBlIHNhZmV0eSBhbmQgYm91bmRzIGNoZWNrcyBvbiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGEgdmVyeSByb2J1c3QgbWVjaGFuaXNtIGZvciBlbnN1cmluZyBvdmVyYWxsIG1lbW9yeSBzYWZldHkuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYW5kIHRlc3Rpbmcgd2lsbCBiZSBzdWZmaWNpZW50IGhlcmUuXG5cbkknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOOiBmYWxzZWAgaW4gdGhlIHNldC1yZXN1bHRzIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgxLCJPdXRwdXRUb2tlbnMiOjI5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjI0LjM0OTg5NDExNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIENGRyBhbmFseXNpcyBpbiBzZXZlcmFsIGFyZWFzOlxcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXFxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxcbjMuIEFkZHMgZmF0YWwgc2lnbmFsIGNoZWNrcyAoYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgKSB0byBwcmV2ZW50IG5vbi1raWxsYWJsZSBsb29wcyBkdXJpbmcgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcvcmVtb3ZhbCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuXFxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuIEFsbCBzdHJ1Y3QgZmllbGRzIGFkZGVkIChgcGt0X3B0cl9kZWx0YWAsIGBwa3RfcHRyX2RlbHRhX3NldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSByZWFkIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB2ZXJpZmllciBsb2dpYywgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGFuZCBzaWduYWwtaGFuZGxpbmcgaW1wcm92ZW1lbnRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIENGRyBhbmFseXNpcyBpbiBzZXZlcmFsIGFyZWFzOlxcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXFxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxcbjMuIEFkZHMgZmF0YWwgc2lnbmFsIGNoZWNrcyAoYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgKSB0byBwcmV2ZW50IG5vbi1raWxsYWJsZSBsb29wcyBkdXJpbmcgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcvcmVtb3ZhbCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuXFxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuIEFsbCBzdHJ1Y3QgZmllbGRzIGFkZGVkIChgcGt0X3B0cl9kZWx0YWAsIGBwa3RfcHRyX2RlbHRhX3NldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSByZWFkIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB2ZXJpZmllciBsb2dpYywgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGFuZCBzaWduYWwtaGFuZGxpbmcgaW1wcm92ZW1lbnRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 11:21:14 +0000 UTC FinishedAt: 2026-09-06 11:24:26 +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": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b75a000f2ac15f4778ddd6d9298d60b24ad776fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "17dd08c4-341a-490c-a2c5-54eed0993dd8" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check_cfg", "push_insn", "bpf_patch_insn_data", "verifier_remove_insns", "check_pkt_ptr_ids", "regsafe", "bpf_is_state_visited", "map_set_for_each_callback_args", "set_timer_callback_state", "set_task_work_schedule_callback_state" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrX2NmZyYjMzQ7LAogICAgJiMzNDtwdXNoX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXJpZmllcl9yZW1vdmVfaW5zbnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfcGt0X3B0cl9pZHMmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgQ0ZHIGFuYWx5c2lzIGluIHNldmVyYWwgYXJlYXM6XG4xLiBBZGRzIHBhY2tldCBwb2ludGVyIGRpc3BsYWNlbWVudCB0cmFja2luZyBhY3Jvc3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAodXNpbmcgYGNoZWNrX3BrdF9wdHJfaWRzYCBhbmQgaW5pdGlhbGl6aW5nIGBwa3RfcHRyX2RlbHRhX3NldGAgaW4gYGNoZWNrX2lkc2ApLlxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxuMy4gQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGApIHRvIHByZXZlbnQgbm9uLWtpbGxhYmxlIGxvb3BzIGR1cmluZyBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiBwYXRjaGluZy9yZW1vdmFsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cbjQuIEVuc3VyZXMgZGlzdGluY3QgcmVnaXN0ZXIgSURzIGZvciBjYWxsYmFjayBtYXAgdmFsdWVzIHRoYXQgbWF5IHBvaW50IHRvIHNwaW4gbG9ja3MgdW5sZXNzIHRoZSBtYXAgaGFzIHN0YXRpYyBpZGVudGl0eSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS4gQWxsIHN0cnVjdCBmaWVsZHMgYWRkZWQgKGBwa3RfcHRyX2RlbHRhYCwgYHBrdF9wdHJfZGVsdGFfc2V0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHZlcmlmaWVyIGxvZ2ljLCBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYW5kIHNpZ25hbC1oYW5kbGluZyBpbXByb3ZlbWVudHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBleGVjdXRpb24gcGF0aHMsIGluY2x1ZGluZyBjb250cm9sIGZsb3cgZ3JhcGggKENGRykgc3VicHJvZ3JhbSBib3VuZGFyeSBjaGVja3MsIHNpZ25hbC1hd2FyZSBpbnN0cnVjdGlvbiByZXdyaXRpbmcvcmVtb3ZhbCBwYXNzZXMsIHBhY2tldCBwb2ludGVyIHN0YXRlIGVxdWl2YWxlbmNlIGNvbXBhcmlzb24gKHJlZ3NhZmUpLCBhbmQgbG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgY2FsbGJhY2sgYXJndW1lbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCBkaXJlY3RseSBhZmZlY3QgdmVyaWZpY2F0aW9uIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW52YXJpYW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyZWMyYTM4ZTk4M2JhMDAyNDMxZmZiNWJiMTc3MDdjNzM2MGRjZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjIzOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuJiM0MztcdHMzMiBwa3RfcHRyX2RlbHRhO1xuJiM0MztcdGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX2lkbWFwIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggODQyYzdkMWVhYmNjYy4uZTNjOTA0MzI4ZWRlMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC0xMDIsNiAmIzQzOzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuIFx0aW50ICppbnNuX3N0YWNrID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YWNrO1xuIFx0aW50ICppbnNuX3N0YXRlID0gZW52LVx1MDAzZWNmZy5pbnNuX3N0YXRlO1xuIFxuQEAgLTEyMSw2ICYjNDM7MTIyLDI2IEBAIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYVxuJiM0MztcdCAqIHN1YnByb2dyYW0gYm91bmRhcnksIGJ1dCBydW5zIGJlZm9yZSBDTy1SRSByZWxvY2F0aW9ucyBjYW4gcmV3cml0ZSBhblxuJiM0MztcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbiYjNDM7XHQgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbiYjNDM7XHRcdHN1YnByb2cgPSBicGZfZmluZF9jb250YWluaW5nX3N1YnByb2coZW52LCB0KTtcbiYjNDM7XHRcdGlmICh3IFx1MDAzYyBzdWJwcm9nLVx1MDAzZXN0YXJ0IHx8IHcgXHUwMDNlPSAoc3VicHJvZyAmIzQzOyAxKS1cdTAwM2VzdGFydCkge1xuJiM0MztcdFx0XHR2ZXJib3NlX2xpbmZvKGVudiwgdCwgXCYjMzQ7JWQ6IFwmIzM0OywgdCk7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmYWxsLXRocm91Z2ggb3V0IG9mIHN1YnByb2cgZnJvbSBpbnNuICVkIHRvICVkXFxuXCYjMzQ7LCB0LCB3KTtcbiYjNDM7XHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4mIzQzO1x0XHRcdFx0ZW52LCB0LCBcJiMzNDtmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDtJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHQsIHcpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZGlzYXNtLmhcJiMzNDtcbiBcbkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cbiYjNDM7ICogTyhwcm9nLVx1MDAzZWxlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlc1xuJiM0MzsgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuJiM0MztcdGlmIChicGZfcmV3cml0ZV9tdXN0X2Fib3J0KCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gJiM0MzsgbGVuIC0gMSxcbkBAIC01MjMsNiAmIzQzOzU0MCw5IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuIFx0aWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgpKVxuIFx0XHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcbiBcbkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgJiM0MzszMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRpZiAoaWRtYXAtXHUwMDNlY250IFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcbiBcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5jdXIgPSBjdXJfaWQ7XG4mIzQzO1x0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO1xuIFx0XHRpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuJiM0MztcdHM2NCBkZWx0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja19pZHMob2xkLVx1MDAzZWlkLCBjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoIW9sZC1cdTAwM2VpZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXG4mIzQzO1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbiYjNDM7XHQgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhXG4mIzQzO1x0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZWx0YSA9IChzNjQpKGN1ci1cdTAwM2VyNjQuYmFzZSAtIG9sZC1cdTAwM2VyNjQuYmFzZSk7XG4mIzQzO1x0aWYgKGRlbHRhIFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFx1MDAzZSBTMzJfTUFYKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZG1hcC1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobWFwW2ldLm9sZCAhPSBvbGQtXHUwMDNlaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTtcbiYjNDM7XHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDb21wYXJlIHNjYWxhciByZWdpc3RlciBJRHMgZm9yIHN0YXRlIGVxdWl2YWxlbmNlLlxuICAqXG5AQCAtNjMyLDggJiM0Mzs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbiYjNDM7XHRcdC8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovXG4mIzQzO1x0XHRpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdC8qIG5ldyB2YWwgbXVzdCBzYXRpc2Z5IG9sZCB2YWwga25vd2xlZGdlICovXG4gXHRcdHJldHVybiByYW5nZV93aXRoaW4ocm9sZCwgcmN1cikgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAxYzMwMzlmM2ZjMzIzLi5iMDg1MDE3MzRkZGZhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC00NDcsNiAmIzQzOzQ0NywxMSBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIHR5cGVfaXNfcmRvbmx5X21lbSh1MzIgdHlwZSlcbiB7XG4gXHRyZXR1cm4gdHlwZSBcdTAwMjYgTUVNX1JET05MWTtcbkBAIC0xMDAzNSw2ICYjNDM7MTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRfX21hcmtfcmVnX2tub3duX3plcm8oXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyKSlcbiYjNDM7XHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHBvaW50ZXIgdG8gc3RhY2sgb3IgbnVsbCAqL1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSA9IGNhbGxlci1cdTAwM2VyZWdzW0JQRl9SRUdfM107XG5AQCAtMTAxMzEsNiAmIzQzOzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdF9fbWFya19yZWdfa25vd25femVybyhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xuJiM0MztcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4mIzQzO1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuQEAgLTEwMjQ5LDYgJiM0MzsxMDI2MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4mIzQzO1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyKSlcbiYjNDM7XHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LVx1MDAzZWlkX2dlbjtcbiBcbiBcdC8qIHVudXNlZCAqL1xuIFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR180XSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmNcbmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5AQCAtMTQsNiAmIzQzOzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuJiM0MztzdGF0aWMgaW50IGxvYWRfY29yZV9yZWxvX3N1YnByb2coaW50IGJ0Zl9mZCwgaW50IG1haW5faWQsIGludCBzdWJfaWQsXG4mIzQzO1x0XHRcdFx0ICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4mIzQzO1x0XHRCUEZfQ0FMTF9SRUwoMiksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xuJiM0MztcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbiYjNDM7XHRcdHsgLmluc25fb2ZmID0gMywgLnR5cGVfaWQgPSBzdWJfaWQgfSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4mIzQzO1x0XHQuaW5zbl9vZmYgPSAyICogc2l6ZW9mKHN0cnVjdCBicGZfaW5zbiksXG4mIzQzO1x0XHQudHlwZV9pZCA9IGVudW1faWQsXG4mIzQzO1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbiYjNDM7XHRcdC5raW5kID0gQlBGX0NPUkVfRU5VTVZBTF9WQUxVRSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxuJiM0MztcdFx0Lmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksXG4mIzQzO1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4mIzQzO1x0XHQubGljZW5zZSA9IChfX3U2NClcJiMzNDtHUExcJiMzNDssXG4mIzQzO1x0XHQubG9nX2J1ZiA9IChfX3U2NClsb2csXG4mIzQzO1x0XHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcbiYjNDM7XHRcdC5sb2dfbGV2ZWwgPSAxLFxuJiM0MztcdFx0LnByb2dfYnRmX2ZkID0gYnRmX2ZkLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXG4mIzQzO1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuJiM0MztcdFx0LmZ1bmNfaW5mb19jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAocmVsb2NhdGUpIHtcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX2NudCA9IDE7XG4mIzQzO1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbiYjNDM7XHRcdGF0dHIuY29yZV9yZWxvX3JlY19zaXplID0gc2l6ZW9mKHJlbG8pO1xuJiM0MztcdH1cbiYjNDM7XHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4mIzQzO1x0cmV0dXJuIHN5c19icGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHNpemVvZihhdHRyKSwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB2b2lkICpyYXdfYnRmO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZiA9IE5VTEw7XG4mIzQzO1x0X191MzIgcmF3X2J0Zl9zaXplO1xuJiM0MztcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4mIzQzO1x0aW50IGludF9pZCwgbWFpbl9pZCwgcHJvZ19mZCA9IC0xLCBwcm90b19pZCwgc3ViX2lkO1xuJiM0MztcbiYjNDM7XHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFwmIzM0O2J0Zl9uZXdfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGludF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwmIzM0O2ludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgXCYjMzQ7YWRkX2ludFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgXCYjMzQ7YWRkX2Z1bmNfcHJvdG9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdG1haW5faWQgPSBidGZfX2FkZF9mdW5jKGJ0ZiwgXCYjMzQ7bWFpbl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QobWFpbl9pZCwgMCwgXCYjMzQ7YWRkX21haW5fZnVuY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwmIzM0O3N1Yl9mblwmIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcJiMzNDthZGRfc3ViX2Z1bmNcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGVudW1faWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgXCYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcJiMzNDssIDQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsIFwmIzM0O2FkZF9lbnVtXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX09LKGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcJiMzNDt2YWx1ZVwmIzM0OywgMCksIFwmIzM0O2FkZF9lbnVtX3ZhbHVlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFwmIzM0OzBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcJiMzNDthZGRfYWNjZXNzX3N0clwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIocmF3X2J0ZiwgXCYjMzQ7cmF3X2J0ZlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcJiMzNDtidGZfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocHJvZ19mZCwgMCwgXCYjMzQ7Y29udHJvbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRwcm9nX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdFxuJiM0MztcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuJiM0MztcdCAqL1xuJiM0MztcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuJiM0MztcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcJiMzNDtwb2lzb25lZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihsb2csIFwmIzM0O2ZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O3BvaXNvbmVkX2xvYWRfbG9nXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9STUFMIFx1MDAyNlx1MDAyNiBsb2dbMF0pIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslc1wmIzM0OywgbG9nKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDstLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UocHJvZ19mZCk7XG4mIzQzO1x0Y2xvc2UoYnRmX2ZkKTtcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXG4gICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLlxuICAqL1xuQEAgLTEyMCw2ICYjNDM7MjMxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9iYWRfbG9jYWxfaWQodm9pZClcbiBcbiB2b2lkIHRlc3RfY29yZV9yZWxvY19yYXcodm9pZClcbiB7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtiYWRfbG9jYWxfaWRcJiMzNDspKVxuIFx0XHR0ZXN0X2JhZF9sb2NhbF9pZCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wZjc4ZGIzYmNjYzc2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmNcbkBAIC0wLDAgJiM0MzsxLDEzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBOT1BfQ05UXHRcdDMyNzY4XG4mIzQzOyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcdCgxMDBVTEwgKiAxMDAwICogMTAwMClcbiYjNDM7I2RlZmluZSBSRUFQX1RJTUVPVVRfTlNcdFx0KDEwMDBVTEwgKiAxMDAwICogMTAwMClcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyB0cztcbiYjNDM7XG4mIzQzO1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzKTtcbiYjNDM7XHRyZXR1cm4gdHMudHZfc2VjICogMTAwMDAwMDAwMFVMTCAmIzQzOyB0cy50dl9uc2VjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyB0cyA9IHtcbiYjNDM7XHRcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXG4mIzQzO1x0XHQudHZfbnNlYyA9IGR1cmF0aW9uICUgMTAwMDAwMDAwMFVMTCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobmFub3NsZWVwKFx1MDAyNnRzLCBcdTAwMjZ0cykgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdhaXRwaWRfdGltZW91dChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBfX3U2NCB0aW1lb3V0KVxuJiM0Mzt7XG4mIzQzO1x0X191NjQgZGVhZGxpbmUgPSBtb25vdG9uaWNfbnMoKSAmIzQzOyB0aW1lb3V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHdhaXRwaWQocGlkLCBzdGF0dXMsIFdOT0hBTkcpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9IHdoaWxlIChtb25vdG9uaWNfbnMoKSBcdTAwM2MgZGVhZGxpbmUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBOVUxMO1xuJiM0MztcdF9fdTY0IHN0YXJ0LCBjb250cm9sX3RpbWUsIGtpbGxfZGVsYXk7XG4mIzQzO1x0aW50IHBpcGVmZFsyXSA9IHsgLTEsIC0xIH07XG4mIzQzO1x0aW50IHByb2dfZmQgPSAtMSwgc3RhdHVzID0gMDtcbiYjNDM7XHRwaWRfdCBwaWQgPSAtMTtcbiYjNDM7XHRjaGFyIGJ5dGU7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0aW5zbnMgPSBjYWxsb2MoTk9QX0NOVCAmIzQzOyAyLCBzaXplb2YoKmluc25zKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluc25zLCBcJiMzNDtjYWxsb2NcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOT1BfQ05UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGluc25zW2ldID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfMSk7XG4mIzQzO1x0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0aW5zbnNbTk9QX0NOVCAmIzQzOyAxXSA9IEJQRl9FWElUX0lOU04oKTtcbiYjNDM7XG4mIzQzO1x0c3RhcnQgPSBtb25vdG9uaWNfbnMoKTtcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsIFwmIzM0O0dQTFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRpbnNucywgTk9QX0NOVCAmIzQzOyAyLCBOVUxMKTtcbiYjNDM7XHRjb250cm9sX3RpbWUgPSBtb25vdG9uaWNfbnMoKSAtIHN0YXJ0O1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwmIzM0O2NvbnRyb2xfcHJvZ19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRwcm9nX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5PUF9DTlQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aW5zbnNbaV0gPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVmZCksIFwmIzM0O3BpcGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIXBpZCkge1xuJiM0MztcdFx0Y2xvc2UocGlwZWZkWzBdKTtcbiYjNDM7XHRcdGlmICh3cml0ZShwaXBlZmRbMV0sIFwmIzM0O3hcJiMzNDssIDEpICE9IDEpXG4mIzQzO1x0XHRcdF9leGl0KDEpO1xuJiM0MztcdFx0Y2xvc2UocGlwZWZkWzFdKTtcbiYjNDM7XHRcdHByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgXCYjMzQ7R1BMXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0aW5zbnMsIE5PUF9DTlQgJiM0MzsgMiwgTlVMTCk7XG4mIzQzO1x0XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdGNsb3NlKHByb2dfZmQpO1xuJiM0MztcdFx0X2V4aXQocHJvZ19mZCBcdTAwM2MgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwaXBlZmRbMV0pO1xuJiM0MztcdHBpcGVmZFsxXSA9IC0xO1xuJiM0MztcdHJldCA9IHJlYWQocGlwZWZkWzBdLCBcdTAwMjZieXRlLCAxKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIDEsIFwmIzM0O2NoaWxkX3JlYWR5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGxvdyBsaW5lYXIgdmVyaWZpY2F0aW9uIHRvIGZpbmlzaCBiZWZvcmUgc2VuZGluZyBTSUdLSUxMLiBUaGUgbm9wXG4mIzQzO1x0ICogcmVtb3ZhbCBwYXNzIGlzIHF1YWRyYXRpYywgc28gZm91ciBjb250cm9sLWxvYWQgdGltZXMgc3RpbGwgbGVhdmVzIGFcbiYjNDM7XHQgKiB3aWRlIHdpbmRvdyBpbiB3aGljaCBhbiBhZmZlY3RlZCBrZXJuZWwgaXMgcmV3cml0aW5nIGluc3RydWN0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRraWxsX2RlbGF5ID0gTUFYKGNvbnRyb2xfdGltZSAqIDQsIE1JTl9LSUxMX0RFTEFZX05TKTtcbiYjNDM7XHRzbGVlcF9ucyhraWxsX2RlbGF5KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhraWxsKHBpZCwgU0lHS0lMTCksIFwmIzM0O2tpbGxcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRzdGFydCA9IG1vbm90b25pY19ucygpO1xuJiM0MztcdHJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsIFx1MDAyNnN0YXR1cywgUkVBUF9USU1FT1VUX05TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgXCYjMzQ7cHJvZ19sb2FkX2tpbGxhYmxlXCYjMzQ7KSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2NvbnRyb2wgbG9hZCAlbGx1IHVzLCBjaGlsZCBzdGlsbCBhbGl2ZSAlbGx1IHVzIGFmdGVyIFNJR0tJTExcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XHRwaWQgPSAtMTtcbiYjNDM7XHRBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXVEVSTVNJRyhzdGF0dXMpID09IFNJR0tJTEwsXG4mIzQzO1x0XHQgICAgXCYjMzQ7a2lsbGVkX2J5X3NpZ2tpbGxcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShwcm9nX2ZkKTtcbiYjNDM7XHRpZiAocGlwZWZkWzBdIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHBpcGVmZFswXSk7XG4mIzQzO1x0aWYgKHBpcGVmZFsxXSBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShwaXBlZmRbMV0pO1xuJiM0MztcdGlmIChwaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbiYjNDM7XHRcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuJiM0MztcdH1cbiYjNDM7XHRmcmVlKGluc25zKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgJiM0MzsyNSw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3Muc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZy5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9jZmcuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCYjMzQ7XG5AQCAtMTg4LDYgJiM0MzsxODksNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfYnN3YXAodm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnN3YXApOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSk7IH1cbiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCAmIzQzOzEsNzMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGJwZl9tYXA7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbG9ja192YWx1ZSB7XG4mIzQzO1x0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpO1xuJiM0Mzt9IGxvY2tfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBsb2NrX2RpZmZlcmVudF92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNldmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4mIzQzO1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsIFx1MDAyNmN0eCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7Y2FsbGJhY2sgbWFwIHZhbHVlIGhhcyBhIGRpc3RpbmN0IGxvY2sgaWRlbnRpdHlcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDticGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcJiMzNDspXG4mIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4mIzQzO1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNnZhbHVlLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBuZXN0X2xvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBsb2NrX3NhbWVfdmFsdWUsIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O25lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5X3NhbWUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG5pbmRleCAwYjg2ZDk1YTQxMzM1Li42OTJhODQ2OGYzZDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcbkBAIC01LDYgJiM0Mzs1LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4gXG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7WERQIHBrdCByZWdzYWZlIHByZXNlcnZlcyBwYWNrZXQgcG9pbnRlciBjbGFzcyBkaXNwbGFjZW1lbnRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcJiMzNDspXG4mIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKVxuJiM0MztfX25ha2VkIHZvaWQgcGt0X3JlZ3NhZmVfY2xhc3NfZGlzcGxhY2VtZW50KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1xcXG4mIzQzO1x0cjggPSAqKHUzMiAqKShyMSAmIzQzOyAlW3hkcF9tZF9kYXRhX2VuZF0pO1xcXG4mIzQzO1x0cjkgPSAqKHUzMiAqKShyMSAmIzQzOyAlW3hkcF9tZF9kYXRhXSk7XFxcbiYjNDM7XHRyNiA9IHI5O1xcXG4mIzQzO1x0cjYgJiM0Mzs9IDg7XFxcbiYjNDM7XHRpZiByNiBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbiYjNDM7XHRyMCA9ICoodTY0ICopKHI5ICYjNDM7IDApO1xcXG4mIzQzO1x0cjQgPSByMDtcXFxuJiM0MztcdHI0IFx1MDAyNj0gMTU7XFxcbiYjNDM7XHRyNyA9IHIwO1xcXG4mIzQzO1x0cjcgXHUwMDNlXHUwMDNlPSA2MztcXFxuJiM0MztcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxuJiM0MztcdHIyID0gcjk7XFxcbiYjNDM7XHRyMiAmIzQzOz0gcjQ7XFxcbiYjNDM7XHRyMyA9IHIyO1xcXG4mIzQzO1x0cjMgJiM0Mzs9IDQ7XFxcbiYjNDM7XHRnb3RvIGxfam9pbl8lPTtcXFxuJiM0MztsX3BhdGhfYl8lPTogXFxcbiYjNDM7XHRyNCBcdTAwMjY9IDM7XFxcbiYjNDM7XHRyNCAmIzQzOz0gODtcXFxuJiM0MztcdHIyID0gcjk7XFxcbiYjNDM7XHRyMiAmIzQzOz0gcjQ7XFxcbiYjNDM7XHRyMyA9IHIyO1xcXG4mIzQzO1x0cjMgLT0gNDtcXFxuJiM0MztsX2pvaW5fJT06IFxcXG4mIzQzO1x0cjUgPSByMztcXFxuJiM0MztcdHI1ICYjNDM7PSA0O1xcXG4mIzQzO1x0aWYgcjUgXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXG4mIzQzO1x0cjAgPSAqKHU2NCAqKShyMiAmIzQzOyAwKTtcXFxuJiM0MztsX2V4aXRfJT06IFxcXG4mIzQzO1x0cjAgPSAwO1xcXG4mIzQzO1x0ZXhpdDtcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksXG4mIzQzO1x0ICBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YV9lbmQsIG9mZnNldG9mKHN0cnVjdCB4ZHBfbWQsIGRhdGFfZW5kKSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDt4ZHBcJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDtYRFAgcGt0IHJlYWQsIHBrdF9lbmQgbWFuZ2xpbmcsIGJhZCBhY2Nlc3MgMVwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjMgcG9pbnRlciBhcml0aG1ldGljIG9uIHBrdF9lbmRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2tfY2ZnJiMzNDssCiAgICAmIzM0O3B1c2hfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDtjaGVja19wa3RfcHRyX2lkcyYjMzQ7LAogICAgJiMzNDtyZWdzYWZlJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgICAmIzM0O21hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyYjMzQ7LAogICAgJiMzNDtzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7c2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGV4ZWN1dGlvbiBwYXRocywgaW5jbHVkaW5nIGNvbnRyb2wgZmxvdyBncmFwaCAoQ0ZHKSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGNoZWNrcywgc2lnbmFsLWF3YXJlIGluc3RydWN0aW9uIHJld3JpdGluZy9yZW1vdmFsIHBhc3NlcywgcGFja2V0IHBvaW50ZXIgc3RhdGUgZXF1aXZhbGVuY2UgY29tcGFyaXNvbiAocmVnc2FmZSksIGFuZCBsb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBjYWxsYmFjayBhcmd1bWVudHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIGRpcmVjdGx5IGFmZmVjdCB2ZXJpZmljYXRpb24gY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbnZhcmlhbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDQ3LDYgJiM0Mzs0NDcsMTEgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKIAlyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQocmVnX2J0Zl9yZWNvcmQocmVnKSwgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xMDAzNSw2ICYjNDM7MTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi8KIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzNdOwpAQCAtMTAxMzEsNiAmIzQzOzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMTAyNDksNiAmIzQzOzEwMjYwLDkgQEAgc3RhdGljIGludCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBtYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiB1bnVzZWQgKi8KIAlicGZfbWFya19yZWdfbm90X2luaXQoZW52LCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfbG9hZF9zaWduYWwuYwpAQCAtMCwwICYjNDM7MSwxMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTk9QX0NOVAkJMzI3NjgKJiM0MzsjZGVmaW5lIE1JTl9LSUxMX0RFTEFZX05TCSgxMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsjZGVmaW5lIFJFQVBfVElNRU9VVF9OUwkJKDEwMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsKJiM0MztzdGF0aWMgX191NjQgbW9ub3RvbmljX25zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiYjNDM7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3RzKTsKJiM0MzsJcmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgJiM0MzsgdHMudHZfbnNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2xlZXBfbnMoX191NjQgZHVyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7CiYjNDM7CQkudHZfc2VjID0gZHVyYXRpb24gLyAxMDAwMDAwMDAwVUxMLAomIzQzOwkJLnR2X25zZWMgPSBkdXJhdGlvbiAlIDEwMDAwMDAwMDBVTEwsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXdoaWxlIChuYW5vc2xlZXAoJmFtcDt0cywgJmFtcDt0cykgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUikKJiM0MzsJCTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dCkKJiM0Mzt7CiYjNDM7CV9fdTY0IGRlYWRsaW5lID0gbW9ub3RvbmljX25zKCkgJiM0MzsgdGltZW91dDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd2FpdHBpZChwaWQsIHN0YXR1cywgV05PSEFORyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0gd2hpbGUgKG1vbm90b25pY19ucygpICZsdDsgZGVhZGxpbmUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBOVUxMOwomIzQzOwlfX3U2NCBzdGFydCwgY29udHJvbF90aW1lLCBraWxsX2RlbGF5OwomIzQzOwlpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTsKJiM0MzsJaW50IHByb2dfZmQgPSAtMSwgc3RhdHVzID0gMDsKJiM0MzsJcGlkX3QgcGlkID0gLTE7CiYjNDM7CWNoYXIgYnl0ZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJaW5zbnMgPSBjYWxsb2MoTk9QX0NOVCAmIzQzOyAyLCBzaXplb2YoKmluc25zKSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihpbnNucywgJiMzNDtjYWxsb2MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOT1BfQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluc25zW2ldID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfMSk7CiYjNDM7CWluc25zW05PUF9DTlRdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwlpbnNuc1tOT1BfQ05UICYjNDM7IDFdID0gQlBGX0VYSVRfSU5TTigpOwomIzQzOwomIzQzOwlzdGFydCA9IG1vbm90b25pY19ucygpOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsICYjMzQ7R1BMJiMzNDssCiYjNDM7CQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwljb250cm9sX3RpbWUgPSBtb25vdG9uaWNfbnMoKSAtIHN0YXJ0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfcHJvZ19sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJcHJvZ19mZCA9IC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTk9QX0NOVDsgaSYjNDM7JiM0MzspCiYjNDM7CQlpbnNuc1tpXSA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMCk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHBpcGUocGlwZWZkKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIXBpZCkgewomIzQzOwkJY2xvc2UocGlwZWZkWzBdKTsKJiM0MzsJCWlmICh3cml0ZShwaXBlZmRbMV0sICYjMzQ7eCYjMzQ7LCAxKSAhPSAxKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJY2xvc2UocGlwZWZkWzFdKTsKJiM0MzsJCXByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgJiMzNDtHUEwmIzM0OywKJiM0MzsJCQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwkJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShwcm9nX2ZkKTsKJiM0MzsJCV9leGl0KHByb2dfZmQgJmx0OyAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlwaXBlZmRbMV0gPSAtMTsKJiM0MzsJcmV0ID0gcmVhZChwaXBlZmRbMF0sICZhbXA7Ynl0ZSwgMSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgMSwgJiMzNDtjaGlsZF9yZWFkeSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcAomIzQzOwkgKiByZW1vdmFsIHBhc3MgaXMgcXVhZHJhdGljLCBzbyBmb3VyIGNvbnRyb2wtbG9hZCB0aW1lcyBzdGlsbCBsZWF2ZXMgYQomIzQzOwkgKiB3aWRlIHdpbmRvdyBpbiB3aGljaCBhbiBhZmZlY3RlZCBrZXJuZWwgaXMgcmV3cml0aW5nIGluc3RydWN0aW9ucy4KJiM0MzsJICovCiYjNDM7CWtpbGxfZGVsYXkgPSBNQVgoY29udHJvbF90aW1lICogNCwgTUlOX0tJTExfREVMQVlfTlMpOwomIzQzOwlzbGVlcF9ucyhraWxsX2RlbGF5KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCAmIzM0O2tpbGwmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXN0YXJ0ID0gbW9ub3RvbmljX25zKCk7CiYjNDM7CXJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsICZhbXA7c3RhdHVzLCBSRUFQX1RJTUVPVVRfTlMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgJiMzNDtwcm9nX2xvYWRfa2lsbGFibGUmIzM0OykpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2NvbnRyb2wgbG9hZCAlbGx1IHVzLCBjaGlsZCBzdGlsbCBhbGl2ZSAlbGx1IHVzIGFmdGVyIFNJR0tJTExcbiYjMzQ7LAomIzQzOwkJCWNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CXBpZCA9IC0xOwomIzQzOwlBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpICZhbXA7JmFtcDsgV1RFUk1TSUcoc3RhdHVzKSA9PSBTSUdLSUxMLAomIzQzOwkJICAgICYjMzQ7a2lsbGVkX2J5X3NpZ2tpbGwmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHByb2dfZmQpOwomIzQzOwlpZiAocGlwZWZkWzBdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMF0pOwomIzQzOwlpZiAocGlwZWZkWzFdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0MzsJfQomIzQzOwlmcmVlKGluc25zKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlMDlkZDY2ZjQ2NzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDczIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9tYXA7CiYjNDM7CiYjNDM7c3RydWN0IGxvY2tfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyB3YXJyYW50cyBhIHN5emthbGxlciBmdXp6aW5nIGNhbXBhaWduIGZvciB0aGUgYW1kNjQgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgdG8gYGJwZl9pZF9wYWlyYCBpbiBgYnBmX3ZlcmlmaWVyLmhgIGFuZCBtb2RpZmljYXRpb25zIGFjcm9zcyBzZXZlcmFsIGNvcmUgQlBGIGZpbGVzOiBgY2ZnLmNgLCBgZml4dXBzLmNgLCBgc3RhdGVzLmNgLCBhbmQgYHZlcmlmaWVyLmNgLgoKVGhlIGFkZGl0aW9ucyBvZiBgczMyIHBrdF9wdHJfZGVsdGE7IGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7YCBpbiBgYnBmX2lkX3BhaXJgIHNlZW0gbGlrZSBhIHBvdGVudGlhbCBwb2ludGVyLXJlbGF0ZWQgY2hhbmdlLCB3aGljaCBhbHdheXMgcmFpc2VzIGEgZmxhZy4gVGhlbiwgbW9kaWZpY2F0aW9ucyB0byBgcHVzaF9pbnNuKClgIGluIGBjZmcuY2Agd2l0aCBmYWxsdGhyb3VnaCBjaGVja3MgbG9vayBpbnRlcmVzdGluZy4gYGZpeHVwcy5jYCBub3cgaW5jbHVkZXMgYSBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCBmdW5jdGlvbiB3aXRoIGNoZWNrcyBmb3IgYGZhdGFsX3NpZ25hbF9wZW5kaW5nYCBhbmQgYGNvbmRfcmVzY2hlZCgpYCwgaW5kaWNhdGluZyBwb3RlbnRpYWwgaW50ZXJydXB0aW9uIG1lY2hhbmlzbXMuIGBzdGF0ZXMuY2AgaW50cm9kdWNlcyBgY2hlY2tfcGt0X3B0cl9pZHMoKWAsIHNvIHdlJiMzOTtyZSBzZWVpbmcgbW9yZSBwb2ludGVyIGhhbmRsaW5nLiBGaW5hbGx5LCBgdmVyaWZpZXIuY2AgaW5jbHVkZXMgYSBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoKWAgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBpbmNsdWRpbmcgc2V0dGluZyByZWdpc3RlciBpZHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBtb2RpZnkgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIGNvcmUgYW5kIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuIENoYW5nZXMgdG8gdGhlIHZlcmlmaWVyIGFyZSBhbHdheXMgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlIEJQRiB2ZXJpZmllciBpcyBub3RvcmlvdXMgZm9yIGhhdmluZyBzdWJ0bGUgZmxhd3MsIGFuZCB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gdG91Y2ggb24gY3JpdGljYWwgYXJlYXMuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkLCB0aGUgc3Vic3lzdGVtIGlzIGltcG9ydGFudCwgYW5kIHBvaW50ZXIvc3RhdGUvY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMgYXJlIHN0cm9uZyBpbmRpY2F0b3JzLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBtYXliZSBzb21lIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlc2UgbmV3IGNoYW5nZXMuIEnigJlsbCB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciB0aGUga2VybmVsL2JwZiBmaWxlcyB0byBnZXQgdGhhdCBpbmZvcm1hdGlvbi4gSSYjMzk7bSByZWFkeSB0byBjcmFmdCBzb21lIGdvb2Qgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfQlBGX1NZU0NBTExcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGX1NZU0NBTEwgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgLiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBub3cuIE15IGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgcHJlLXJlcXVpc2l0ZXMgdGhhdCB3b3VsZCBhZmZlY3QgdGhlIGF2YWlsYWJpbGl0eSBvZiBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIG90aGVyIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBwb3RlbnRpYWxseSBrZXJuZWwgaGFyZGVuaW5nIG9wdGlvbnMsIG9yIGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHdoZXRoZXIgYEJQRl9TWVNDQUxMYCBpcyBldmVuICpwcmVzZW50KiBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhpZXJhcmNoeSBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIGl0LiBUaGUgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvbnNpc3RlbnQgZm9yIG15IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY29uZmlnIEJQRl9TWVNDQUxMYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY29uZmlnIEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBpcyBhY3R1YWxseSBzZXQuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLCBsaWtlbHkgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUgb3IgZmVhdHVyZSBkaXJlY3Rvcmllcy4gSeKAmWxsIHByb2JhYmx5IG5lZWQgdG8gdXNlIGBmaW5kYCBjb21iaW5lZCB3aXRoIGBncmVwYCAob3IgcG9zc2libHkgYGFja2Agb3IgYHJpcGdyZXBgIGZvciBzcGVlZCkgdG8gbG9jYXRlIGl0IGVmZmljaWVudGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIHN5bWJvbCBpcyBlaXRoZXIgZXhwbGljaXRseSBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgd2l0aGluIGRlcGVuZGVuY3kgZXhwcmVzc2lvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgaW5zaWdodCBpbnRvIHRoZSBmdW5jdGlvbmFsaXR5IGd1YXJkZWQgYnkgdGhhdCBjb25maWcsIGFuZCBob3cgdG8gZW5hYmxlL2Rpc2FibGUgaXQuIEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBzdWJ0bGV0eSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIEJQRiBLY29uZmlnIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbiwgSSBuZWVkIHRvIGdyb3VuZCBteXNlbGYgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMaW5lIDI1IG9mIGBrZXJuZWwvYnBmL0tjb25maWdgIHNwZWNpZmljYWxseS4uLiB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBrZXkgZGVwZW5kZW5jaWVzIGZvciB0aGUgQlBGIHN1YnN5c3RlbSBhcmUgZGVjbGFyZWQuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIEJQRiBmZWF0dXJlcyBhcmUgZ2F0ZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdOKAmXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGJhc2UgcmVxdWlyZW1lbnRzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBzZWN1cml0eSBtb2RlbHMsIENQVSBhcmNoaXRlY3R1cmUgZmVhdHVyZXMgb3Igb3RoZXIgc3Vic3lzdGVtcyBhcmUgY2xlYXJseSBzcGVjaWZpZWQuIEkgY2FuIGNoZWNrIHRoaXMgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzIGJlZm9yZSBnb2luZyBmdXJ0aGVyLiBUaGlzJiMzOTtsbCBoZWxwIG1lIGF2b2lkIHdhc3RpbmcgdGltZSBsYXRlciBvbiBieSBjaGFzaW5nIGRvd24gcmVkIGhlcnJpbmdzIHJlbGF0ZWQgdG8gdW5tZXQgcHJlcmVxdWlzaXRlcy4gTGV04oCZcyBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZmlsZSBhbmQgc3ltYm9sIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSB0d28ga2V5IGFyZWFzOgoKRmlyc3QsIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCwgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgLiBBIG5ldyBmaWVsZCwgYHBrdF9wdHJfZGVsdGFgLCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciwgYW5kIGEgYm9vbGVhbiBmbGFnIGBwa3RfcHRyX2RlbHRhX3NldGAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb2ludGVyIGRlbHRhIGNhbGN1bGF0aW9ucyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LCBwcm9iYWJseSByZWxhdGVkIHRvIHBhY2tldCBkYXRhIG1hbmlwdWxhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpbXBhY3RzIGhvdyB3ZSB0cmFjayBhbmQgbWFuYWdlIG9mZnNldHMgd2l0aGluIHRoZSBwYWNrZXQgYnVmZmVyLiBUaGUgYWRkaXRpb24gb2YgYSBib29sZWFuIGZsYWcgc3VnZ2VzdHMgY29uZGl0aW9uYWwgdXNhZ2UsIGltcGx5aW5nIHRoaXMgZGVsdGEgaXNuJiMzOTt0IGFsd2F5cyByZWxldmFudC4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmVyaWZpZXIuCgpUaGVuLCBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2NmZy5jYCwgdGhlIGBwdXNoX2luc25gIGZ1bmN0aW9uIGhhcyBiZWVuIGNoYW5nZWQuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBib3VuZGFyeSBjaGVjayByZWxhdGVkIHRvIGZhbGx0aHJvdWdoIChgZSA9PSBGQUxMVEhST1VHSGApLiBUaGF0IGNhdGNoZXMgbXkgZXllLiBXZSYjMzk7cmUgZXhwbGljaXRseSBndWFyZGluZyBhZ2FpbnN0IHNvbWV0aGluZyB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmYWxsdGhyb3VnaCBzY2VuYXJpbywgd2hpY2ggaXMgdXN1YWxseSBhIGNyaXRpY2FsIHBhdGggZm9yIGNvbnRyb2wgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoZWNrIHByZXZlbnRzLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYHB1c2hfaW5zbmAuIEkmIzM5O2xsIGhhdmUgdG8gcXVpY2tseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBga2VybmVsL2JwZi9jZmcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBjaGVjayB3aWxsIGFmZmVjdCB0aGUgb3ZlcmFsbCBCUEYgdmVyaWZpZXIgYmVoYXZpb3IuIEkgc3VzcGVjdCBpdCYjMzk7cyBwcmV2ZW50aW5nIHNvbWUga2luZCBvZiBwb3RlbnRpYWxseSBpbnZhbGlkIHN0YXRlIGR1cmluZyBpbnN0cnVjdGlvbiBwdXNoIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udHJvbCBmbG93IGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXNoX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2ZnLmM9OTM9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9jZmcuYy0xMDItICovXG5rZXJuZWwvYnBmL2NmZy5jOjEwMzpzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy0xMDQte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmM9MTgyPXN0YXRpYyBpbnQgdmlzaXRfZnVuY19jYWxsX2luc24oaW50IHQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbnMsXG4tLVxua2VybmVsL2JwZi9jZmcuYy0xODktXHRpbnNuX3N6ID0gYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbdF0pID8gMiA6IDE7XG5rZXJuZWwvYnBmL2NmZy5jOjE5MDpcdHJldCA9IHB1c2hfaW5zbih0LCB0ICYjNDM7IGluc25fc3osIEZBTExUSFJPVUdILCBlbnYpO1xua2VybmVsL2JwZi9jZmcuYy0xOTEtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtMjAxLVx0XHRtZXJnZV9jYWxsZWVfZWZmZWN0cyhlbnYsIHQsIHcpO1xua2VybmVsL2JwZi9jZmcuYzoyMDI6XHRcdHJldCA9IHB1c2hfaW5zbih0LCB3LCBCUkFOQ0gsIGVudik7XG5rZXJuZWwvYnBmL2NmZy5jLTIwMy1cdH1cbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQ3ND1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy00OTItXHRcdGluc25fc3ogPSBicGZfaXNfbGRpbW02NChpbnNuKSA/IDIgOiAxO1xua2VybmVsL2JwZi9jZmcuYzo0OTM6XHRcdHJldHVybiBwdXNoX2luc24odCwgdCAmIzQzOyBpbnNuX3N6LCBGQUxMVEhST1VHSCwgZW52KTtcbmtlcm5lbC9icGYvY2ZnLmMtNDk0LVx0fVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTgzLVx0XHQvKiB1bmNvbmRpdGlvbmFsIGp1bXAgd2l0aCBzaW5nbGUgZWRnZSAqL1xua2VybmVsL2JwZi9jZmcuYzo1ODQ6XHRcdHJldCA9IHB1c2hfaW5zbih0LCB0ICYjNDM7IG9mZiAmIzQzOyAxLCBGQUxMVEhST1VHSCwgZW52KTtcbmtlcm5lbC9icGYvY2ZnLmMtNTg1LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTk5LVxua2VybmVsL2JwZi9jZmcuYzo2MDA6XHRcdHJldCA9IHB1c2hfaW5zbih0LCB0ICYjNDM7IDEsIEZBTExUSFJPVUdILCBlbnYpO1xua2VybmVsL2JwZi9jZmcuYy02MDEtXHRcdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9jZmcuYy02MDMtXG5rZXJuZWwvYnBmL2NmZy5jOjYwNDpcdFx0cmV0dXJuIHB1c2hfaW5zbih0LCB0ICYjNDM7IGluc24tXHUwMDNlb2ZmICYjNDM7IDEsIEJSQU5DSCwgZW52KTtcbmtlcm5lbC9icGYvY2ZnLmMtNjA1LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUzNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRW50cnkgUG9pbnQgQW5hbHlzaXMgaW4gYGNmZy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBjZmcuY2AgYW5kIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlbnRyeSBwb2ludHMuIFdoZXJlIGRvZXMgdGhlIGV4ZWN1dGlvbiBiZWdpbiwgYW5kIHdoYXQgZnVuY3Rpb25zIGFyZSB0aGUgY29yZSwgdGhlIGJ1aWxkaW5nIGJsb2Nrcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNvbmZpZ3VyYXRpb24gbG9hZGluZywgcGFyc2luZywgYW5kIGFwcGxpY2F0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXM6IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgcGFyc2luZyByb3V0aW5lcywgYW5kIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYXMgd2VsbCDigJMgY2FsbHMgdG8gb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgdGhlIHByb3BlciBvcGVyYXRpb24gb2YgdGhlIG1vZHVsZS4gVW5kZXJzdGFuZGluZyBob3cgYGNmZy5jYCBpbnRlcmZhY2VzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpcyBqdXN0IGFzIGltcG9ydGFudCBhcyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBtb2R1bGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2ZnLmM9NDU9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9jZmcuYy01MS1cbmtlcm5lbC9icGYvY2ZnLmM6NTI6c3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcbmtlcm5lbC9icGYvY2ZnLmMtNTMte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTktXG5rZXJuZWwvYnBmL2NmZy5jOjYwOnN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19taWdodF9zbGVlcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxua2VybmVsL2JwZi9jZmcuYy02MS17XG4tLVxua2VybmVsL2JwZi9jZmcuYy02Ny1cbmtlcm5lbC9icGYvY2ZnLmM6Njg6c3RhdGljIHZvaWQgbWFya19zdWJwcm9nX21pZ2h0X3Rocm93KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpXG5rZXJuZWwvYnBmL2NmZy5jLTY5LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTgxLSAqL1xua2VybmVsL2JwZi9jZmcuYzo4MjpzdGF0aWMgdm9pZCBtZXJnZV9jYWxsZWVfZWZmZWN0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdCwgaW50IHcpXG5rZXJuZWwvYnBmL2NmZy5jLTgzLXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTkzPWVudW0ge1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtMTAyLSAqL1xua2VybmVsL2JwZi9jZmcuYzoxMDM6c3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtMTA0LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTE4MS1cbmtlcm5lbC9icGYvY2ZnLmM6MTgyOnN0YXRpYyBpbnQgdmlzaXRfZnVuY19jYWxsX2luc24oaW50IHQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbnMsXG5rZXJuZWwvYnBmL2NmZy5jLTE4My1cdFx0XHRcdHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jZmcuYy0yMDYtXG5rZXJuZWwvYnBmL2NmZy5jOjIwNzpzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2lhcnJheV9yZWFsbG9jKHN0cnVjdCBicGZfaWFycmF5ICpvbGQsIHNpemVfdCBuX2VsZW0pXG5rZXJuZWwvYnBmL2NmZy5jLTIwOC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yMjItXG5rZXJuZWwvYnBmL2NmZy5jOjIyMzpzdGF0aWMgaW50IGNvcHlfaW5zbl9hcnJheShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgc3RhcnQsIHUzMiBlbmQsIHUzMiAqaXRlbXMpXG5rZXJuZWwvYnBmL2NmZy5jLTIyNC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNDItXG5rZXJuZWwvYnBmL2NmZy5jOjI0MzpzdGF0aWMgaW50IGNtcF9wdHJfdG9fdTMyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5rZXJuZWwvYnBmL2NmZy5jLTI0NC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNDctXG5rZXJuZWwvYnBmL2NmZy5jOjI0ODpzdGF0aWMgaW50IHNvcnRfaW5zbl9hcnJheV91bmlxKHUzMiAqaXRlbXMsIGludCBjbnQpXG5rZXJuZWwvYnBmL2NmZy5jLTI0OS17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNjQtICovXG5rZXJuZWwvYnBmL2NmZy5jOjI2NTppbnQgYnBmX2NvcHlfaW5zbl9hcnJheV91bmlxKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBzdGFydCwgdTMyIGVuZCwgdTMyICpvZmYpXG5rZXJuZWwvYnBmL2NmZy5jLTI2Ni17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNzktICovXG5rZXJuZWwvYnBmL2NmZy5jOjI4MDpzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fbWFwKHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2NmZy5jLTI4MS17XG4tLVxua2VybmVsL2JwZi9jZmcuYy0zMTAtICovXG5rZXJuZWwvYnBmL2NmZy5jOjMxMTpzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jZmcuYy0zMTItXHRcdFx0XHRcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTM2Mz1zdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKlxua2VybmVsL2JwZi9jZmcuYzozNjQ6Y3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy0zNjUte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtMzk2LS8qIFwmIzM0O2NvbmRpdGlvbmFsIGp1bXAgd2l0aCBOIGVkZ2VzXCYjMzQ7ICovXG5rZXJuZWwvYnBmL2NmZy5jOjM5NzpzdGF0aWMgaW50IHZpc2l0X2dvdG94X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2NmZy5jLTM5OC17XG4tLVxua2VybmVsL2JwZi9jZmcuYy00NDktICovXG5rZXJuZWwvYnBmL2NmZy5jOjQ1MDpzdGF0aWMgaW50IHZpc2l0X2Fibm9ybWFsX3JldHVybl9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB0KVxua2VybmVsL2JwZi9jZmcuYy00NTEte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNDczLSAqL1xua2VybmVsL2JwZi9jZmcuYzo0NzQ6c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy00NzUte1xuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNjEwLSAqL1xua2VybmVsL2JwZi9jZmcuYzo2MTE6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNjEyLXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTcxMi0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6NzEzOmludCBicGZfY29tcHV0ZV9wb3N0b3JkZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNzE0LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTc2NS0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6NzY2OmludCBicGZfY29tcHV0ZV9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNzY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIEZsb3cgYW5kIEZpeHVwIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBCUEYgdmVyaWZpZXIgYW5kIGhvdyBpdCBoYW5kbGVzIGluc3RydWN0aW9uIG1vZGlmaWNhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIGBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpYCBmdW5jdGlvbiBpcyBrZXk7IGl0IGNhbGxzIGB2aXNpdF9pbnNuYCwgd2hpY2ggdGhlbiBwdXNoZXMgaW5zdHJ1Y3Rpb25zIHVzaW5nIGBwdXNoX2luc25gLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGRlYWwgd2l0aCBwYXRjaGluZyBhbmQgcmVtb3ZpbmcgaW5zdHJ1Y3Rpb25zIGR1cmluZyB2ZXJpZmljYXRpb24uIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBicGZfcGF0Y2hfaW5zbl9kYXRhKClgIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zKClgLiBCb3RoIG9mIHRoZW0gYXJlIGludGVyZXN0aW5nIHNpbmNlIHRoZXkgaGF2ZSBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYC4gVGhhdCBsb29rcyBsaWtlIGEgY3JpdGljYWwgcG9pbnQgd2hlcmUgd2UgbWlnaHQgbmVlZCB0byBhYm9ydCB0aGUgdmVyaWZpY2F0aW9uLgoKT2theSwgSSYjMzk7bGwgZXhhbWluZSBgYnBmX3BhdGNoX2luc25fZGF0YWAgYW5kIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgY2hlY2sgdGhlaXIgY2FsbGVycywgYW5kIHdoZXRoZXIgdGhleSBhcmUgc3RhdGljIG9yIGhhdmUgYnJvYWRlciB2aXNpYmlsaXR5LiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBodW50IHRoZW0gZG93biBpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzLCBvciB1bmV4cGVjdGVkIHVzZXMuIExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYnBmX3BhdGNoX2luc25fZGF0YXx2ZXJpZmllcl9yZW1vdmVfaW5zbnMpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MTU2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTc2LVxua2VybmVsL2JwZi9jb3JlLmM6MTU3NzpcdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTc4LVx0aWYgKGVudilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNjA4LVx0XHRpZiAoZW52KVxua2VybmVsL2JwZi9jb3JlLmM6MTYwOTpcdFx0XHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xua2VybmVsL2JwZi9jb3JlLmMtMTYxMC1cdFx0ZWxzZVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MzE1PXN0YXRpYyBib29sIGJwZl9yZXdyaXRlX211c3RfYWJvcnQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTMyMi1cbmtlcm5lbC9icGYvZml4dXBzLmM6MzIzOnN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxua2VybmVsL2JwZi9maXh1cHMuYy0zMjQtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz01MjM9dm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy01MzYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjUzNzpzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxua2VybmVsL2JwZi9maXh1cHMuYy01Mzgte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NjE1PWludCBicGZfb3B0X3JlbW92ZV9kZWFkX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYyOS1cbmtlcm5lbC9icGYvZml4dXBzLmM6NjMwOlx0XHRlcnIgPSB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoZW52LCBpLCBqKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNjMxLVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NjM5PWludCBicGZfb3B0X3JlbW92ZV9ub3BzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy02NTItXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY1MzpcdFx0ZXJyID0gdmVyaWZpZXJfcmVtb3ZlX2luc25zKGVudiwgaSwgMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY1NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTY2ND1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03NDgtYXBwbHlfcGF0Y2hfYnVmZmVyOlxua2VybmVsL2JwZi9maXh1cHMuYzo3NDk6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03NjY9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzkzLVx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpWzBdO1xua2VybmVsL2JwZi9maXh1cHMuYzo3OTQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc5NS1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODE2LVx0XHR9IGVsc2UgaWYgKGNudCkge1xua2VybmVsL2JwZi9maXh1cHMuYzo4MTc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxOC1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODQ5LVx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg1MDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtODUxLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy05MjItXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIzOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy05MjQtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNTYtcGF0Y2hfaW5zbl9idWY6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwNTc6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xMDU4LVx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUxNi1cdCAqIG9uZXMgZm9yIHRoZSBoaWRkZW4gc3VicHJvZy4gSGVuY2UgYWxsIG9mIHRoZSBhZGp1c3RtZW50IG9wZXJhdGlvbnNcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUxNzpcdCAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy5cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUxOC1cdCAqL1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTE5Olx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMC1cdGlmICghcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTYwMC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTYwMTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTYwMi1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTY5MS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTY5MjpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY5My1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTcyMS1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzoxNzIyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xNzIzLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzQxLVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzQyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xNzQzLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk0LVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk1Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xNzk2LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODM5LVxua2VybmVsL2JwZi9maXh1cHMuYzoxODQwOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODQxLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODYwLVxua2VybmVsL2JwZi9maXh1cHMuYzoxODYxOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODYyLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODg3LVx0XHRcdCAqIHdpdGggdGhhdCBzYW1lIGhhbGYgJiM0MzsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLlxua2VybmVsL2JwZi9maXh1cHMuYzoxODg4Olx0XHRcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxua2VybmVsL2JwZi9maXh1cHMuYy0xODg5LVx0XHRcdCAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODk3LVx0XHRcdGkmIzQzOyYjNDM7O1xua2VybmVsL2JwZi9maXh1cHMuYzoxODk4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODk5LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xOTE4LVxua2VybmVsL2JwZi9maXh1cHMuYzoxOTE5Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xOTIwLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDA1LVx0XHRcdGNudCA9IDM7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDY6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDctXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMzk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNDAtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNTctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNTg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNTktXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDAtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxMDE6XHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTAyLVx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4My1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjE4NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4NS1cdFx0XHRcdFx0XHQgICAgICAgY250KTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMTMtI2VuZGlmXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMTQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMTUtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzItXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMzM6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjgtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyOTgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyOTk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMDAtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMjQtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzMjU6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMjYtXHRcdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzNDAtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzNDE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIDEpO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMzQyLVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzk1LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzk2Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0yMzk3LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDEzLVxua2VybmVsL2JwZi9maXh1cHMuYzoyNDE0Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy0yNDE1LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDgxLVxua2VybmVsL2JwZi9maXh1cHMuYzoyNDgyOlx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ4My1cdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0ODktXHRcdCAqIHRvIGluc24gYWZ0ZXIgQlBGX1NUIHRoYXQgaW5pdHMgbWF5X2dvdG8gY291bnQuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI0OTA6XHRcdCAqIEFkanVzdG1lbnQgd2lsbCBzdWNjZWVkIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGRpZG4mIzM5O3QgZmFpbC5cbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ5MS1cdFx0ICovXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0yNTE5PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmlubGluZV9icGZfbG9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4MC1cdCp0b3RhbF9jbnQgPSBjbnQ7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1ODE6XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1ODItXHRpZiAoIW5ld19wcm9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEJQRiBTdGF0ZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEJQRiBzdGF0ZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGBjaGVja19wa3RfcHRyX2lkc2AgZnVuY3Rpb24sIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGByZWdzYWZlYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcmVnc2FmZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW5kLCBpbXBvcnRhbnRseSwgd2hhdCB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBmdW5jdGlvbnMgd2l0aGluIGBzdGF0ZXMuY2AgYXJlIHRoYXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBvciB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBjb25uZWN0IHRvIGVhY2ggb3RoZXIuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIGNvbnRleHQgZm9yIGBjaGVja19wa3RfcHRyX2lkc2AmIzM5O3Mgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVnc2FmZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY1PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzM1LSAqIEluIHRoZSBmb3JtZXIgY2FzZSwgcHJlY2lzZSBtYXJraW5ncyBpbiBjdXJyZW50IHN0YXRlIGFyZSBjb21wbGV0ZWx5XG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjczNjogKiBpZ25vcmVkIGJ5IHN0YXRlIGNvbXBhcmlzb24gY29kZSAoc2VlIHJlZ3NhZmUoKSBmb3IgZGV0YWlscykuIE9ubHlcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzM3LSAqIGNoZWNrcG9pbnRlZCAoXCYjMzQ7b2xkXCYjMzQ7KSBzdGF0ZSBwcmVjaXNlIG1hcmtpbmdzIGFyZSBpbXBvcnRhbnQsIGFuZCBpZiBvbGRcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzM4OiAqIHN0YXRlJiMzOTtzIHJlZ2lzdGVyL3Nsb3QgaXMgcHJlY2lzZSwgcmVnc2FmZSgpIGFzc3VtZXMgY3VycmVudCBzdGF0ZSYjMzk7c1xua2VybmVsL2JwZi9iYWNrdHJhY2suYy03MzktICogcmVnaXN0ZXIvc2xvdCBhcyBwcmVjaXNlIGFuZCBjaGVja3MgdmFsdWUgcmFuZ2VzIGV4YWN0bHkgYW5kIHByZWNpc2VseS4gSWZcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTUzNT1lbnVtIGV4YWN0X2xldmVsIHtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0MS0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6NTQyOnN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0My1cdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTczNz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy03ODQtXHRcdCAqIENvbnN0cnVjdCBhIGZha2UgcmVnaXN0ZXIgZm9yIHN1Y2ggc3RhY2sgYW5kIGNhbGxcbmtlcm5lbC9icGYvc3RhdGVzLmM6Nzg1Olx0XHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxua2VybmVsL2JwZi9zdGF0ZXMuYy03ODYtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzkwLVx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc5MTpcdFx0XHRcdGlmICghcmVnc2FmZShlbnYsIG9sZF9yZWcsIGN1cl9yZWcsIGlkbWFwLCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc5Mi1cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtODI3LVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4Mjg6XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTgyOS1cdFx0XHRcdCAgICAgXHUwMDI2Y3VyLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIGlkbWFwLCBleGFjdCkpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz04ODI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy04OTYtXHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlc3RhY2tfYXJnX3JlZ3NbaV0gOiBcdTAwMjZub3RfaW5pdDtcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODk3Olx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfYXJnLCBjdXJfYXJnLCBpZG1hcCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy04OTgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9OTgwPXN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTkzLVx0XHRpZiAoKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgbGl2ZV9yZWdzKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTk0Olx0XHQgICAgIXJlZ3NhZmUoZW52LCBcdTAwMjZvbGQtXHUwMDNlcmVnc1tpXSwgXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbaV0sXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk5NS1cdFx0XHQgICAgIFx1MDAyNmVudi1cdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzdGF0ZXMuY2AgZm9yIGBmdW5jX3N0YXRlc19lcXVhbGAgYW5kIGByZWdzYWZlYCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHN0YXRlcy5jYCB0aGF0IGFyZSBhY3R1YWxseSAqdXNpbmcqIGBmdW5jX3N0YXRlc19lcXVhbGAgb3IgYHJlZ3NhZmVgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGEgZ3JlcCBzZWFyY2g7IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2FsbHMuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3MgYSByZWFzb24gd2UmIzM5O3JlIGV4YW1pbmluZyB0aGlzIHNwZWNpZmljYWxseSDigJMgbGlrZWx5IGEgcG90ZW50aWFsIGFyZWEgZm9yIG9wdGltaXphdGlvbiwgYSBzZWN1cml0eSBjb25jZXJuLCBvciBwZXJoYXBzIGp1c3QgYSBjb2RlIHJldmlldyB0byBlbnN1cmUgY29uc2lzdGVudCB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbi4gU3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIGludGVybmFsIHRvIHRoZSBmaWxlLiBJIGFtIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBtb3JlIHZpc2libGUgdG8gdGhlIG91dHNpZGUgd29ybGQsIGFuZCBhbSBmb2N1c2luZyBvbiB0aGlzIGZpcnN0LgoKU28sIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIGZ1bmN0aW9ucywgbm90aW5nICp3aGVyZSogdGhlc2UgY29tcGFyaXNvbnMgb3Igc2FmZXRseSBjaGVja3MgYXJlIGhhcHBlbmluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgcHVycG9zZSBvZiB0aG9zZSBmdW5jdGlvbnMgLSB3aGF0IGlzIGl0IHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBmb3I/IFdoYXQgc3RhdGVzIGFyZSB3ZSB3b3JraW5nIHdpdGg/IFdoYXQgaXMgdGhlIGZ1bmN0aW9uIHRyeWluZyB0byB2YWxpZGF0ZSBvciBzZWN1cmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvZGUgc21lbGxzPyBBcmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgd2hhdCBJIHdvdWxkIGV4cGVjdCwgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBzeXN0ZW0/IEFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBiZSBhIGhpZ2ggcHJpb3JpdHkuIEkgd2FudCB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtb2RlbCBvZiB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGVzZSBjYWxscy4gT25jZSB0aGF0IGNvbnRleHQgaXMgdW5kZXJzdG9vZCwgaXQmIzM5O3MgZWFzaWVyIHRvIGFzc2VzcyB3aGV0aGVyIHRoZSB1c2FnZSBpcyBzb3VuZCBvciBpZiB0aGVyZSYjMzk7cyByb29tIGZvciBpbXByb3ZlbWVudCwgc3VjaCBhcyBjaGFuZ2luZyB0aGUgd2F5IHRoYXQgc29tZSBzdGF0ZXMgYXJlIHZhbGlkYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1bmNfc3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc5LSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTAxNT1zdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwNDYtXHRcdFx0cmV0dXJuIGZhbHNlO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDQ3Olx0XHRpZiAoIWZ1bmNfc3RhdGVzX2VxdWFsKGVudiwgb2xkLVx1MDAzZWZyYW1lW2ldLCBjdXItXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwNDgtXHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI5MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzdGF0ZXNfZXF1YWxgIENhbGwgU2l0ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgdGhpcyBgc3RhdGVzX2VxdWFsYCBmdW5jdGlvbiBiZWluZyB1c2VkPyYjMzQ7IFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGltcGFjdCBhbmQgYmVoYXZpb3IsIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdHMgY29tcGFyaXNvbiBsb2dpYy4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBvZiB0aGUgY29kZWJhc2UsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNyb3NzLXJlZmVyZW5jZXMsIG1heWJlIHVzaW5nIGFuIElERSYjMzk7cyAmIzM0O2ZpbmQgdXNhZ2VzJiMzNDsgZmVhdHVyZSwgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSBhbmFseXNpcyB0b29sIGlmIHRoaXMgaXMgYSBsYXJnZSBwcm9qZWN0LiBUaGUgZ29hbCBoZXJlIGlzbiYjMzk7dCBqdXN0IGEgbGlzdDsgSSYjMzk7bSBhZnRlciB0aGUgKnR5cGVzKiBvZiBjb250ZXh0cy4gQXJlIHdlIGNvbXBhcmluZyBzdGF0ZXMgaW4gYSBzaW11bGF0aW9uIGxvb3AsIGluIHZhbGlkYXRpb24gY2hlY2tzLCBpbiBzZXJpYWxpemF0aW9uIHJvdXRpbmVzLCBvciB3aGF0PyBLbm93aW5nIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2UgdG8gYHN0YXRlc19lcXVhbGAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb3VsZCBhbHNvIHJldmVhbCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3Mgc3RlbW1pbmcgZnJvbSB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz05MDQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk3OS0gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTgwOnN0YXRpYyBib29sIGZ1bmNfc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy05ODEtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxNC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxNTpzdGF0aWMgYm9vbCBzdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxNi1cdFx0XHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTA0Ni1cdFx0XHRyZXR1cm4gZmFsc2U7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwNDc6XHRcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXHUwMDNlZnJhbWVbaV0sIGN1ci1cdTAwM2VmcmFtZVtpXSwgaW5zbl9pZHgsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTA0OC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjc0PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY3LVx0XHRcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzY4Olx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2OS1cdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXJfZnJhbWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzc3LVx0XHRcdFx0XHRpdGVyX3JlZyA9IFx1MDAyNmN1cl9mcmFtZS1cdTAwM2VyZWdzW0JQRl9SRUdfMV07XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNzg6XHRcdFx0XHRcdC8qIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgZHVlIHRvIHN0YXRlc19lcXVhbCgpLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzc5LVx0XHRcdFx0XHQgKiBzbyB3ZSBjYW4gYXNzdW1lIHZhbGlkIGl0ZXIgYW5kIHJlZyBzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTItXHRcdFx0XHRpZiAoc2wtXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVx1MDAzZW1heV9nb3RvX2RlcHRoIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzkzOlx0XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM5NC1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzk4LVx0XHRcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM5OTpcdFx0XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0MDAtXHRcdFx0XHRcdGxvb3AgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwNi1cdFx0XHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0MDc6XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwOC1cdFx0XHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDM5LVx0XHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUpO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDQwOlx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ0MS1oaXQ6XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDc5LVx0XHRcdCAqXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0ODA6XHRcdFx0ICogLSBXaGVuIGEgdmVyaWZpY2F0aW9uIHBhdGggZW5jb3VudGVycyBhIGBzdGF0ZXNfZXF1YWwoLi4uLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDgxLVx0XHRcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjEzCgkJCQkJCQlvdXRwdXQ6IDU4CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU3RhdGUgVmlzaXRhdGlvbioqCgpPa2F5LCBzbyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2AgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFdoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gdGhlIHZlcmlmaWVyIGNvZGUgdGhhdCByZWxhdGUgdG8gdGhpcyBzdGF0ZSBtYW5hZ2VtZW50PyBMb29rcyBsaWtlIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MoKWAsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoKWAsIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKClgLCBhbmQgdGhhdCBoZWxwZXIsIGBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpYCwgd2VyZSBhbGwgdG91Y2hlZC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGVpciBzY29wZSBiZWNhdXNlIHRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhleSYjMzk7cmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBvciBpZiB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsobWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzfHNldF90aW1lcl9jYWxsYmFja19zdGF0ZXxzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ny1cdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3ODpcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc5LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9hcnJheV9lbGVtLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDItXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5MDM6XHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwNC1cdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjAxOC1cdFx0XHQgKiB3aXRoIGRpZmZlcmVudCBtYXBzIGFuZCB0aGUgcmVnaXN0ZXIgc3RhdGVzIHByZXBhcmVkIGJ5XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMTk6XHRcdFx0ICogc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlIHdpbGwgYmUgYWNjdXJhdGUuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMjAtXHRcdFx0ICpcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM3My1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzc0Olx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTYtXHQubWFwX3NlcV9zaG93X2VsZW0gPSBodGFiX21hcF9zZXFfc2hvd19lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5NzpcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk4LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc2LVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc3Olx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk3LVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTk4Olx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTktXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjEtXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjI6XHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMy1cdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZWFjaF9yaGFzaF9lbGVtLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTA2PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwMjItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwMjM6aW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDI0LVx0XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMDY5PXN0YXRpYyBpbnQgc2V0X21hcF9lbGVtX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDc5LVx0bWFwID0gaW5zbl9hdXgtXHUwMDNlbWFwX3B0cl9zdGF0ZS5tYXBfcHRyO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDgwOlx0aWYgKCFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDgxLVx0ICAgICFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mb3JfZWFjaF9jYWxsYmFjaykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA4NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDA4NjpcdGVyciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKGVudiwgY2FsbGVyLCBjYWxsZWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDg3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwOTU9c3RhdGljIGludCBzZXRfbG9vcF9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExNi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDExNzpzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTE4LVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDIwNT1zdGF0aWMgaW50IHNldF9yYnRyZWVfYWRkX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjM3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjM4OnN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjM5LVx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MjY9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwOTcyLVx0XHRlcnIgPSBwdXNoX2NhbGxiYWNrX2NhbGwoZW52LCBpbnNuLCBpbnNuX2lkeCwgbWV0YS5zdWJwcm9nbm8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA5NzM6XHRcdFx0XHRcdCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwOTc0LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3Njg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4OTQtXHRcdGVyciA9IHB1c2hfY2FsbGJhY2tfY2FsbChlbnYsIGluc24sIGluc25faWR4LCBtZXRhLnN1YnByb2dubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg5NTpcdFx0XHRcdFx0IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4OTYtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MDQtXHRcdGVyciA9IHB1c2hfY2FsbGJhY2tfY2FsbChlbnYsIGluc24sIGluc25faWR4LCBtZXRhLnN1YnByb2dubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkwNTpcdFx0XHRcdFx0IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTA2LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTc1CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDE0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbnMgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhpcyBwYXRjaCwgYW5kIHRoZSBrZXkgaXMgcGlucG9pbnRpbmcgdGhlIG1vc3QgcmVsZXZhbnQgY29kZS4gRmlyc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIgaXMgYGJwZl9jaGVja2AsIGJ1dCB0aGF0JiMzOTtzIGEgZ2VuZXJhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCBvciBkaXJlY3RseSByZWxldmFudCB0byB0aGUgY2hhbmdlcyB0byBsaXN0IGluIGBGb2N1c1N5bWJvbHNgLgoKSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIGl0IGxvb2tzIGxpa2U6CgoqICAgSW4gYGtlcm5lbC9icGYvY2ZnLmNgLCBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl9jaGVja19jZmdgICh3aGljaCBjYWxscyBgdmlzaXRfaW5zbmAgd2hpY2ggY2FsbHMgYHB1c2hfaW5zbmApLgoqICAgVGhlbiBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AsIHRoZXJlJiMzOTtzIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AsIGBicGZfb3B0X3JlbW92ZV9kZWFkX2NvZGVgLCBhbmQgYGJwZl9vcHRfcmVtb3ZlX25vcHNgLgoqICAgTW92aW5nIG9uIHRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgSSBoYXZlIGBjaGVja19wa3RfcHRyX2lkc2AsIGByZWdzYWZlYCwgYW5kIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuCiogICBGaW5hbGx5LCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSBuZWVkIHRvIGxvb2sgYXQgYG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc2AsIGBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGVgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWAsIGFuZCBgYnBmX2NoZWNrYCAoYWdhaW4pLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBzeW1ib2xzIGFyZSBpbiBgdm1saW51eGAgb3IgaWYgdGhleSBnZXQgaW5saW5lZC4gV2l0aCBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBleHBvcnRlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYSBiaXQgdHJpY2tpZXIsIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgaW5saW5lZCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyJiMzOTtzIG9wdGltaXphdGlvbnMuIFNvLCB0byBiZSBzYWZlLCBJJiMzOTtsbCBsaXN0IGJvdGggbm9uLXN0YXRpYyBzeW1ib2xzIGFzIHdlbGwgYXMgc3RhdGljIG9uZXMgaWYgdGhleSBhcmVuJiMzOTt0IHN0YXRpYyBpbmxpbmUgaW4gaGVhZGVycy4gU2VjdGlvbiA0IGNvbmZpcm1zIHRoaXM6IEkgbmVlZCB0byB0YXJnZXQgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqIGFuZCBlbnRyeXBvaW50cywgYW5kIGFjY291bnQgZm9yIHN0YXRpYyBpbmxpbmVzLgoKU28sIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBsaXN0LCBjb25maXJtaW5nIHRoYXQgYWxsIHRoZSBjb2RlIGZyb20gdGhlIGRpZmYgaXMgaW5jbHVkZWQ6CjEuICBgcHVzaF9pbnNuYCBhbmQgYGJwZl9jaGVja19jZmdgIGluIGBjZmcuY2AKMi4gIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AsIGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0YCBpbiBgZml4dXBzLmNgCjMuICBgY2hlY2tfcGt0X3B0cl9pZHNgLCBgcmVnc2FmZWAsIGFuZCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2AKNC4gIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgIGFuZCBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHlgIGluIGB2ZXJpZmllci5jYAoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGFueSBkZXBlbmRlbmNpZXMgb24gY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbi4gQ2hlY2tpbmcgdGhlIGNvZGUgZm9yIGlmZGVmcyBpbiBgY2ZnLmNgLCBgZml4dXBzLmNgLCBgc3RhdGVzLmNgLCBhbmQgYHZlcmlmaWVyLmNgLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkuIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgYWxsIEkgbmVlZCwgYW5kIGl0IHNlbGVjdHMgQlBGLgoKTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogSXMgdGhpcyBgV29ydGhGdXp6aW5nPXRydWVgPyBBYnNvbHV0ZWx5LiBUaGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBjb250cm9sIGZsb3cgZ3JhcGggY29uc3RydWN0aW9uLCBpbnN0cnVjdGlvbiByZXdyaXRpbmcsIHBhY2tldCBwb2ludGVyIHN0YXRlIGNoZWNrcywgYW5kIGxvY2sgSUQgYXNzaWdubWVudC4gVGhpcyBhbGwgdG91Y2hlcyBjb3JlLCByZWFjaGFibGUgbG9naWMsIGFuZCB0aGUgQlBGIHN5c3RlbSBjYWxsIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LgoKT2theSwgbGV0JiMzOTtzIG1ha2UgYSBmaW5hbCwgYWNjdXJhdGUgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDoKCiogICBgYnBmX2NoZWNrX2NmZ2AKKiAgIGBwdXNoX2luc25gCiogICBgYnBmX3BhdGNoX2luc25fZGF0YWAKKiAgIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgCiogICBgY2hlY2tfcGt0X3B0cl9pZHNgCiogICBgcmVnc2FmZWAKKiAgIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAKKiAgIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgCiogICBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYAoqICAgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgCgpJIG5lZWQgdG8gbWFrZSBzdXJlIG5vbmUgb2YgdGhlc2UgYXJlIGdlbmVyaWMgb3IgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBCUEYgdmVyaWZpZXIgc3Vic3lzdGVtIGFuZCBub3QgZ2VuZXJhbCBrZXJuZWwgbGlmZWN5Y2xlIGZ1bmN0aW9ucywgd2hpY2ggaXMgZ29vZC4KCkZpbmFsbHksIEkgY2FuIHF1aWNrbHkgc3VtbWFyaXNlIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBzZXJpZXMgaXMgbW9kaWZ5aW5nIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGludm9sdmVkIGluIHZhbGlkYXRpbmcgY29udHJvbCBmbG93LCBzaWduYWwgaGFuZGxpbmcsIHBvaW50ZXIgY29tcGFyaXNvbiwgYW5kIHVuaXF1ZSBsb2NrIElEIGFzc2lnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYXJlIGV4ZXJjaXNlZCB0aHJvdWdoIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLCBzbwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVja19jZmcmIzM0OywKICAgICYjMzQ7cHVzaF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9wYXRjaF9pbnNuX2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O2NoZWNrX3BrdF9wdHJfaWRzJiMzNDssCiAgICAmIzM0O3JlZ3NhZmUmIzM0OywKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAgICYjMzQ7bWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzJiMzNDssCiAgICAmIzM0O3NldF90aW1lcl9jYWxsYmFja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrX2NmZyYjMzQ7LAogICAgJiMzNDtwdXNoX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICAgJiMzNDt2ZXJpZmllcl9yZW1vdmVfaW5zbnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfcGt0X3B0cl9pZHMmIzM0OywKICAgICYjMzQ7cmVnc2FmZSYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDttYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MmIzM0OywKICAgICYjMzQ7c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlJiMzNDssCiAgICAmIzM0O3NldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBleGVjdXRpb24gcGF0aHMsIGluY2x1ZGluZyBjb250cm9sIGZsb3cgZ3JhcGggKENGRykgc3VicHJvZ3JhbSBib3VuZGFyeSBjaGVja3MsIHNpZ25hbC1hd2FyZSBpbnN0cnVjdGlvbiByZXdyaXRpbmcvcmVtb3ZhbCBwYXNzZXMsIHBhY2tldCBwb2ludGVyIHN0YXRlIGVxdWl2YWxlbmNlIGNvbXBhcmlzb24gKHJlZ3NhZmUpLCBhbmQgbG9jayBpZGVudGl0eSB0cmFja2luZyBmb3IgY2FsbGJhY2sgYXJndW1lbnRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCwgLi4uKSBzeXNjYWxsIGFuZCBkaXJlY3RseSBhZmZlY3QgdmVyaWZpY2F0aW9uIGNvcnJlY3RuZXNzIGFuZCBzYWZldHkgaW52YXJpYW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBDRkcgYW5hbHlzaXMgaW4gc2V2ZXJhbCBhcmVhczpcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXG4yLiBWYWxpZGF0ZXMgc3VicHJvZ3JhbSBib3VuZGFyaWVzIG9uIGZhbGwtdGhyb3VnaCBlZGdlcyBpbiBga2VybmVsL2JwZi9jZmcuY2AuXG4zLiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0YCkgdG8gcHJldmVudCBub24ta2lsbGFibGUgbG9vcHMgZHVyaW5nIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHBhdGNoaW5nL3JlbW92YWwgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLlxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLiBBbGwgc3RydWN0IGZpZWxkcyBhZGRlZCAoYHBrdF9wdHJfZGVsdGFgLCBgcGt0X3B0cl9kZWx0YV9zZXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgdmVyaWZpZXIgbG9naWMsIGNvbnRyb2wtZmxvdyB2YWxpZGF0aW9uLCBhbmQgc2lnbmFsLWhhbmRsaW5nIGltcHJvdmVtZW50cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi41Y2Y5MmNlMTg1MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTg1NCw2ICYjNDM7ODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7CiBzdHJ1Y3QgYnBmX2lkX3BhaXIgewogCXUzMiBvbGQ7CiAJdTMyIGN1cjsKJiM0MzsJczMyIHBrdF9wdHJfZGVsdGE7CiYjNDM7CWJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7CiB9OwogCiBzdHJ1Y3QgYnBmX2lkbWFwIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jCmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZmcuYwpAQCAtMTAyLDYgJiM0MzsxMDIsNyBAQCBlbnVtIHsKICAqLwogc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKJiM0MzsJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CiAJaW50ICppbnNuX3N0YWNrID0gZW52LSZndDtjZmcuaW5zbl9zdGFjazsKIAlpbnQgKmluc25fc3RhdGUgPSBlbnYtJmd0O2NmZy5pbnNuX3N0YXRlOwogCkBAIC0xMjEsNiAmIzQzOzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogY2hlY2tfc3VicHJvZ3MoKSBwcmV2ZW50cyBjb250cm9sIGZsb3cgZnJvbSBmYWxsaW5nIHRocm91Z2ggYQomIzQzOwkgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW4KJiM0MzsJICogaW5zdHJ1Y3Rpb24uIFJlZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnQgb24gdGhlIGZpbmFsIGluc3RydWN0aW9uIHN0cmVhbQomIzQzOwkgKiBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBDRkcgdXNlZCBieSBsYXRlciBwZXItc3VicHJvZ3JhbSBwYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZSA9PSBGQUxMVEhST1VHSCkgewomIzQzOwkJc3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpOwomIzQzOwkJaWYgKHcgJmx0OyBzdWJwcm9nLSZndDtzdGFydCB8fCB3ICZndDs9IChzdWJwcm9nICYjNDM7IDEpLSZndDtzdGFydCkgewomIzQzOwkJCXZlcmJvc2VfbGluZm8oZW52LCB0LCAmIzM0OyVkOiAmIzM0OywgdCk7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxuJiMzNDssIHQsIHcpOwomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIHQsICYjMzQ7ZmFsbC10aHJvdWdoIGxlYXZlcyBzdWJwcm9ncmFtJiMzNDssCiYjNDM7CQkJCSYjMzQ7S2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLiYjMzQ7LAomIzQzOwkJCQkmIzM0O0luc3RydWN0aW9uICVkIGZhbGxzIHRocm91Z2ggdG8gaW5zdHJ1Y3Rpb24gJWQgb3V0c2lkZSBpdHMgc3VicHJvZ3JhbS4mIzM0OywKJiM0MzsJCQkJdCwgdyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZSA9PSBCUkFOQ0gpIHsKIAkJLyogbWFyayBicmFuY2ggdGFyZ2V0IGZvciBzdGF0ZSBwcnVuaW5nICovCiAJCW1hcmtfcHJ1bmVfcG9pbnQoZW52LCB3KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnNlYXJjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHAuaCZndDsKICNpbmNsdWRlICYjMzQ7ZGlzYXNtLmgmIzM0OwogCkBAIC0zMDYsMTIgJiM0MzszMDcsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW4KJiM0MzsgKiBPKHByb2ctJmd0O2xlbikgb3BlcmF0aW9uIHBlciBpbnN0cnVjdGlvbi4gS2VlcCB0aGVpciBzaGFyZWQgcHJpbWl0aXZlcwomIzQzOyAqIGtpbGxhYmxlIGFuZCBwcmVlbXB0aWJsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY29uZF9yZXNjaGVkKCk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKIAomIzQzOwlpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaWYgKGxlbiAmZ3Q7IDEpIHsKIAkJbmV3X2RhdGEgPSB2cmVhbGxvYyhlbnYtJmd0O2luc25fYXV4X2RhdGEsCiAJCQkJICAgIGFycmF5X3NpemUoZW52LSZndDtwcm9nLSZndDtsZW4gJiM0MzsgbGVuIC0gMSwKQEAgLTUyMyw2ICYjNDM7NTQwLDkgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAl1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCkBAIC0yNjY2LDQgJiM0MzsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmMKaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCkBAIC0zMzksNiAmIzQzOzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCkKIAlpZiAoaWRtYXAtJmd0O2NudCAmbHQ7IEJQRl9JRF9NQVBfU0laRSkgewogCQltYXBbaWRtYXAtJmd0O2NudF0ub2xkID0gb2xkX2lkOwogCQltYXBbaWRtYXAtJmd0O2NudF0uY3VyID0gY3VyX2lkOwomIzQzOwkJbWFwW2lkbWFwLSZndDtjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7CiAJCWlkbWFwLSZndDtjbnQmIzQzOyYjNDM7OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0zNTIsNiAmIzQzOzM1Myw0MyBAQCBzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC0mZ3Q7bWFwOwomIzQzOwlzNjQgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoZWNrX2lkcyhvbGQtJmd0O2lkLCBjdXItJmd0O2lkLCBpZG1hcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghb2xkLSZndDtpZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZQomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBkaXNwbGFjZW1lbnQsIHdoaWxlIGFsbG93aW5nIHRoZSB3aG9sZSBjbGFzcyB0byBtb3ZlLgomIzQzOwkgKiBQYWNrZXQgcG9pbnRlciBvZmZzZXRzIGFyZSBib3VuZGVkIGJ5IEJQRl9NQVhfVkFSX09GRiwgc28gdGhlIGRlbHRhCiYjNDM7CSAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuCiYjNDM7CSAqLwomIzQzOwlkZWx0YSA9IChzNjQpKGN1ci0mZ3Q7cjY0LmJhc2UgLSBvbGQtJmd0O3I2NC5iYXNlKTsKJiM0MzsJaWYgKGRlbHRhICZsdDsgUzMyX01JTiB8fCBkZWx0YSAmZ3Q7IFMzMl9NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZG1hcC0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1hcFtpXS5vbGQgIT0gb2xkLSZndDtpZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghbWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0KSB7CiYjNDM7CQkJbWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTsKJiM0MzsJCQltYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS4KICAqCkBAIC02MzIsOCAmIzQzOzY3MCw4IEBAIHN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsCiAJCX0gZWxzZSBpZiAocm9sZC0mZ3Q7cmFuZ2UgJmd0OyByY3VyLSZndDtyYW5nZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0JCS8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqLwotCQlpZiAoIWNoZWNrX2lkcyhyb2xkLSZndDtpZCwgcmN1ci0mZ3Q7aWQsIGlkbWFwKSkKJiM0MzsJCS8qIGlkIHJlbGF0aW9ucyBhbmQgaW50cmEtY2xhc3MgZGlzcGxhY2VtZW50IG11c3QgYmUgcHJlc2VydmVkICovCiYjNDM7CQlpZiAoIWNoZWNrX3BrdF9wdHJfaWRzKHJvbGQsIHJjdXIsIGlkbWFwKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJLyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi8KIAkJcmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDQ3LDYgJiM0Mzs0NDcsMTEgQEAgc3RhdGljIGJvb2wgcmVnX21heV9wb2ludF90b19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKIAlyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQocmVnX2J0Zl9yZWNvcmQocmVnKSwgQlBGX1NQSU5fTE9DSyB8IEJQRl9SRVNfU1BJTl9MT0NLKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOyBtYXAtJmd0O21heF9lbnRyaWVzID09IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdHlwZV9pc19yZG9ubHlfbWVtKHUzMiB0eXBlKQogewogCXJldHVybiB0eXBlICZhbXA7IE1FTV9SRE9OTFk7CkBAIC0xMDAzNSw2ICYjNDM7MTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18xXS5tYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi8KIAljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR180XSA9IGNhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzNdOwpAQCAtMTAxMzEsNiAmIzQzOzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlfX21hcmtfcmVnX2tub3duX3plcm8oJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSk7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7CiAJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7CiYjNDM7CWlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jaygmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpCiYjNDM7CQljYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXS5pZCA9ICYjNDM7JiM0MztlbnYtJmd0O2lkX2dlbjsKIAogCS8qIHVudXNlZCAqLwogCWJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsICZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfNF0pOwpAQCAtMTAyNDksNiAmIzQzOzEwMjYwLDkgQEAgc3RhdGljIGludCBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJX19tYXJrX3JlZ19rbm93bl96ZXJvKCZhbXA7Y2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10pOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBtYXBfcHRyOwogCWNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkOwomIzQzOwlpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soJmFtcDtjYWxsZWUtJmd0O3JlZ3NbQlBGX1JFR18zXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKQomIzQzOwkJY2FsbGVlLSZndDtyZWdzW0JQRl9SRUdfM10uaWQgPSAmIzQzOyYjNDM7ZW52LSZndDtpZF9nZW47CiAKIAkvKiB1bnVzZWQgKi8KIAlicGZfbWFya19yZWdfbm90X2luaXQoZW52LCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzRdKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jCmluZGV4IGExOGQzNjgwZmIxNjkuLmMzNTBmYmI5NTg0NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuYwpAQCAtMTQsNiAmIzQzOzE0LDExNyBAQAogCiBzdGF0aWMgY2hhciBsb2dbMTYgKiAxMDI0XTsKIAomIzQzO3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCwKJiM0MzsJCQkJICBpbnQgZW51bV9pZCwgaW50IGFjY2Vzc19zdHJfb2ZmLCBib29sIHJlbG9jYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfQ0FMTF9SRUwoMiksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksCiYjNDM7CQlCUEZfRVhJVF9JTlNOKCksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfZnVuY19pbmZvIGZ1bmNzW10gPSB7CiYjNDM7CQl7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LAomIzQzOwkJeyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2NvcmVfcmVsbyByZWxvID0gewomIzQzOwkJLmluc25fb2ZmID0gMiAqIHNpemVvZihzdHJ1Y3QgYnBmX2luc24pLAomIzQzOwkJLnR5cGVfaWQgPSBlbnVtX2lkLAomIzQzOwkJLmFjY2Vzc19zdHJfb2ZmID0gYWNjZXNzX3N0cl9vZmYsCiYjNDM7CQkua2luZCA9IEJQRl9DT1JFX0VOVU1WQUxfVkFMVUUsCiYjNDM7CX07CiYjNDM7CXVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLAomIzQzOwkJLmluc25fY250ID0gQVJSQVlfU0laRShpbnNucyksCiYjNDM7CQkuaW5zbnMgPSAoX191NjQpaW5zbnMsCiYjNDM7CQkubGljZW5zZSA9IChfX3U2NCkmIzM0O0dQTCYjMzQ7LAomIzQzOwkJLmxvZ19idWYgPSAoX191NjQpbG9nLAomIzQzOwkJLmxvZ19zaXplID0gc2l6ZW9mKGxvZyksCiYjNDM7CQkubG9nX2xldmVsID0gMSwKJiM0MzsJCS5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCwKJiM0MzsJCS5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLAomIzQzOwkJLmZ1bmNfaW5mbyA9IChfX3U2NClmdW5jcywKJiM0MzsJCS5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChyZWxvY2F0ZSkgewomIzQzOwkJYXR0ci5jb3JlX3JlbG9fY250ID0gMTsKJiM0MzsJCWF0dHIuY29yZV9yZWxvcyA9IChfX3U2NCkmYW1wO3JlbG87CiYjNDM7CQlhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTsKJiM0MzsJfQomIzQzOwltZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7CiYjNDM7CXJldHVybiBzeXNfYnBmX3Byb2dfbG9hZCgmYW1wO2F0dHIsIHNpemVvZihhdHRyKSwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCB2b2lkICpyYXdfYnRmOwomIzQzOwlzdHJ1Y3QgYnRmICpidGYgPSBOVUxMOwomIzQzOwlfX3UzMiByYXdfYnRmX3NpemU7CiYjNDM7CWludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7CiYjNDM7CWludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGludF9pZCwgMCwgJiMzNDthZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlwcm90b19pZCA9IGJ0Zl9fYWRkX2Z1bmNfcHJvdG8oYnRmLCBpbnRfaWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChwcm90b19pZCwgMCwgJiMzNDthZGRfZnVuY19wcm90byYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWFpbl9pZCA9IGJ0Zl9fYWRkX2Z1bmMoYnRmLCAmIzM0O21haW5fZm4mIzM0OywgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsICYjMzQ7YWRkX21haW5fZnVuYyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsICYjMzQ7c3ViX2ZuJiMzNDssIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChzdWJfaWQsIDAsICYjMzQ7YWRkX3N1Yl9mdW5jJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllbnVtX2lkID0gYnRmX19hZGRfZW51bShidGYsICYjMzQ7Y29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmcmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVudW1faWQsIDAsICYjMzQ7YWRkX2VudW0mIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7dmFsdWUmIzM0OywgMCksICYjMzQ7YWRkX2VudW1fdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgJiMzNDswJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9HVChhY2Nlc3Nfc3RyX29mZiwgMCwgJiMzNDthZGRfYWNjZXNzX3N0ciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3Jhd19idGZfc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCAmIzM0O3Jhd19idGYmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShidGZfZmQsIDAsICYjMzQ7YnRmX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqLwomIzQzOwlwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCwKJiM0MzsJCQkJCSBhY2Nlc3Nfc3RyX29mZiwgZmFsc2UpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJY2xvc2UocHJvZ19mZCk7CiYjNDM7CXByb2dfZmQgPSAtMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJiMzOTtzIHRlcm1pbmFsIGV4aXQuIFRoZSB2ZXJpZmllciBtdXN0IHJlamVjdAomIzQzOwkgKiB0aGUgcmVzdWx0aW5nIGNvbnRyb2wgZmxvdyBhY3Jvc3MgdGhlIHN1YnByb2dyYW0gYm91bmRhcnkgaW4gdGhlIENGRy4KJiM0MzsJICovCiYjNDM7CXByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLAomIzQzOwkJCQkJIGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDtwb2lzb25lZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihsb2csICYjMzQ7ZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDMmIzM0OywKJiM0MzsJCQkgICYjMzQ7cG9pc29uZWRfbG9hZF9sb2cmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PUk1BTCAmYW1wOyZhbXA7IGxvZ1swXSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7LS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBzdGFydCAtLS0tLS0tLVxuJiMzNDspOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXMmIzM0OywgbG9nKTsKJiM0MzsJCXByaW50ZigmIzM0Oy0tLS0tLS0tIHByb2dyYW0gbG9hZCBsb2cgZW5kIC0tLS0tLS0tLS1cbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UoYnRmX2ZkKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQomIzQzOwogLyogQ2hlY2sgdGhhdCB2ZXJpZmllciByZWplY3RzIEJQRiBwcm9ncmFtIGNvbnRhaW5pbmcgcmVsb2NhdGlvbgogICogcG9pbnRpbmcgdG8gbm9uLWV4aXN0ZW50IEJURiB0eXBlLgogICovCkBAIC0xMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpCiAKIHZvaWQgdGVzdF9jb3JlX3JlbG9jX3Jhdyh2b2lkKQogewomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvciYjMzQ7KSkKJiM0MzsJCXRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtiYWRfbG9jYWxfaWQmIzM0OykpCiAJCXRlc3RfYmFkX2xvY2FsX2lkKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX2xvYWRfc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfbG9hZF9zaWduYWwuYwpAQCAtMCwwICYjNDM7MSwxMzEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTk9QX0NOVAkJMzI3NjgKJiM0MzsjZGVmaW5lIE1JTl9LSUxMX0RFTEFZX05TCSgxMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsjZGVmaW5lIFJFQVBfVElNRU9VVF9OUwkJKDEwMDBVTEwgKiAxMDAwICogMTAwMCkKJiM0MzsKJiM0MztzdGF0aWMgX191NjQgbW9ub3RvbmljX25zKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiYjNDM7CiYjNDM7CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3RzKTsKJiM0MzsJcmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgJiM0MzsgdHMudHZfbnNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2xlZXBfbnMoX191NjQgZHVyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7CiYjNDM7CQkudHZfc2VjID0gZHVyYXRpb24gLyAxMDAwMDAwMDAwVUxMLAomIzQzOwkJLnR2X25zZWMgPSBkdXJhdGlvbiAlIDEwMDAwMDAwMDBVTEwsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXdoaWxlIChuYW5vc2xlZXAoJmFtcDt0cywgJmFtcDt0cykgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUikKJiM0MzsJCTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dCkKJiM0Mzt7CiYjNDM7CV9fdTY0IGRlYWRsaW5lID0gbW9ub3RvbmljX25zKCkgJiM0MzsgdGltZW91dDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd2FpdHBpZChwaWQsIHN0YXR1cywgV05PSEFORyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0gd2hpbGUgKG1vbm90b25pY19ucygpICZsdDsgZGVhZGxpbmUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBOVUxMOwomIzQzOwlfX3U2NCBzdGFydCwgY29udHJvbF90aW1lLCBraWxsX2RlbGF5OwomIzQzOwlpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTsKJiM0MzsJaW50IHByb2dfZmQgPSAtMSwgc3RhdHVzID0gMDsKJiM0MzsJcGlkX3QgcGlkID0gLTE7CiYjNDM7CWNoYXIgYnl0ZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJaW5zbnMgPSBjYWxsb2MoTk9QX0NOVCAmIzQzOyAyLCBzaXplb2YoKmluc25zKSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihpbnNucywgJiMzNDtjYWxsb2MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOT1BfQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluc25zW2ldID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzEsIEJQRl9SRUdfMSk7CiYjNDM7CWluc25zW05PUF9DTlRdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwlpbnNuc1tOT1BfQ05UICYjNDM7IDFdID0gQlBGX0VYSVRfSU5TTigpOwomIzQzOwomIzQzOwlzdGFydCA9IG1vbm90b25pY19ucygpOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsICYjMzQ7R1BMJiMzNDssCiYjNDM7CQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwljb250cm9sX3RpbWUgPSBtb25vdG9uaWNfbnMoKSAtIHN0YXJ0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2NvbnRyb2xfcHJvZ19sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwljbG9zZShwcm9nX2ZkKTsKJiM0MzsJcHJvZ19mZCA9IC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTk9QX0NOVDsgaSYjNDM7JiM0MzspCiYjNDM7CQlpbnNuc1tpXSA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMCk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHBpcGUocGlwZWZkKSwgJiMzNDtwaXBlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIXBpZCkgewomIzQzOwkJY2xvc2UocGlwZWZkWzBdKTsKJiM0MzsJCWlmICh3cml0ZShwaXBlZmRbMV0sICYjMzQ7eCYjMzQ7LCAxKSAhPSAxKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJY2xvc2UocGlwZWZkWzFdKTsKJiM0MzsJCXByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgJiMzNDtHUEwmIzM0OywKJiM0MzsJCQkJCWluc25zLCBOT1BfQ05UICYjNDM7IDIsIE5VTEwpOwomIzQzOwkJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShwcm9nX2ZkKTsKJiM0MzsJCV9leGl0KHByb2dfZmQgJmx0OyAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlwaXBlZmRbMV0gPSAtMTsKJiM0MzsJcmV0ID0gcmVhZChwaXBlZmRbMF0sICZhbXA7Ynl0ZSwgMSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgMSwgJiMzNDtjaGlsZF9yZWFkeSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcAomIzQzOwkgKiByZW1vdmFsIHBhc3MgaXMgcXVhZHJhdGljLCBzbyBmb3VyIGNvbnRyb2wtbG9hZCB0aW1lcyBzdGlsbCBsZWF2ZXMgYQomIzQzOwkgKiB3aWRlIHdpbmRvdyBpbiB3aGljaCBhbiBhZmZlY3RlZCBrZXJuZWwgaXMgcmV3cml0aW5nIGluc3RydWN0aW9ucy4KJiM0MzsJICovCiYjNDM7CWtpbGxfZGVsYXkgPSBNQVgoY29udHJvbF90aW1lICogNCwgTUlOX0tJTExfREVMQVlfTlMpOwomIzQzOwlzbGVlcF9ucyhraWxsX2RlbGF5KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCAmIzM0O2tpbGwmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXN0YXJ0ID0gbW9ub3RvbmljX25zKCk7CiYjNDM7CXJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsICZhbXA7c3RhdHVzLCBSRUFQX1RJTUVPVVRfTlMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgJiMzNDtwcm9nX2xvYWRfa2lsbGFibGUmIzM0OykpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2NvbnRyb2wgbG9hZCAlbGx1IHVzLCBjaGlsZCBzdGlsbCBhbGl2ZSAlbGx1IHVzIGFmdGVyIFNJR0tJTExcbiYjMzQ7LAomIzQzOwkJCWNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CXBpZCA9IC0xOwomIzQzOwlBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpICZhbXA7JmFtcDsgV1RFUk1TSUcoc3RhdHVzKSA9PSBTSUdLSUxMLAomIzQzOwkJICAgICYjMzQ7a2lsbGVkX2J5X3NpZ2tpbGwmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKHByb2dfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHByb2dfZmQpOwomIzQzOwlpZiAocGlwZWZkWzBdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMF0pOwomIzQzOwlpZiAocGlwZWZkWzFdICZndDs9IDApCiYjNDM7CQljbG9zZShwaXBlZmRbMV0pOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKTsKJiM0MzsJfQomIzQzOwlmcmVlKGluc25zKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY2ZnLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2Nncm91cF9pbnZfcmV0Y29kZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jZ3JvdXBfc2tiLnNrZWwuaCYjMzQ7CkBAIC0xODgsNiAmIzQzOzE4OSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9ic3dhcCh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9ic3dhcCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKHZvaWQpICB7IFJVTih2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKHZvaWQpICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxfbGFyZ2VfaW1tKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9jYWxsYmFja19sb2NrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsYmFja19sb2NrKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX3NrYih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX3NrYik7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVlMDlkZDY2ZjQ2NzgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jCkBAIC0wLDAgJiM0MzsxLDczIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9tYXA7CiYjNDM7CiYjNDM7c3RydWN0IGxvY2tfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGxvY2tfdmFsdWUpOwomIzQzO30gbG9ja19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGNhbGxiYWNrX2N0eCB7CiYjNDM7CXN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LAomIzQzOwkJCQkgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCBzdHJ1Y3QgY2FsbGJhY2tfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtjdHgtJmd0O3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjYWxsYmFja19jdHggY3R4ID0geyAudmFsdWUgPSB2YWx1ZSB9OwomIzQzOwomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19kaWZmZXJlbnRfdmFsdWUsICZhbXA7Y3R4LCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2JwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9jayYjMzQ7KQomIzQzO2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSwKJiM0MzsJCQkgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fbG9jaygmYW1wO3ZhbHVlLSZndDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7dmFsdWUtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksCiYjNDM7CQkJCSBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlicGZfZm9yX2VhY2hfbWFwX2VsZW0oJmFtcDtsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtuZXN0ZWQgY2FsbGJhY2sgY2FuIGxvY2sgaXRzIG93biBtYXAgdmFsdWUmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWJwZl9mb3JfZWFjaF9tYXBfZWxlbSgmYW1wO2xvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmMKaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYwpAQCAtNSw2ICYjNDM7NSw1MCBAQAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZSYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKQomIzQzO19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtcCiYjNDM7CXI4ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV9lbmRdKTtcCiYjNDM7CXI5ID0gKih1MzIgKikocjEgJiM0MzsgJVt4ZHBfbWRfZGF0YV0pO1wKJiM0MzsJcjYgPSByOTtcCiYjNDM7CXI2ICYjNDM7PSA4O1wKJiM0MzsJaWYgcjYgJmd0OyByOCBnb3RvIGxfZXhpdF8lPTtcCiYjNDM7CXIwID0gKih1NjQgKikocjkgJiM0MzsgMCk7XAomIzQzOwlyNCA9IHIwO1wKJiM0MzsJcjQgJmFtcDs9IDE1O1wKJiM0MzsJcjcgPSByMDtcCiYjNDM7CXI3ICZndDsmZ3Q7PSA2MztcCiYjNDM7CWlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgJiM0Mzs9IDQ7XAomIzQzOwlnb3RvIGxfam9pbl8lPTtcCiYjNDM7bF9wYXRoX2JfJT06IFwKJiM0MzsJcjQgJmFtcDs9IDM7XAomIzQzOwlyNCAmIzQzOz0gODtcCiYjNDM7CXIyID0gcjk7XAomIzQzOwlyMiAmIzQzOz0gcjQ7XAomIzQzOwlyMyA9IHIyO1wKJiM0MzsJcjMgLT0gNDtcCiYjNDM7bF9qb2luXyU9OiBcCiYjNDM7CXI1ID0gcjM7XAomIzQzOwlyNSAmIzQzOz0gNDtcCiYjNDM7CWlmIHI1ICZndDsgcjggZ290byBsX2V4aXRfJT07XAomIzQzOwlyMCA9ICoodTY0ICopKHIyICYjNDM7IDApO1wKJiM0MztsX2V4aXRfJT06IFwKJiM0MzsJcjAgPSAwO1wKJiM0MzsJZXhpdDtcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksCiYjNDM7CSAgX19pbW1fY29uc3QoeGRwX21kX2RhdGFfZW5kLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhX2VuZCkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7eGRwJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7WERQIHBrdCByZWFkLCBwa3RfZW5kIG1hbmdsaW5nLCBiYWQgYWNjZXNzIDEmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1IzIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBwa3RfZW5kJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgQlBGIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIOKAkyBgTmVlZHNLTVNBTiA9IHRydWUvZmFsc2VgIOKAkyBhbmQgdG8gZG9jdW1lbnQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhhdCBkZWNpc2lvbiAoYEtNU0FOUmVhc29uaW5nYCkuIEkgbmVlZCB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGVzZSBjaGFuZ2VzIGFjcm9zcyB0aGUgZmlsZXMgcHJvdmlkZWQuCgpGaXJzdCwgSSBzZWUgYSBuZXcgbWVtYmVyLCBgcGt0X3B0cl9kZWx0YWAsIGFuZCBgcGt0X3B0cl9kZWx0YV9zZXRgIGFkZGVkIHRvIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGluIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgdHJhY2tpbmcgcmVsYXRpdmUgZGlzcGxhY2VtZW50cyBvZiBwYWNrZXQgcG9pbnRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHBvdGVudGlhbCBkYXRhIHJhY2VzLgoKSW4gYGtlcm5lbC9icGYvY2ZnLmNgLCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBDb250cm9sIEZsb3cgR3JhcGggKENGRykgdmFsaWRhdGlvbiB0byByZWplY3QgZmFsbHRocm91Z2ggb3V0IG9mIHN1YnByb2dyYW1zLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kLCBzb2xpZCBkZWZlbnNpdmUgbWVhc3VyZSBhZ2FpbnN0IGNvbnRyb2wtZmxvdyBlcnJvcnMuIEl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGEgS01TQU4gY29uY2VybiBkaXJlY3RseSwgYnV0IGEgZmxhd2VkIENGRyBjb3VsZCBsZWFkIHRvIG90aGVyIGlzc3Vlcy4KCk5leHQsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgdGhlIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgZnVuY3Rpb25zIG5vdyBhYm9ydCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZldHkgY2hlY2sgZHVyaW5nIGluc3RydWN0aW9uIG1hbmlwdWxhdGlvbi4gIFdoaWxlIGhhbmRsaW5nIHNpZ25hbHMgaXMgZ2VuZXJhbGx5IGdvb2QgcHJhY3RpY2UsIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZyBhIHN0cm9uZyBLTVNBTiBpbXBsaWNhdGlvbiBoZXJlLCB1bmxlc3MgdGhlIGFib3J0IGxlYXZlcyBzb21ldGhpbmcgaW4gYW4gdW5zYWZlIHN0YXRlLgoKYGtlcm5lbC9icGYvc3RhdGVzLmNgIGludHJvZHVjZXMgYGNoZWNrX3BrdF9wdHJfaWRzYCBhbmQgdXBkYXRlcyBgcmVnc2FmZWAuICBUaGUgYWRkaXRpb24gb2YgdGhlIGBjaGVja19wa3RfcHRyX2lkc2AgZnVuY3Rpb24gYW5kIHRoZSBsb2dpYyB0byB0cmFjayBwYWNrZXQgcG9pbnRlciBkaXNwbGFjZW1lbnQgd2l0aGluIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBzbyBmYXIuIFRoaXMgYXBwZWFycyB0byBiZSBhaW1lZCBhdCBtYWludGFpbmluZyByZWxhdGl2ZSBkaXNwbGFjZW1lbnQgb2YgcGFja2V0IHBvaW50ZXJzIGFjcm9zcyBCUEYgcHJvZ3JhbSB0cmFuc2Zvcm1hdGlvbnMsIGFuZCB0aGlzIG1pZ2h0IGludHJvZHVjZSBzb21lIHBvdGVudGlhbCByaXNrcy4gVGhlIGV4cGxpY2l0IGNoZWNrcyBmb3IgYFMzMl9NSU5gIGFuZCBgUzMyX01BWGAgZm9yIHRoZSBkZWx0YSBhcmUgZ29vZC4gVGhlIGBjaGVja19pZHNgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgYW4gb2xkZXIgY29uc3RydWN0IHRoYXQgdGhpcyBjaGFuZ2UgYnVpbGRzIHVwb24uCgpMZXQgbWUgZXhhbWluZSB3aGVyZSBgc3RydWN0IGJwZl9pZG1hcGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZldGltZSBhbmQgc2NvcGUgb2YgdGhpcyBuZXcgcGFja2V0IHBvaW50ZXIgdHJhY2tpbmcuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBrZXJuZWwgY29kZSBmb3IgYWxsb2NhdGlvbnMgYW5kIHVzZXMgb2YgdGhpcyBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIHBvcHVsYXRlZCBhbmQgZGVhbGxvY2F0ZWQgYW5kIHdobyBoYXMgYWNjZXNzIHRvIGl0LiBBbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgZGF0YSBhY2Nlc3Mgcmlza3Mgd2l0aGluIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgYSBtYWpvciBjb25jZXJuIGZvciBLTVNBTi4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gb2YgdGhpcyBtYXAuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgYmUgZm9jdXNpbmcgbXkgS01TQU4gYW5hbHlzaXMuCgpGaW5hbGx5LCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgSSBzZWUgYSBmdW5jdGlvbiBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHlgLiBJdCBhcHBlYXJzIHRvIGFkZHJlc3MgbG9jayBpZGVudGl0eSBpbiBjYWxsYmFja3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBhcnJheSBtYXBzLiBJdCBjaGVja3MgdG8gc2VlIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVsZW1lbnQgaW4gdGhlIG1hcCBhbmQgdGhlIG1hcCBpcyBvZiB0eXBlIGBCUEZfTUFQX1RZUEVfQVJSQVlgLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGNhbGxlZS0mZ3Q7cmVnc1tCUEZfUkVHXzNdLmlkID0gJiM0MzsmIzQzO2Vudi0mZ3Q7aWRfZ2VuO2AgdG8gYXNzaWduIGFuIElEIHRvIGEgcmVnaXN0ZXIgcG9pbnRpbmcgdG8gYSBzcGlubG9jayBpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIHRoZSBtYXAgZG9lc24mIzM5O3QgaGF2ZSBhIHN0YXRpYyBpZGVudGl0eS4gVGhpcyBhcHBlYXJzIHJlbGV2YW50IGZvciBwcm90ZWN0aW5nIHNwaW5sb2NrcyBpbiB0aGUgY29udGV4dCBvZiBjYWxsYmFja3MuIFRoZSBLTVNBTiBpbXBsaWNhdGlvbnMgYXJlIGxlc3Mgb2J2aW91cyBoZXJlLCBidXQgSSBtdXN0IG5vdCBkaXNjb3VudCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBwb2ludGVyIG1hbmlwdWxhdGlvbi4KClRoZSBzZWxmdGVzdHMgYXJlIGEgZ29vZCBzaWduOyBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGVtIHRvIHNlZSB3aGF0IHNjZW5hcmlvcyB0aGV5IGNvdmVyLiBUZXN0cyBmb3Igc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwcm9ncmFtIGxvYWQsIGNhbGxiYWNrIGxvY2sgaWRlbnRpdHksIGNvcmUgcmVsb2MgcmF3LCBhbmQgeGRwIHJlZ3NhZmUgYWxsIHNlZW0gcmVsZXZhbnQgdG8gcG90ZW50aWFsIGRhdGEgcmFjZSBpc3N1ZXMuCgpPdmVyYWxsLCB0aGUgcGFja2V0IHBvaW50ZXIgdHJhY2tpbmcgYW5kIHRoZSBzcGlubG9jayBwcm90ZWN0aW9uIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXJlYXMgdG8gcmVxdWlyZSBjYXJlZnVsIHNjcnV0aW55IGZvciBLTVNBTiwgYW5kIG15IGBncmVwcGVyYCBzZWFyY2ggZm9yIGBzdHJ1Y3QgYnBmX2lkbWFwYCB3aWxsIGJlIGNydWNpYWwgdG8gZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGBOZWVkc0tNU0FOYCB2YWx1ZSBhbmQgd3JpdGluZyB0aGUgYEtNU0FOUmVhc29uaW5nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJwZl9pZG1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTg1ND1zdHJ1Y3QgYnBmX2lkX3BhaXIge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtODYwLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDo4NjE6c3RydWN0IGJwZl9pZG1hcCB7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTg2Mi1cdHUzMiB0bXBfaWRfZ2VuO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTIwPXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTk2Ny1cdHVuaW9uIHtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6OTY4Olx0XHRzdHJ1Y3QgYnBmX2lkbWFwIGlkbWFwX3NjcmF0Y2g7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTk2OS1cdFx0c3RydWN0IGJwZl9pZHNldCBpZHNldF9zY3JhdGNoO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MzAyPXN0YXRpYyBib29sIHJhbmdlX3dpdGhpbihjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMzE4LSAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzozMTk6c3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMjAte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MzU2PXN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzozNTg6XHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1OS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTctICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQxODpzdGF0aWMgYm9vbCBjaGVja19zY2FsYXJfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTkte1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NTI2PXN0YXRpYyBib29sIHJlZ3NfZXhhY3QoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUyNy1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1Mjg6XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI5LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTU0Mj1zdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDM6XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0NC1cdFx0ICAgIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03Mzc9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3Mzg6XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzM5LVx0XHQgICAgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9ODgyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4ODM6XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxua2VybmVsL2JwZi9zdGF0ZXMuYy04ODQtXHRcdFx0ICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5MDU6XHRcdCAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTA2LXtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEwMDc9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDA4LXtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwOTpcdHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTAtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0Mjc9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Mzc6c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDM4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ1NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDU1OnN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ1Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0NjQ9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjctXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Njg6XHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ2OS1cdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLZXJuZWwgQlBGIFN0YXRlIE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGNoZWNrX2lkc2AgYW5kIGByZXNldF9pZG1hcF9zY3JhdGNoYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIGtlcm5lbCBpcyBtYW5hZ2luZyBpdHMgaW50ZXJuYWwgc3RhdGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgSUQgbWFwcGluZy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGFuZCBzdGFydCBkaWdnaW5nLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgY2hlY2tpbmcgYW5kIHBvdGVudGlhbGx5IHJlc2V0dGluZyB0aGUgSUQgbWFwIHNjcmF0Y2ggYXJlYSBsaXZlcy4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IElEcyBhcmUgdmFsaWRhdGVkLCBwb3RlbnRpYWxseSByZS1tYXBwZWQsIGFuZCBob3cgdGVtcG9yYXJ5IHNjcmF0Y2ggc3BhY2UgaXMgaGFuZGxlZCB0byBrZWVwIHRoZSBCUEYgZXhlY3V0aW9uIGVudmlyb25tZW50IGNsZWFuIGFuZCBjb3JyZWN0LiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBrZXkgdG8gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyZSBhbmQgZWZmaWNpZW50IEJQRiBwcm9ncmFtIGV4ZWN1dGlvbjsgdGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdHtcbiAzMjE6XHRcdHN0cnVjdCBicGZfaWRfcGFpciAqbWFwID0gaWRtYXAtXHUwMDNlbWFwO1xuIDMyMjpcdFx0dW5zaWduZWQgaW50IGk7XG4gMzIzOlx0XG4gMzI0Olx0XHQvKiBlaXRoZXIgYm90aCBJRHMgc2hvdWxkIGJlIHNldCBvciBib3RoIHNob3VsZCBiZSB6ZXJvICovXG4gMzI1Olx0XHRpZiAoISFvbGRfaWQgIT0gISFjdXJfaWQpXG4gMzI2Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzMjc6XHRcbiAzMjg6XHRcdGlmIChvbGRfaWQgPT0gMCkgLyogY3VyX2lkID09IDAgYXMgd2VsbCAqL1xuIDMyOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzMzA6XHRcbiAzMzE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGlkbWFwLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspIHtcbiAzMzI6XHRcdFx0aWYgKG1hcFtpXS5vbGQgPT0gb2xkX2lkKVxuIDMzMzpcdFx0XHRcdHJldHVybiBtYXBbaV0uY3VyID09IGN1cl9pZDtcbiAzMzQ6XHRcdFx0aWYgKG1hcFtpXS5jdXIgPT0gY3VyX2lkKVxuIDMzNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdC8qIFJlYWNoZWQgdGhlIGVuZCBvZiBrbm93biBtYXBwaW5nczsgaGF2ZW4mIzM5O3Qgc2VlbiB0aGlzIGlkIGJlZm9yZSAqL1xuIDMzOTpcdFx0aWYgKGlkbWFwLVx1MDAzZWNudCBcdTAwM2MgQlBGX0lEX01BUF9TSVpFKSB7XG4gMzQwOlx0XHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLm9sZCA9IG9sZF9pZDtcbiAzNDE6XHRcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0uY3VyID0gY3VyX2lkO1xuIDM0MjpcdFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5wa3RfcHRyX2RlbHRhX3NldCA9IGZhbHNlO1xuIDM0MzpcdFx0XHRpZG1hcC1cdTAwM2VjbnQmIzQzOyYjNDM7O1xuIDM0NDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAzNDU6XHRcdH1cbiAzNDY6XHRcbiAzNDc6XHRcdC8qXG4gMzQ4Olx0XHQgKiBpZG1hcCBzbG90cyBhcmUgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycyBhbmQgc3RhY2sgc2xvdHMuXG4gMzQ5Olx0XHQgKiBTaW5jZSByZWZlcmVuY2VkIGR5bnB0cnMgYWNxdWlyZSBpbnRlcm1lZGlhdGUgcmVmZXJlbmNlcyB0aGF0IGRvXG4gMzUwOlx0XHQgKiBub3QgbGl2ZSBpbiBlaXRoZXIsIHNvIHRoZSBtYXAgY2FuIGJlIGV4aGF1c3RlZC4gU2luY2UgaXQgaXMgdW5saWtlbHksXG4gMzUxOlx0XHQgKiBmYWlsIHRoZSB2ZXJpZmljYXRpb24gYnkgdHJlYXRpbmcgdGhlIHN0YXRlcyBhcyBub3QgZXF1aXZhbGVudC5cbiAzNTI6XHRcdCAqL1xuIDM1MzpcdFx0cmV0dXJuIGZhbHNlO1xuIDM1NDpcdH1cbiAzNTU6XHRcbiAzNTY6XHRzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuIDM1NzpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXG4gMzU4Olx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gMzU5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGByZXNldF9pZG1hcF9zY3JhdGNoYCoqCgpSaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSwgYW5kIEkgcmVhbGx5IG1lYW4gaXQsIHRvIGFsc28gc2NydXRpbml6ZSBgcmVzZXRfaWRtYXBfc2NyYXRjaGAuIEl0JiMzOTtzIGVhc3kgdG8gZm9jdXMgb24gdGhlIHByaW1hcnkgaXNzdWUsIGJ1dCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCB0aGVzZSBzZWVtaW5nbHkgcGVyaXBoZXJhbCBmdW5jdGlvbnMgY2FuIG9mdGVuIGhhcmJvciBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cyB0aGF0IHVsdGltYXRlbHkgYml0ZSB5b3UgaW4gdGhlIHJlYXIgbGF0ZXIuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiB0aGUgY29yZSBsb2dpYywgYnV0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIGByZXNldF9pZG1hcF9zY3JhdGNoYCBjb3VsZCBwcmV2ZW50IGEgd29ybGQgb2YgaHVydCBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGludm9sdmVkIGluIGFueSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwIHByb2NlZHVyZXMuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl0JiMzOTtzIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGV2ZW4gaWYgaXQgc2VlbXMgdW5yZWxhdGVkIGF0IGZpcnN0IGdsYW5jZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGFuZCB0aGF0IHdhcnJhbnRzIGFuIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwNTpcdH1cbjEwMDY6XHRcbjEwMDc6XHRzdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4xMDA4Olx0e1xuMTAwOTpcdFx0c3RydWN0IGJwZl9pZG1hcCAqaWRtYXAgPSBcdTAwMjZlbnYtXHUwMDNlaWRtYXBfc2NyYXRjaDtcbjEwMTA6XHRcbjEwMTE6XHRcdGlkbWFwLVx1MDAzZXRtcF9pZF9nZW4gPSBlbnYtXHUwMDNlaWRfZ2VuO1xuMTAxMjpcdFx0aWRtYXAtXHUwMDNlY250ID0gMDtcbjEwMTM6XHR9XG4xMDE0Olx0XG4xMDE1Olx0c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMDE2Olx0XHRcdFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcbjEwMTc6XHRcdFx0XHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxuMTAxODpcdFx0XHRcdCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxuMTAxOTpcdHtcbjEwMjA6XHRcdHUzMiBpbnNuX2lkeDtcbjEwMjE6XHRcdGludCBpO1xuMTAyMjpcdFxuMTAyMzpcdFx0aWYgKG9sZC1cdTAwM2VjdXJmcmFtZSAhPSBjdXItXHUwMDNlY3VyZnJhbWUpXG4xMDI0Olx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBpZHN0YWNrX3B1c2hgIGFuZCBgaWRzdGFja19wb3BgIHdpdGggUmVzcGVjdCB0byBgaWRtYXBfc2NyYXRjaGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgYGlkc3RhY2tfcHVzaGAgYW5kIGBpZHN0YWNrX3BvcGAgaW50ZXJhY3Qgd2l0aCBgaWRtYXBfc2NyYXRjaGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgYGlkbWFwX3NjcmF0Y2hgIGxpa2VseSBzZXJ2ZXMgYXMgYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50ICpob3cqIGl0JiMzOTtzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGVzZSBzdGFjayBvcGVyYXRpb25zLiBJcyBpdCBhIHN0YWdpbmcgYXJlYSBmb3IgSURzIGJlZm9yZSBiZWluZyBwbGFjZWQgb24gdGhlIHN0YWNrPyBJcyBpdCB1c2VkIGZvciB2YWxpZGF0aW9uIG9yIGNvbmZsaWN0IGRldGVjdGlvbiBkdXJpbmcgcHVzaC9wb3Agb3BlcmF0aW9ucz8gT3IgcGVyaGFwcyBpdCBoYW5kbGVzIHRlbXBvcmFyeSBzdG9yYWdlIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGJlaW5nICYjMzQ7cG9wcGVkJiMzNDsgYW5kIGxhdGVyIHB1dCBzb21ld2hlcmUgZWxzZT8KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaGludHMgcmVnYXJkaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIENvdWxkIGNvbmN1cnJlbnQgY2FsbHMgdG8gdGhlc2Ugc3RhY2sgZnVuY3Rpb25zIGxlYWQgdG8gY29ycnVwdGlvbiBvZiBkYXRhIGluIGBpZG1hcF9zY3JhdGNoYD8gQXJlIHRoZXJlIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2wgbWVhc3VyZXM/IFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZXNlIHRoaW5ncyB3aWxsIGd1aWRlIG15IGFzc2Vzc21lbnQgb2YgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHNvdW5kbmVzcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNlZSBpZiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWx0ZXIgdGhlIHZhbHVlLCBpbiBhbnkgd2F5LCBvZiBgaWRtYXBfc2NyYXRjaGAuIFRoaXMgd2lsbCB0ZWxsIG1lIG1vcmUgYWJvdXQgaXRzIGV4cGVjdGVkIGJlaGF2aW91ci4KCkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcywgZm9jdXNpbmcgb24gaG93IGBpZG1hcF9zY3JhdGNoYCBpcyBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gdGhlIHN0YWNrIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgSSBuZWVkIHRvIGJlIGV4YWN0LCBzbyB0aGF0IEkgY2FuIHRoZW4gYXBwbHkgdGhpcyBrbm93bGVkZ2UgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQgc2VlIGlmIGl0IGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiBhIHNpbWlsYXIgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTQzMDpcdFxuOTQzMTpcdFx0ZXJyID0gX19yZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xuOTQzMjpcdFx0aWYgKCFlcnIpXG45NDMzOlx0XHRcdGJwZl9kaWFnX3JlY29yZF9yZWZfcmVsZWFzZShlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgaWQpO1xuOTQzNDpcdFx0cmV0dXJuIGVycjtcbjk0MzU6XHR9XG45NDM2Olx0XG45NDM3Olx0c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcbjk0Mzg6XHR7XG45NDM5Olx0XHRpbnQgaTtcbjk0NDA6XHRcbjk0NDE6XHRcdGlmICghaWQpXG45NDQyOlx0XHRcdHJldHVybiAwO1xuOTQ0MzpcdFxuOTQ0NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpJiM0MzsmIzQzOylcbjk0NDU6XHRcdFx0aWYgKGlkbWFwLVx1MDAzZW1hcFtpXS5vbGQgPT0gaWQpXG45NDQ2Olx0XHRcdFx0cmV0dXJuIDA7XG45NDQ3Olx0XG45NDQ4Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGlkbWFwLVx1MDAzZWNudCBcdTAwM2U9IEJQRl9JRF9NQVBfU0laRSkpXG45NDQ5Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuOTQ1MDpcdFxuOTQ1MTpcdFx0aWRtYXAtXHUwMDNlbWFwW2lkbWFwLVx1MDAzZWNudCYjNDM7JiM0MztdLm9sZCA9IGlkO1xuOTQ1MjpcdFx0cmV0dXJuIDA7XG45NDUzOlx0fVxuOTQ1NDpcdFxuOTQ1NTpcdHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG45NDU2Olx0e1xuOTQ1NzpcdFx0aWYgKCFpZG1hcC1cdTAwM2VjbnQpXG45NDU4Olx0XHRcdHJldHVybiAwO1xuOTQ1OTpcdFxuOTQ2MDpcdFx0cmV0dXJuIGlkbWFwLVx1MDAzZW1hcFstLWlkbWFwLVx1MDAzZWNudF0ub2xkO1xuOTQ2MTpcdH1cbjk0NjI6XHRcbjk0NjM6XHQvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi9cbjk0NjQ6XHRzdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZClcbjk0NjU6XHR7XG45NDY2Olx0XHR1MzIgbWFzayA9ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfRFlOUFRSKTtcbjk0Njc6XHRcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG45NDY4Olx0XHRzdHJ1Y3QgYnBmX2lkbWFwICppZHN0YWNrID0gXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2g7XG45NDY5Olx0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODEKCQkJCQkJCW91dHB1dDogMjkxCgkJCQkJCQl0aG91Z2h0czogODI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgcGllY2UgYnkgcGllY2UgYW5kIGFzc2VzcyB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBLTVNBTi4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBsZWFrZWQgdG8gdXNlcnNwYWNlLCBvciBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpGaXJzdCwgdGhlIGBicGZfaWRfcGFpcmAgc3RydWN0dXJlIHVwZGF0ZXMsIGluY2x1ZGluZyB0aGUgbmV3IGZpZWxkcyBgcGt0X3B0cl9kZWx0YWAgYW5kIGBwa3RfcHRyX2RlbHRhX3NldGAsIHNlZW0gc2FmZS4gVGhlIGluaXRpYWxpemF0aW9uIG9mIGBwa3RfcHRyX2RlbHRhX3NldGAgdG8gYGZhbHNlYCB3aXRoaW4gYGNoZWNrX2lkc2AgYW5kIHRoZSBzdWJzZXF1ZW50IHNldHRpbmcgb2YgYHBrdF9wdHJfZGVsdGFgIHdpdGhpbiBgY2hlY2tfcGt0X3B0cl9pZHNgIGVuc3VyZXMgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgc2V0cyB0aGVzZSBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vIHNjZW5hcmlvIHdoZXJlIHRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIGBpZG1hcGAgaXMgcHJvcGVybHkgbWFuYWdlZCB3aXRoaW4gYGVudi0mZ3Q7aWRtYXBfc2NyYXRjaGAuIFNvLCBubyBjb25jZXJucyBoZXJlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCk5leHQsIHRoZSBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvY2ZnLmNgIHdpdGggdGhlIGBwdXNoX2luc24oKWAgbG9naWMsIHdoaWNoIGlzIGp1c3Qgc3RhbmRhcmQgbG9naWMgdmFsaWRhdGlvbiBvbiB0aGUgQlBGIENGRywgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBqdXN0IGEgY29udHJvbCBmbG93IHZlcmlmaWNhdGlvbi4KClRoZSBhZGRpdGlvbiBvZiBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCB3aXRoaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgIGFuZCBpdHMgdXNlIGluIGBicGZfcGF0Y2hfaW5zbl9kYXRhKClgIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zKClgIGlzIGFsbCBhYm91dCBoYW5kbGluZyBwb3RlbnRpYWwgc2lnbmFsIGludGVycnVwdGlvbnMuIFRoZSBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYXZvaWQgbG9uZyBzdGFsbHMgYW5kIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGdldHRpbmcgc3R1Y2suIFRoaXMgZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3BlcmF0aW9ucywgZWl0aGVyLgoKVGhlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIGludHJvZHVjZSBkaXN0aW5jdCBgaWRgIGFzc2lnbm1lbnRzIGZvciBjYWxsYmFjayBtYXAgcG9pbnRlcnMgd2hlbiBzcGVjaWZpYyBjb25kaXRpb25zIGFyZSBtZXQsIGFyZSBhbGwgYWJvdXQgc3RhdGUgdHJhY2tpbmcgd2l0aGluIHRoZSB2ZXJpZmllci4gVGhpcyBpcyBhIGNydWNpYWwgbWVjaGFuaXNtIHRvIHByZXZlbnQgcG90ZW50aWFsIGluY29ycmVjdCB1bmxvY2tpbmcgb2Ygc3BpbiBsb2Nrcy4gVGhlIGNvbmRpdGlvbnMgd2hlcmUgaXQgc2V0cyB0aGVzZSBJRHMgYXJlIGNhcmVmdWxseSB2ZXJpZmllZC4gU28sIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBkaXN0aW5jdCBgaWRgIGJhc2VkIG9uIGByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9ja2AgYW5kIHRoZSBtYXAgdmFsdWUgbm90IGJlaW5nIGEgb25lLWVsZW1lbnQgYXJyYXksIGFsc28gYXBwZWFycyBzYWZlIGFuZCBmb2N1c2VkIG9uIHRyYWNraW5nIHZlcmlmaWVyIHN0YXRlLgoKVGhlIGluY2x1c2lvbiBvZiB0aGUgc2VsZnRlc3RzIGNvdmVyaW5nIHRoZSBjaGFuZ2VzIGFuZCB0aGUgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBgYnBmX3Byb2dfbG9hZGAgaXMgaW1wb3J0YW50IGJ1dCBjb25maXJtcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGRlc2NyaWJlZCBsb2dpYy4KCkZpbmFsbHksIHRoZSBLTVNBTiBjcml0ZXJpYS4gQWZ0ZXIgY29uc2lkZXJpbmcgdGhlc2UgY2hhbmdlczogSSBhbSBjb25maWRlbnQgdGhhdCB0aGVzZSBwYXRjaGVzICoqZG8gbm90KiogaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0LiBUaGVyZSYjMzk7cyBubyByaXNrIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvZ2ljYWwgdmFsaWRhdGlvbiwgdmVyaWZpZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIEJQRiBvcGVyYXRpb25zLCBub3QgcmF3IG1lbW9yeSBtYW5pcHVsYXRpb24uIFRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmIGVuZm9yY2VzIHR5cGUgc2FmZXR5IGFuZCBib3VuZHMgY2hlY2tzIG9uIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgYSB2ZXJ5IHJvYnVzdCBtZWNoYW5pc20gZm9yIGVuc3VyaW5nIG92ZXJhbGwgbWVtb3J5IHNhZmV0eS4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGVzdGluZyB3aWxsIGJlIHN1ZmZpY2llbnQgaGVyZS4KCkkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTjogZmFsc2VgIGluIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgQ0ZHIGFuYWx5c2lzIGluIHNldmVyYWwgYXJlYXM6XG4xLiBBZGRzIHBhY2tldCBwb2ludGVyIGRpc3BsYWNlbWVudCB0cmFja2luZyBhY3Jvc3Mgc3RhdGUgZXF1aXZhbGVuY2UgY2hlY2tzIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCAodXNpbmcgYGNoZWNrX3BrdF9wdHJfaWRzYCBhbmQgaW5pdGlhbGl6aW5nIGBwa3RfcHRyX2RlbHRhX3NldGAgaW4gYGNoZWNrX2lkc2ApLlxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxuMy4gQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGApIHRvIHByZXZlbnQgbm9uLWtpbGxhYmxlIGxvb3BzIGR1cmluZyBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiBwYXRjaGluZy9yZW1vdmFsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cbjQuIEVuc3VyZXMgZGlzdGluY3QgcmVnaXN0ZXIgSURzIGZvciBjYWxsYmFjayBtYXAgdmFsdWVzIHRoYXQgbWF5IHBvaW50IHRvIHNwaW4gbG9ja3MgdW5sZXNzIHRoZSBtYXAgaGFzIHN0YXRpYyBpZGVudGl0eSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS4gQWxsIHN0cnVjdCBmaWVsZHMgYWRkZWQgKGBwa3RfcHRyX2RlbHRhYCwgYHBrdF9wdHJfZGVsdGFfc2V0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHZlcmlmaWVyIGxvZ2ljLCBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYW5kIHNpZ25hbC1oYW5kbGluZyBpbXByb3ZlbWVudHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBDRkcgYW5hbHlzaXMgaW4gc2V2ZXJhbCBhcmVhczpcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXG4yLiBWYWxpZGF0ZXMgc3VicHJvZ3JhbSBib3VuZGFyaWVzIG9uIGZhbGwtdGhyb3VnaCBlZGdlcyBpbiBga2VybmVsL2JwZi9jZmcuY2AuXG4zLiBBZGRzIGZhdGFsIHNpZ25hbCBjaGVja3MgKGBicGZfcmV3cml0ZV9tdXN0X2Fib3J0YCkgdG8gcHJldmVudCBub24ta2lsbGFibGUgbG9vcHMgZHVyaW5nIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHBhdGNoaW5nL3JlbW92YWwgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLlxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLiBBbGwgc3RydWN0IGZpZWxkcyBhZGRlZCAoYHBrdF9wdHJfZGVsdGFgLCBgcGt0X3B0cl9kZWx0YV9zZXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgdmVyaWZpZXIgbG9naWMsIGNvbnRyb2wtZmxvdyB2YWxpZGF0aW9uLCBhbmQgc2lnbmFsLWhhbmRsaW5nIGltcHJvdmVtZW50cy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoxMi44OTA3MDAwMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1OTIzMzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja19jZmdcIixcbiAgICBcInB1c2hfaW5zblwiLFxuICAgIFwiYnBmX3BhdGNoX2luc25fZGF0YVwiLFxuICAgIFwidmVyaWZpZXJfcmVtb3ZlX2luc25zXCIsXG4gICAgXCJjaGVja19wa3RfcHRyX2lkc1wiLFxuICAgIFwicmVnc2FmZVwiLFxuICAgIFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgICBcIm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJnc1wiLFxuICAgIFwic2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlXCIsXG4gICAgXCJzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgQ0ZHIGFuYWx5c2lzIGluIHNldmVyYWwgYXJlYXM6XFxuMS4gQWRkcyBwYWNrZXQgcG9pbnRlciBkaXNwbGFjZW1lbnQgdHJhY2tpbmcgYWNyb3NzIHN0YXRlIGVxdWl2YWxlbmNlIGNoZWNrcyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AgKHVzaW5nIGBjaGVja19wa3RfcHRyX2lkc2AgYW5kIGluaXRpYWxpemluZyBgcGt0X3B0cl9kZWx0YV9zZXRgIGluIGBjaGVja19pZHNgKS5cXG4yLiBWYWxpZGF0ZXMgc3VicHJvZ3JhbSBib3VuZGFyaWVzIG9uIGZhbGwtdGhyb3VnaCBlZGdlcyBpbiBga2VybmVsL2JwZi9jZmcuY2AuXFxuMy4gQWRkcyBmYXRhbCBzaWduYWwgY2hlY2tzIChgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydGApIHRvIHByZXZlbnQgbm9uLWtpbGxhYmxlIGxvb3BzIGR1cmluZyBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiBwYXRjaGluZy9yZW1vdmFsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cXG40LiBFbnN1cmVzIGRpc3RpbmN0IHJlZ2lzdGVyIElEcyBmb3IgY2FsbGJhY2sgbWFwIHZhbHVlcyB0aGF0IG1heSBwb2ludCB0byBzcGluIGxvY2tzIHVubGVzcyB0aGUgbWFwIGhhcyBzdGF0aWMgaWRlbnRpdHkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS4gQWxsIHN0cnVjdCBmaWVsZHMgYWRkZWQgKGBwa3RfcHRyX2RlbHRhYCwgYHBrdF9wdHJfZGVsdGFfc2V0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHZlcmlmaWVyIGxvZ2ljLCBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYW5kIHNpZ25hbC1oYW5kbGluZyBpbXByb3ZlbWVudHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGV4ZWN1dGlvbiBwYXRocywgaW5jbHVkaW5nIGNvbnRyb2wgZmxvdyBncmFwaCAoQ0ZHKSBzdWJwcm9ncmFtIGJvdW5kYXJ5IGNoZWNrcywgc2lnbmFsLWF3YXJlIGluc3RydWN0aW9uIHJld3JpdGluZy9yZW1vdmFsIHBhc3NlcywgcGFja2V0IHBvaW50ZXIgc3RhdGUgZXF1aXZhbGVuY2UgY29tcGFyaXNvbiAocmVnc2FmZSksIGFuZCBsb2NrIGlkZW50aXR5IHRyYWNraW5nIGZvciBjYWxsYmFjayBhcmd1bWVudHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FELCAuLi4pIHN5c2NhbGwgYW5kIGRpcmVjdGx5IGFmZmVjdCB2ZXJpZmljYXRpb24gY29ycmVjdG5lc3MgYW5kIHNhZmV0eSBpbnZhcmlhbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoxMi44OTA3MDU1MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjYwNDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyZWMyYTM4ZTk4M2JhMDAyNDMxZmZiNWJiMTc3MDdjNzM2MGRjZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxMToyMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDM2YjY1Nzk3ODc3ZDAuLjVjZjkyY2UxODUyMDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtODU0LDYgKzg1NCw4IEBAIHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUge1xcbiBzdHJ1Y3QgYnBmX2lkX3BhaXIge1xcbiBcXHR1MzIgb2xkO1xcbiBcXHR1MzIgY3VyO1xcbitcXHRzMzIgcGt0X3B0cl9kZWx0YTtcXG4rXFx0Ym9vbCBwa3RfcHRyX2RlbHRhX3NldDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfaWRtYXAge1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xcbmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xcbisrKyBiL2tlcm5lbC9icGYvY2ZnLmNcXG5AQCAtMTAyLDYgKzEwMiw3IEBAIGVudW0ge1xcbiAgKi9cXG4gc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZztcXG4gXFx0aW50ICppbnNuX3N0YWNrID0gZW52LVxcdTAwM2VjZmcuaW5zbl9zdGFjaztcXG4gXFx0aW50ICppbnNuX3N0YXRlID0gZW52LVxcdTAwM2VjZmcuaW5zbl9zdGF0ZTtcXG4gXFxuQEAgLTEyMSw2ICsxMjIsMjYgQEAgc3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGNoZWNrX3N1YnByb2dzKCkgcHJldmVudHMgY29udHJvbCBmbG93IGZyb20gZmFsbGluZyB0aHJvdWdoIGFcXG4rXFx0ICogc3VicHJvZ3JhbSBib3VuZGFyeSwgYnV0IHJ1bnMgYmVmb3JlIENPLVJFIHJlbG9jYXRpb25zIGNhbiByZXdyaXRlIGFuXFxuK1xcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cXG4rXFx0ICogYmVmb3JlIGNvbnN0cnVjdGluZyB0aGUgQ0ZHIHVzZWQgYnkgbGF0ZXIgcGVyLXN1YnByb2dyYW0gcGFzc2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcXG4rXFx0XFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xcbitcXHRcXHRpZiAodyBcXHUwMDNjIHN1YnByb2ctXFx1MDAzZXN0YXJ0IHx8IHcgXFx1MDAzZT0gKHN1YnByb2cgKyAxKS1cXHUwMDNlc3RhcnQpIHtcXG4rXFx0XFx0XFx0dmVyYm9zZV9saW5mbyhlbnYsIHQsIFxcXCIlZDogXFxcIiwgdCk7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxcXFxuXFxcIiwgdCwgdyk7XFxuK1xcdFxcdFxcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxcbitcXHRcXHRcXHRcXHRlbnYsIHQsIFxcXCJmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiS2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCJJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXFxcIixcXG4rXFx0XFx0XFx0XFx0dCwgdyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChlID09IEJSQU5DSCkge1xcbiBcXHRcXHQvKiBtYXJrIGJyYW5jaCB0YXJnZXQgZm9yIHN0YXRlIHBydW5pbmcgKi9cXG4gXFx0XFx0bWFya19wcnVuZV9wb2ludChlbnYsIHcpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JzZWFyY2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3hkcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZGlzYXNtLmhcXFwiXFxuIFxcbkBAIC0zMDYsMTIgKzMwNywyOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXFxuIFxcdH1cXG4gfVxcbiBcXG4rLypcXG4rICogU29tZSBwb3N0LXZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbiByZXdyaXRpbmcgcGFzc2VzIHJlcXVpcmUgYW5cXG4rICogTyhwcm9nLVxcdTAwM2VsZW4pIG9wZXJhdGlvbiBwZXIgaW5zdHJ1Y3Rpb24uIEtlZXAgdGhlaXIgc2hhcmVkIHByaW1pdGl2ZXNcXG4rICoga2lsbGFibGUgYW5kIHByZWVtcHRpYmxlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCh2b2lkKVxcbit7XFxuK1xcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpuZXdfZGF0YSA9IE5VTEw7XFxuIFxcbitcXHRpZiAoYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuIFxcdGlmIChsZW4gXFx1MDAzZSAxKSB7XFxuIFxcdFxcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgYXJyYXlfc2l6ZShlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbiArIGxlbiAtIDEsXFxuQEAgLTUyMyw2ICs1NDAsOSBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxcbiBcXHR1bnNpZ25lZCBpbnQgb3JpZ19wcm9nX2xlbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4rXFxuIFxcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgpKVxcbiBcXHRcXHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcXG4gXFxuQEAgLTI2NjYsNCArMjY4NiwzIEBAIGludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuaW5kZXggNjZmYjExYjZjNmE3Ni4uMmY4ZjNmZTE2NGIwMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXFxuKysrIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xcbkBAIC0zMzksNiArMzM5LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbiBcXHRpZiAoaWRtYXAtXFx1MDAzZWNudCBcXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xcbiBcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0ub2xkID0gb2xkX2lkO1xcbiBcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0uY3VyID0gY3VyX2lkO1xcbitcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcXG4gXFx0XFx0aWRtYXAtXFx1MDAzZWNudCsrO1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbkBAIC0zNTIsNiArMzUzLDQzIEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2lkX3BhaXIgKm1hcCA9IGlkbWFwLVxcdTAwM2VtYXA7XFxuK1xcdHM2NCBkZWx0YTtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRpZiAoIWNoZWNrX2lkcyhvbGQtXFx1MDAzZWlkLCBjdXItXFx1MDAzZWlkLCBpZG1hcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFvbGQtXFx1MDAzZWlkKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBhY2tldCByYW5nZSBpcyBzaGFyZWQgYnkgYWxsIHBvaW50ZXJzIHdpdGggdGhlIHNhbWUgSUQuIFByZXNlcnZlXFxuK1xcdCAqIHRoZWlyIHJlbGF0aXZlIGRpc3BsYWNlbWVudCwgd2hpbGUgYWxsb3dpbmcgdGhlIHdob2xlIGNsYXNzIHRvIG1vdmUuXFxuK1xcdCAqIFBhY2tldCBwb2ludGVyIG9mZnNldHMgYXJlIGJvdW5kZWQgYnkgQlBGX01BWF9WQVJfT0ZGLCBzbyB0aGUgZGVsdGFcXG4rXFx0ICogYmV0d2VlbiB0d28gdmFsaWQgb2Zmc2V0cyBmaXRzIGluIHMzMi5cXG4rXFx0ICovXFxuK1xcdGRlbHRhID0gKHM2NCkoY3VyLVxcdTAwM2VyNjQuYmFzZSAtIG9sZC1cXHUwMDNlcjY0LmJhc2UpO1xcbitcXHRpZiAoZGVsdGEgXFx1MDAzYyBTMzJfTUlOIHx8IGRlbHRhIFxcdTAwM2UgUzMyX01BWClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRpZiAobWFwW2ldLm9sZCAhPSBvbGQtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCFtYXBbaV0ucGt0X3B0cl9kZWx0YV9zZXQpIHtcXG4rXFx0XFx0XFx0bWFwW2ldLnBrdF9wdHJfZGVsdGEgPSBkZWx0YTtcXG4rXFx0XFx0XFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIG1hcFtpXS5wa3RfcHRyX2RlbHRhID09IGRlbHRhO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qXFxuICAqIENvbXBhcmUgc2NhbGFyIHJlZ2lzdGVyIElEcyBmb3Igc3RhdGUgZXF1aXZhbGVuY2UuXFxuICAqXFxuQEAgLTYzMiw4ICs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbiBcXHRcXHR9IGVsc2UgaWYgKHJvbGQtXFx1MDAzZXJhbmdlIFxcdTAwM2UgcmN1ci1cXHUwMDNlcmFuZ2UpIHtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdC8qIGlkIHJlbGF0aW9ucyBtdXN0IGJlIHByZXNlcnZlZCAqL1xcbi1cXHRcXHRpZiAoIWNoZWNrX2lkcyhyb2xkLVxcdTAwM2VpZCwgcmN1ci1cXHUwMDNlaWQsIGlkbWFwKSlcXG4rXFx0XFx0LyogaWQgcmVsYXRpb25zIGFuZCBpbnRyYS1jbGFzcyBkaXNwbGFjZW1lbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cXG4rXFx0XFx0aWYgKCFjaGVja19wa3RfcHRyX2lkcyhyb2xkLCByY3VyLCBpZG1hcCkpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0LyogbmV3IHZhbCBtdXN0IHNhdGlzZnkgb2xkIHZhbCBrbm93bGVkZ2UgKi9cXG4gXFx0XFx0cmV0dXJuIHJhbmdlX3dpdGhpbihyb2xkLCByY3VyKSBcXHUwMDI2XFx1MDAyNlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCAxYzMwMzlmM2ZjMzIzLi5iMDg1MDE3MzRkZGZhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC00NDcsNiArNDQ3LDExIEBAIHN0YXRpYyBib29sIHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIFxcdHJldHVybiBidGZfcmVjb3JkX2hhc19maWVsZChyZWdfYnRmX3JlY29yZChyZWcpLCBCUEZfU1BJTl9MT0NLIHwgQlBGX1JFU19TUElOX0xPQ0spO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbit7XFxuK1xcdHJldHVybiBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNiBtYXAtXFx1MDAzZW1heF9lbnRyaWVzID09IDE7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIHR5cGVfaXNfcmRvbmx5X21lbSh1MzIgdHlwZSlcXG4ge1xcbiBcXHRyZXR1cm4gdHlwZSBcXHUwMDI2IE1FTV9SRE9OTFk7XFxuQEAgLTEwMDM1LDYgKzEwMDQwLDkgQEAgaW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IGNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18xXS5tYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxcbitcXHRcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuIFxcbiBcXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXFx1MDAzZXJlZ3NbQlBGX1JFR18zXTtcXG5AQCAtMTAxMzEsNiArMTAxMzksOSBAQCBzdGF0aWMgaW50IHNldF90aW1lcl9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRfX21hcmtfcmVnX2tub3duX3plcm8oXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcXG4gXFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xcbitcXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxcbitcXHRcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuIFxcbiBcXHQvKiB1bnVzZWQgKi9cXG4gXFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNmNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcXG5AQCAtMTAyNDksNiArMTAyNjAsOSBAQCBzdGF0aWMgaW50IHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XFxuIFxcdGNhbGxlZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBtYXBfcHRyO1xcbiBcXHRjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfdWlkID0gbWFwX3VpZDtcXG4rXFx0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyKSlcXG4rXFx0XFx0Y2FsbGVlLVxcdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbiBcXG4gXFx0LyogdW51c2VkICovXFxuIFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbQlBGX1JFR180XSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuaW5kZXggYTE4ZDM2ODBmYjE2OS4uYzM1MGZiYjk1ODQ1NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xcbkBAIC0xNCw2ICsxNCwxMTcgQEBcXG4gXFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xcbiBcXG4rc3RhdGljIGludCBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGludCBidGZfZmQsIGludCBtYWluX2lkLCBpbnQgc3ViX2lkLFxcbitcXHRcXHRcXHRcXHQgIGludCBlbnVtX2lkLCBpbnQgYWNjZXNzX3N0cl9vZmYsIGJvb2wgcmVsb2NhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XFxuK1xcdFxcdEJQRl9DQUxMX1JFTCgyKSxcXG4rXFx0XFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxcbitcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuK1xcdFxcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyBmdW5jc1tdID0ge1xcbitcXHRcXHR7IC5pbnNuX29mZiA9IDAsIC50eXBlX2lkID0gbWFpbl9pZCB9LFxcbitcXHRcXHR7IC5pbnNuX29mZiA9IDMsIC50eXBlX2lkID0gc3ViX2lkIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XFxuK1xcdFxcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcXG4rXFx0XFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxcbitcXHRcXHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcXG4rXFx0XFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxcbitcXHR9O1xcbitcXHR1bmlvbiBicGZfYXR0ciBhdHRyID0ge1xcbitcXHRcXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLFxcbitcXHRcXHQuaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKSxcXG4rXFx0XFx0Lmluc25zID0gKF9fdTY0KWluc25zLFxcbitcXHRcXHQubGljZW5zZSA9IChfX3U2NClcXFwiR1BMXFxcIixcXG4rXFx0XFx0LmxvZ19idWYgPSAoX191NjQpbG9nLFxcbitcXHRcXHQubG9nX3NpemUgPSBzaXplb2YobG9nKSxcXG4rXFx0XFx0LmxvZ19sZXZlbCA9IDEsXFxuK1xcdFxcdC5wcm9nX2J0Zl9mZCA9IGJ0Zl9mZCxcXG4rXFx0XFx0LmZ1bmNfaW5mb19yZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyksXFxuK1xcdFxcdC5mdW5jX2luZm8gPSAoX191NjQpZnVuY3MsXFxuK1xcdFxcdC5mdW5jX2luZm9fY250ID0gQVJSQVlfU0laRShmdW5jcyksXFxuK1xcdH07XFxuK1xcbitcXHRpZiAocmVsb2NhdGUpIHtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9fY250ID0gMTtcXG4rXFx0XFx0YXR0ci5jb3JlX3JlbG9zID0gKF9fdTY0KVxcdTAwMjZyZWxvO1xcbitcXHRcXHRhdHRyLmNvcmVfcmVsb19yZWNfc2l6ZSA9IHNpemVvZihyZWxvKTtcXG4rXFx0fVxcbitcXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XFxuK1xcdHJldHVybiBzeXNfYnBmX3Byb2dfbG9hZChcXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcXG4re1xcbitcXHRjb25zdCB2b2lkICpyYXdfYnRmO1xcbitcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbitcXHRfX3UzMiByYXdfYnRmX3NpemU7XFxuK1xcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XFxuK1xcdGludCBpbnRfaWQsIG1haW5faWQsIHByb2dfZmQgPSAtMSwgcHJvdG9faWQsIHN1Yl9pZDtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJidGZfbmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW50X2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgXFxcImludFxcXCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoaW50X2lkLCAwLCBcXFwiYWRkX2ludFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdHByb3RvX2lkID0gYnRmX19hZGRfZnVuY19wcm90byhidGYsIGludF9pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcXFwiYWRkX2Z1bmNfcHJvdG9cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJtYWluX2ZuXFxcIiwgQlRGX0ZVTkNfU1RBVElDLCBwcm90b19pZCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFxcXCJhZGRfbWFpbl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFxcXCJzdWJfZm5cXFwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcXFwiYWRkX3N1Yl9mdW5jXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcXFwiY29yZV9yZWxvX3N1YnByb2dfcG9pc29uX21pc3NpbmdcXFwiLCA0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXFxcImFkZF9lbnVtXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFxcXCJ2YWx1ZVxcXCIsIDApLCBcXFwiYWRkX2VudW1fdmFsdWVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRhY2Nlc3Nfc3RyX29mZiA9IGJ0Zl9fYWRkX3N0cihidGYsIFxcXCIwXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX0dUKGFjY2Vzc19zdHJfb2ZmLCAwLCBcXFwiYWRkX2FjY2Vzc19zdHJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0cmF3X2J0ZiA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcXHUwMDI2cmF3X2J0Zl9zaXplKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHJhd19idGYsIFxcXCJyYXdfYnRmXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0YnRmX2ZkID0gYnBmX2J0Zl9sb2FkKHJhd19idGYsIHJhd19idGZfc2l6ZSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJ0Zl9mZCwgMCwgXFxcImJ0Zl9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFRoZSBzYW1lIHR3by1zdWJwcm9ncmFtIHByb2dyYW0gaXMgdmFsaWQgYmVmb3JlIHRoZSByZWxvY2F0aW9uLiAqL1xcbitcXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0IGFjY2Vzc19zdHJfb2ZmLCBmYWxzZSk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFxcXCJjb250cm9sX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRjbG9zZShwcm9nX2ZkKTtcXG4rXFx0cHJvZ19mZCA9IC0xO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUG9pc29uIHRoZSBmaXJzdCBzdWJwcm9ncmFtJ3MgdGVybWluYWwgZXhpdC4gVGhlIHZlcmlmaWVyIG11c3QgcmVqZWN0XFxuK1xcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxcbitcXHQgKi9cXG4rXFx0cHJvZ19mZCA9IGxvYWRfY29yZV9yZWxvX3N1YnByb2coYnRmX2ZkLCBtYWluX2lkLCBzdWJfaWQsIGVudW1faWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBhY2Nlc3Nfc3RyX29mZiwgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFxcXCJwb2lzb25lZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcXFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAyIHRvIDNcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJwb2lzb25lZF9sb2FkX2xvZ1xcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKGVudi52ZXJib3NpdHkgXFx1MDAzZSBWRVJCT1NFX05PUk1BTCBcXHUwMDI2XFx1MDAyNiBsb2dbMF0pIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlc1xcXCIsIGxvZyk7XFxuK1xcdFxcdHByaW50ZihcXFwiLS0tLS0tLS0gcHJvZ3JhbSBsb2FkIGxvZyBlbmQgLS0tLS0tLS0tLVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGNsb3NlKGJ0Zl9mZCk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbit9XFxuK1xcbiAvKiBDaGVjayB0aGF0IHZlcmlmaWVyIHJlamVjdHMgQlBGIHByb2dyYW0gY29udGFpbmluZyByZWxvY2F0aW9uXFxuICAqIHBvaW50aW5nIHRvIG5vbi1leGlzdGVudCBCVEYgdHlwZS5cXG4gICovXFxuQEAgLTEyMCw2ICsyMzEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2JhZF9sb2NhbF9pZCh2b2lkKVxcbiBcXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXFxuIHtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInBvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvclxcXCIpKVxcbitcXHRcXHR0ZXN0X3BvaXNvbmVkX3N1YnByb2dfdGVybWluYXRvcigpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYmFkX2xvY2FsX2lkXFxcIikpXFxuIFxcdFxcdHRlc3RfYmFkX2xvY2FsX2lkKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wZjc4ZGIzYmNjYzc2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfbG9hZF9zaWduYWwuY1xcbkBAIC0wLDAgKzEsMTMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgTk9QX0NOVFxcdFxcdDMyNzY4XFxuKyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcXHQoMTAwVUxMICogMTAwMCAqIDEwMDApXFxuKyNkZWZpbmUgUkVBUF9USU1FT1VUX05TXFx0XFx0KDEwMDBVTEwgKiAxMDAwICogMTAwMClcXG4rXFxuK3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgdHM7XFxuK1xcbitcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnRzKTtcXG4rXFx0cmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgKyB0cy50dl9uc2VjO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XFxuK1xcdFxcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXFxuK1xcdFxcdC50dl9uc2VjID0gZHVyYXRpb24gJSAxMDAwMDAwMDAwVUxMLFxcbitcXHR9O1xcbitcXG4rXFx0d2hpbGUgKG5hbm9zbGVlcChcXHUwMDI2dHMsIFxcdTAwMjZ0cykgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpXFxuK1xcdFxcdDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dClcXG4re1xcbitcXHRfX3U2NCBkZWFkbGluZSA9IG1vbm90b25pY19ucygpICsgdGltZW91dDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gd2FpdHBpZChwaWQsIHN0YXR1cywgV05PSEFORyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fSB3aGlsZSAobW9ub3RvbmljX25zKCkgXFx1MDAzYyBkZWFkbGluZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gTlVMTDtcXG4rXFx0X191NjQgc3RhcnQsIGNvbnRyb2xfdGltZSwga2lsbF9kZWxheTtcXG4rXFx0aW50IHBpcGVmZFsyXSA9IHsgLTEsIC0xIH07XFxuK1xcdGludCBwcm9nX2ZkID0gLTEsIHN0YXR1cyA9IDA7XFxuK1xcdHBpZF90IHBpZCA9IC0xO1xcbitcXHRjaGFyIGJ5dGU7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRpbnNucyA9IGNhbGxvYyhOT1BfQ05UICsgMiwgc2l6ZW9mKCppbnNucykpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoaW5zbnMsIFxcXCJjYWxsb2NcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5PUF9DTlQ7IGkrKylcXG4rXFx0XFx0aW5zbnNbaV0gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMSwgQlBGX1JFR18xKTtcXG4rXFx0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdGluc25zW05PUF9DTlQgKyAxXSA9IEJQRl9FWElUX0lOU04oKTtcXG4rXFxuK1xcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XFxuK1xcdHByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgXFxcIkdQTFxcXCIsXFxuK1xcdFxcdFxcdFxcdGluc25zLCBOT1BfQ05UICsgMiwgTlVMTCk7XFxuK1xcdGNvbnRyb2xfdGltZSA9IG1vbm90b25pY19ucygpIC0gc3RhcnQ7XFxuK1xcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFxcXCJjb250cm9sX3Byb2dfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGNsb3NlKHByb2dfZmQpO1xcbitcXHRwcm9nX2ZkID0gLTE7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTk9QX0NOVDsgaSsrKVxcbitcXHRcXHRpbnNuc1tpXSA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMCk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVmZCksIFxcXCJwaXBlXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcXFwiZm9ya1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGlmICghcGlkKSB7XFxuK1xcdFxcdGNsb3NlKHBpcGVmZFswXSk7XFxuK1xcdFxcdGlmICh3cml0ZShwaXBlZmRbMV0sIFxcXCJ4XFxcIiwgMSkgIT0gMSlcXG4rXFx0XFx0XFx0X2V4aXQoMSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVmZFsxXSk7XFxuK1xcdFxcdHByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgTlVMTCwgXFxcIkdQTFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdGluc25zLCBOT1BfQ05UICsgMiwgTlVMTCk7XFxuK1xcdFxcdGlmIChwcm9nX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKHByb2dfZmQpO1xcbitcXHRcXHRfZXhpdChwcm9nX2ZkIFxcdTAwM2MgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKHBpcGVmZFsxXSk7XFxuK1xcdHBpcGVmZFsxXSA9IC0xO1xcbitcXHRyZXQgPSByZWFkKHBpcGVmZFswXSwgXFx1MDAyNmJ5dGUsIDEpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIDEsIFxcXCJjaGlsZF9yZWFkeVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbGxvdyBsaW5lYXIgdmVyaWZpY2F0aW9uIHRvIGZpbmlzaCBiZWZvcmUgc2VuZGluZyBTSUdLSUxMLiBUaGUgbm9wXFxuK1xcdCAqIHJlbW92YWwgcGFzcyBpcyBxdWFkcmF0aWMsIHNvIGZvdXIgY29udHJvbC1sb2FkIHRpbWVzIHN0aWxsIGxlYXZlcyBhXFxuK1xcdCAqIHdpZGUgd2luZG93IGluIHdoaWNoIGFuIGFmZmVjdGVkIGtlcm5lbCBpcyByZXdyaXRpbmcgaW5zdHJ1Y3Rpb25zLlxcbitcXHQgKi9cXG4rXFx0a2lsbF9kZWxheSA9IE1BWChjb250cm9sX3RpbWUgKiA0LCBNSU5fS0lMTF9ERUxBWV9OUyk7XFxuK1xcdHNsZWVwX25zKGtpbGxfZGVsYXkpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhraWxsKHBpZCwgU0lHS0lMTCksIFxcXCJraWxsXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XFxuK1xcdHJldCA9IHdhaXRwaWRfdGltZW91dChwaWQsIFxcdTAwMjZzdGF0dXMsIFJFQVBfVElNRU9VVF9OUyk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgcGlkLCBcXFwicHJvZ19sb2FkX2tpbGxhYmxlXFxcIikpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJjb250cm9sIGxvYWQgJWxsdSB1cywgY2hpbGQgc3RpbGwgYWxpdmUgJWxsdSB1cyBhZnRlciBTSUdLSUxMXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRjb250cm9sX3RpbWUgLyAxMDAwLCAobW9ub3RvbmljX25zKCkgLSBzdGFydCkgLyAxMDAwKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcdHBpZCA9IC0xO1xcbitcXHRBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdURVJNU0lHKHN0YXR1cykgPT0gU0lHS0lMTCxcXG4rXFx0XFx0ICAgIFxcXCJraWxsZWRfYnlfc2lna2lsbFxcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKHByb2dfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGlmIChwaXBlZmRbMF0gXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocGlwZWZkWzBdKTtcXG4rXFx0aWYgKHBpcGVmZFsxXSBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShwaXBlZmRbMV0pO1xcbitcXHRpZiAocGlkIFxcdTAwM2UgMCkge1xcbitcXHRcXHRraWxsKHBpZCwgU0lHS0lMTCk7XFxuK1xcdFxcdHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKTtcXG4rXFx0fVxcbitcXHRmcmVlKGluc25zKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IDY0YWM0OWFkNjdlNjMuLjVjNTcyZGQ3MjVlNzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtMjUsNiArMjUsNyBAQFxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYnRmX2N0eF9hY2Nlc3Muc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jYWxsYmFja19sb2NrLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2NmZy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfY2dyb3VwX3NrYi5za2VsLmhcXFwiXFxuQEAgLTE4OCw2ICsxODksNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfYnN3YXAodm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnN3YXApOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2codm9pZCkgIHsgUlVOKHZlcmlmaWVyX2J0Zl91bnJlbGlhYmxlX3Byb2cpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbSk7IH1cXG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZmcodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZmcpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUodm9pZCkgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXFxuQEAgLTAsMCArMSw3MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitzdHJ1Y3QgYnBmX21hcDtcXG4rXFxuK3N0cnVjdCBsb2NrX3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBsb2NrX3ZhbHVlKTtcXG4rfSBsb2NrX21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcXG4rXFx0c3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlO1xcbit9O1xcbitcXG4rc3RhdGljIGxvbmcgbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHN0cnVjdCBjYWxsYmFja19jdHggKmN0eClcXG4re1xcbitcXHRicGZfc3Bpbl9sb2NrKFxcdTAwMjZ2YWx1ZS1cXHUwMDNlbG9jayk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V2YWx1ZS1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBuZXN0X2xvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XFxuK1xcbitcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmxvY2tfbWFwLCBsb2NrX2RpZmZlcmVudF92YWx1ZSwgXFx1MDAyNmN0eCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcImNhbGxiYWNrIG1hcCB2YWx1ZSBoYXMgYSBkaXN0aW5jdCBsb2NrIGlkZW50aXR5XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJicGZfc3Bpbl91bmxvY2sgb2YgZGlmZmVyZW50IGxvY2tcXFwiKVxcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZsb2NrX21hcCwgbmVzdF9sb2NrX2RpZmZlcmVudF92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBsb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2dmFsdWUtXFx1MDAzZWxvY2spO1xcbitcXHRicGZfc3Bpbl91bmxvY2soXFx1MDAyNnZhbHVlLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19zYW1lX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2bG9ja19tYXAsIGxvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIm5lc3RlZCBjYWxsYmFjayBjYW4gbG9jayBpdHMgb3duIG1hcCB2YWx1ZVxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgY2FsbGJhY2tfdmFsdWVfbG9ja19pZGVudGl0eV9zYW1lKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXFxuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfeGRwX2RpcmVjdF9wYWNrZXRfYWNjZXNzLmNcXG5AQCAtNSw2ICs1LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuIFxcbitTRUMoXFxcInhkcFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVnc2FmZSBwcmVzZXJ2ZXMgcGFja2V0IHBvaW50ZXIgY2xhc3MgZGlzcGxhY2VtZW50XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMiBtaW4gdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCBtZW1vcnkgcmFuZ2VcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfQU5ZX0FMSUdOTUVOVClcXG4rX19uYWtlZCB2b2lkIHBrdF9yZWdzYWZlX2NsYXNzX2Rpc3BsYWNlbWVudCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcXFxcXG4rXFx0cjggPSAqKHUzMiAqKShyMSArICVbeGRwX21kX2RhdGFfZW5kXSk7XFxcXFxcbitcXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXFxcXG4rXFx0cjYgPSByOTtcXFxcXFxuK1xcdHI2ICs9IDg7XFxcXFxcbitcXHRpZiByNiBcXHUwMDNlIHI4IGdvdG8gbF9leGl0XyU9O1xcXFxcXG4rXFx0cjAgPSAqKHU2NCAqKShyOSArIDApO1xcXFxcXG4rXFx0cjQgPSByMDtcXFxcXFxuK1xcdHI0IFxcdTAwMjY9IDE1O1xcXFxcXG4rXFx0cjcgPSByMDtcXFxcXFxuK1xcdHI3IFxcdTAwM2VcXHUwMDNlPSA2MztcXFxcXFxuK1xcdGlmIHI3ICE9IDAgZ290byBsX3BhdGhfYl8lPTtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyArPSA0O1xcXFxcXG4rXFx0Z290byBsX2pvaW5fJT07XFxcXFxcbitsX3BhdGhfYl8lPTogXFxcXFxcbitcXHRyNCBcXHUwMDI2PSAzO1xcXFxcXG4rXFx0cjQgKz0gODtcXFxcXFxuK1xcdHIyID0gcjk7XFxcXFxcbitcXHRyMiArPSByNDtcXFxcXFxuK1xcdHIzID0gcjI7XFxcXFxcbitcXHRyMyAtPSA0O1xcXFxcXG4rbF9qb2luXyU9OiBcXFxcXFxuK1xcdHI1ID0gcjM7XFxcXFxcbitcXHRyNSArPSA0O1xcXFxcXG4rXFx0aWYgcjUgXFx1MDAzZSByOCBnb3RvIGxfZXhpdF8lPTtcXFxcXFxuK1xcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxcXFxuK2xfZXhpdF8lPTogXFxcXFxcbitcXHRyMCA9IDA7XFxcXFxcbitcXHRleGl0O1xcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9jb25zdCh4ZHBfbWRfZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YSkpLFxcbitcXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcFxcXCIpXFxuIF9fZGVzY3JpcHRpb24oXFxcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJSMyBwb2ludGVyIGFyaXRobWV0aWMgb24gcGt0X2VuZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjEzLjM1ODA3NjQ5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQ2MTY4Mzg5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tfY2ZnXCIsXG4gICAgXCJwdXNoX2luc25cIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uNWNmOTJjZTE4NTIwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC04NTQsNiArODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuK1x0czMyIHBrdF9wdHJfZGVsdGE7XG4rXHRib29sIHBrdF9wdHJfZGVsdGFfc2V0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9pZG1hcCB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcbmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NmZy5jXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXG5AQCAtMTAyLDYgKzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuK1x0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7XG4gXHRpbnQgKmluc25fc3RhY2sgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhY2s7XG4gXHRpbnQgKmluc25fc3RhdGUgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhdGU7XG4gXG5AQCAtMTIxLDYgKzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBjaGVja19zdWJwcm9ncygpIHByZXZlbnRzIGNvbnRyb2wgZmxvdyBmcm9tIGZhbGxpbmcgdGhyb3VnaCBhXG4rXHQgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW5cbitcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbitcdCAqIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIENGRyB1c2VkIGJ5IGxhdGVyIHBlci1zdWJwcm9ncmFtIHBhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbitcdFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xuK1x0XHRpZiAodyBcdTAwM2Mgc3VicHJvZy1cdTAwM2VzdGFydCB8fCB3IFx1MDAzZT0gKHN1YnByb2cgKyAxKS1cdTAwM2VzdGFydCkge1xuK1x0XHRcdHZlcmJvc2VfbGluZm8oZW52LCB0LCBcIiVkOiBcIiwgdCk7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxcblwiLCB0LCB3KTtcbitcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbitcdFx0XHRcdGVudiwgdCwgXCJmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cIixcbitcdFx0XHRcdFwiS2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0XCJJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCIsXG4rXHRcdFx0XHR0LCB3KTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZGlzYXNtLmhcIlxuIFxuQEAgLTMwNiwxMiArMzA3LDI4IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9wb2tlX2Rlc2NzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGxlbilcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBTb21lIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXMgcmVxdWlyZSBhblxuKyAqIE8ocHJvZy1cdTAwM2VsZW4pIG9wZXJhdGlvbiBwZXIgaW5zdHJ1Y3Rpb24uIEtlZXAgdGhlaXIgc2hhcmVkIHByaW1pdGl2ZXNcbisgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4rICovXG4rc3RhdGljIGJvb2wgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCh2b2lkKVxuK3tcbitcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjb25kX3Jlc2NoZWQoKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gKyBsZW4gLSAxLFxuQEAgLTUyMyw2ICs1NDAsOSBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFx0dW5zaWduZWQgaW50IG9yaWdfcHJvZ19sZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIC1FSU5UUjtcbitcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG5AQCAtMjY2Niw0ICsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgKzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdGlmIChpZG1hcC1cdTAwM2VjbnQgXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5vbGQgPSBvbGRfaWQ7XG4gXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLmN1ciA9IGN1cl9pZDtcbitcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcbiBcdFx0aWRtYXAtXHUwMDNlY250Kys7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTM1Miw2ICszNTMsNDMgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXG4rXHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4re1xuK1x0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cdTAwM2VtYXA7XG4rXHRzNjQgZGVsdGE7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghY2hlY2tfaWRzKG9sZC1cdTAwM2VpZCwgY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghb2xkLVx1MDAzZWlkKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZVxuK1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbitcdCAqIFBhY2tldCBwb2ludGVyIG9mZnNldHMgYXJlIGJvdW5kZWQgYnkgQlBGX01BWF9WQVJfT0ZGLCBzbyB0aGUgZGVsdGFcbitcdCAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuXG4rXHQgKi9cbitcdGRlbHRhID0gKHM2NCkoY3VyLVx1MDAzZXI2NC5iYXNlIC0gb2xkLVx1MDAzZXI2NC5iYXNlKTtcbitcdGlmIChkZWx0YSBcdTAwM2MgUzMyX01JTiB8fCBkZWx0YSBcdTAwM2UgUzMyX01BWClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpKyspIHtcbitcdFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIW1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCkge1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XG4rXHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS5cbiAgKlxuQEAgLTYzMiw4ICs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbitcdFx0LyogaWQgcmVsYXRpb25zIGFuZCBpbnRyYS1jbGFzcyBkaXNwbGFjZW1lbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cbitcdFx0aWYgKCFjaGVja19wa3RfcHRyX2lkcyhyb2xkLCByY3VyLCBpZG1hcCkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBuZXcgdmFsIG11c3Qgc2F0aXNmeSBvbGQgdmFsIGtub3dsZWRnZSAqL1xuIFx0XHRyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3LDYgKzQ0NywxMSBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4re1xuK1x0cmV0dXJuIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTAwMzUsNiArMTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRfX21hcmtfcmVnX2tub3duX3plcm8oXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzNdO1xuQEAgLTEwMTMxLDYgKzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdF9fbWFya19yZWdfa25vd25femVybyhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI2MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5pbmRleCBhMThkMzY4MGZiMTY5Li5jMzUwZmJiOTU4NDU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuQEAgLTE0LDYgKzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuK3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCxcbitcdFx0XHRcdCAgaW50IGVudW1faWQsIGludCBhY2Nlc3Nfc3RyX29mZiwgYm9vbCByZWxvY2F0ZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbitcdFx0QlBGX0NBTExfUkVMKDIpLFxuK1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9mdW5jX2luZm8gZnVuY3NbXSA9IHtcbitcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbitcdFx0eyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LFxuK1x0fTtcbitcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4rXHRcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcbitcdFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxuK1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbitcdFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxuK1x0fTtcbitcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4rXHRcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsXG4rXHRcdC5pbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpLFxuK1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4rXHRcdC5saWNlbnNlID0gKF9fdTY0KVwiR1BMXCIsXG4rXHRcdC5sb2dfYnVmID0gKF9fdTY0KWxvZyxcbitcdFx0LmxvZ19zaXplID0gc2l6ZW9mKGxvZyksXG4rXHRcdC5sb2dfbGV2ZWwgPSAxLFxuK1x0XHQucHJvZ19idGZfZmQgPSBidGZfZmQsXG4rXHRcdC5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLFxuK1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuK1x0XHQuZnVuY19pbmZvX2NudCA9IEFSUkFZX1NJWkUoZnVuY3MpLFxuK1x0fTtcbitcbitcdGlmIChyZWxvY2F0ZSkge1xuK1x0XHRhdHRyLmNvcmVfcmVsb19jbnQgPSAxO1xuK1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbitcdFx0YXR0ci5jb3JlX3JlbG9fcmVjX3NpemUgPSBzaXplb2YocmVsbyk7XG4rXHR9XG4rXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4rXHRyZXR1cm4gc3lzX2JwZl9wcm9nX2xvYWQoXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcbit7XG4rXHRjb25zdCB2b2lkICpyYXdfYnRmO1xuK1x0c3RydWN0IGJ0ZiAqYnRmID0gTlVMTDtcbitcdF9fdTMyIHJhd19idGZfc2l6ZTtcbitcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4rXHRpbnQgaW50X2lkLCBtYWluX2lkLCBwcm9nX2ZkID0gLTEsIHByb3RvX2lkLCBzdWJfaWQ7XG4rXG4rXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXHRpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVChpbnRfaWQsIDAsIFwiYWRkX2ludFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcImFkZF9mdW5jX3Byb3RvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwibWFpbl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFwiYWRkX21haW5fZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwic3ViX2ZuXCIsIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpO1xuK1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcImFkZF9zdWJfZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcImNvcmVfcmVsb19zdWJwcm9nX3BvaXNvbl9taXNzaW5nXCIsIDQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXCJhZGRfZW51bVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFwidmFsdWVcIiwgMCksIFwiYWRkX2VudW1fdmFsdWVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgXCIwXCIpO1xuK1x0aWYgKCFBU1NFUlRfR1QoYWNjZXNzX3N0cl9vZmYsIDAsIFwiYWRkX2FjY2Vzc19zdHJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCBcInJhd19idGZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcImJ0Zl9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBUaGUgc2FtZSB0d28tc3VicHJvZ3JhbSBwcm9ncmFtIGlzIHZhbGlkIGJlZm9yZSB0aGUgcmVsb2NhdGlvbi4gKi9cbitcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuK1x0XHRcdFx0XHQgYWNjZXNzX3N0cl9vZmYsIGZhbHNlKTtcbitcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwiY29udHJvbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdC8qXG4rXHQgKiBQb2lzb24gdGhlIGZpcnN0IHN1YnByb2dyYW0ncyB0ZXJtaW5hbCBleGl0LiBUaGUgdmVyaWZpZXIgbXVzdCByZWplY3RcbitcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuK1x0ICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFwicG9pc29uZWRfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCIsXG4rXHRcdFx0ICBcInBvaXNvbmVkX2xvYWRfbG9nXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoZW52LnZlcmJvc2l0eSBcdTAwM2UgVkVSQk9TRV9OT1JNQUwgXHUwMDI2XHUwMDI2IGxvZ1swXSkge1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCIpO1xuK1x0XHRwcmludGYoXCIlc1wiLCBsb2cpO1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCIpO1xuK1x0fVxuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRjbG9zZShidGZfZmQpO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rfVxuK1xuIC8qIENoZWNrIHRoYXQgdmVyaWZpZXIgcmVqZWN0cyBCUEYgcHJvZ3JhbSBjb250YWluaW5nIHJlbG9jYXRpb25cbiAgKiBwb2ludGluZyB0byBub24tZXhpc3RlbnQgQlRGIHR5cGUuXG4gICovXG5AQCAtMTIwLDYgKzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpXG4gXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXG4ge1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJwb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3JcIikpXG4rXHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJhZF9sb2NhbF9pZFwiKSlcbiBcdFx0dGVzdF9iYWRfbG9jYWxfaWQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5AQCAtMCwwICsxLDEzMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNkZWZpbmUgTk9QX0NOVFx0XHQzMjc2OFxuKyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcdCgxMDBVTEwgKiAxMDAwICogMTAwMClcbisjZGVmaW5lIFJFQVBfVElNRU9VVF9OU1x0XHQoMTAwMFVMTCAqIDEwMDAgKiAxMDAwKVxuK1xuK3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHM7XG4rXG4rXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1x0cmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgKyB0cy50dl9uc2VjO1xuK31cbitcbitzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XG4rXHRcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXG4rXHRcdC50dl9uc2VjID0gZHVyYXRpb24gJSAxMDAwMDAwMDAwVUxMLFxuK1x0fTtcbitcbitcdHdoaWxlIChuYW5vc2xlZXAoXHUwMDI2dHMsIFx1MDAyNnRzKSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpXG4rXHRcdDtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dClcbit7XG4rXHRfX3U2NCBkZWFkbGluZSA9IG1vbm90b25pY19ucygpICsgdGltZW91dDtcbitcdGludCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdhaXRwaWQocGlkLCBzdGF0dXMsIFdOT0hBTkcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH0gd2hpbGUgKG1vbm90b25pY19ucygpIFx1MDAzYyBkZWFkbGluZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gTlVMTDtcbitcdF9fdTY0IHN0YXJ0LCBjb250cm9sX3RpbWUsIGtpbGxfZGVsYXk7XG4rXHRpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTtcbitcdGludCBwcm9nX2ZkID0gLTEsIHN0YXR1cyA9IDA7XG4rXHRwaWRfdCBwaWQgPSAtMTtcbitcdGNoYXIgYnl0ZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRpbnNucyA9IGNhbGxvYyhOT1BfQ05UICsgMiwgc2l6ZW9mKCppbnNucykpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluc25zLCBcImNhbGxvY1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTk9QX0NOVDsgaSsrKVxuK1x0XHRpbnNuc1tpXSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzEpO1xuK1x0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRpbnNuc1tOT1BfQ05UICsgMV0gPSBCUEZfRVhJVF9JTlNOKCk7XG4rXG4rXHRzdGFydCA9IG1vbm90b25pY19ucygpO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0aW5zbnMsIE5PUF9DTlQgKyAyLCBOVUxMKTtcbitcdGNvbnRyb2xfdGltZSA9IG1vbm90b25pY19ucygpIC0gc3RhcnQ7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfcHJvZ19sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5PUF9DTlQ7IGkrKylcbitcdFx0aW5zbnNbaV0gPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDApO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlZmQpLCBcInBpcGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIXBpZCkge1xuK1x0XHRjbG9zZShwaXBlZmRbMF0pO1xuK1x0XHRpZiAod3JpdGUocGlwZWZkWzFdLCBcInhcIiwgMSkgIT0gMSlcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0Y2xvc2UocGlwZWZkWzFdKTtcbitcdFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0XHRpbnNucywgTk9QX0NOVCArIDIsIE5VTEwpO1xuK1x0XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRcdF9leGl0KHByb2dfZmQgXHUwMDNjIDApO1xuK1x0fVxuK1xuK1x0Y2xvc2UocGlwZWZkWzFdKTtcbitcdHBpcGVmZFsxXSA9IC0xO1xuK1x0cmV0ID0gcmVhZChwaXBlZmRbMF0sIFx1MDAyNmJ5dGUsIDEpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAxLCBcImNoaWxkX3JlYWR5XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcFxuK1x0ICogcmVtb3ZhbCBwYXNzIGlzIHF1YWRyYXRpYywgc28gZm91ciBjb250cm9sLWxvYWQgdGltZXMgc3RpbGwgbGVhdmVzIGFcbitcdCAqIHdpZGUgd2luZG93IGluIHdoaWNoIGFuIGFmZmVjdGVkIGtlcm5lbCBpcyByZXdyaXRpbmcgaW5zdHJ1Y3Rpb25zLlxuK1x0ICovXG4rXHRraWxsX2RlbGF5ID0gTUFYKGNvbnRyb2xfdGltZSAqIDQsIE1JTl9LSUxMX0RFTEFZX05TKTtcbitcdHNsZWVwX25zKGtpbGxfZGVsYXkpO1xuK1x0aWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCBcImtpbGxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XG4rXHRyZXQgPSB3YWl0cGlkX3RpbWVvdXQocGlkLCBcdTAwMjZzdGF0dXMsIFJFQVBfVElNRU9VVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgXCJwcm9nX2xvYWRfa2lsbGFibGVcIikpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiY29udHJvbCBsb2FkICVsbHUgdXMsIGNoaWxkIHN0aWxsIGFsaXZlICVsbHUgdXMgYWZ0ZXIgU0lHS0lMTFxcblwiLFxuK1x0XHRcdGNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXHRwaWQgPSAtMTtcbitcdEFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdURVJNU0lHKHN0YXR1cykgPT0gU0lHS0lMTCxcbitcdFx0ICAgIFwia2lsbGVkX2J5X3NpZ2tpbGxcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChwcm9nX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRpZiAocGlwZWZkWzBdIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocGlwZWZkWzBdKTtcbitcdGlmIChwaXBlZmRbMV0gXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwaXBlZmRbMV0pO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuK1x0fVxuK1x0ZnJlZShpbnNucyk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSw3MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rc3RydWN0IGJwZl9tYXA7XG4rXG4rc3RydWN0IGxvY2tfdmFsdWUge1xuK1x0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XG4rfSBsb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbitcdHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTtcbit9O1xuK1xuK3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgc3RydWN0IGNhbGxiYWNrX2N0eCAqY3R4KVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4rXG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCBcdTAwMjZjdHgsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fZGVzY3JpcHRpb24oXCJjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwibmVzdGVkIGNhbGxiYWNrIGNhbiBsb2NrIGl0cyBvd24gbWFwIHZhbHVlXCIpXG4rX19zdWNjZXNzXG4raW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHlfc2FtZSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG5AQCAtNSw2ICs1LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuK1NFQyhcInhkcFwiKVxuK19fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZVwiKVxuK19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKVxuK19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXFxcbitcdHI4ID0gKih1MzIgKikocjEgKyAlW3hkcF9tZF9kYXRhX2VuZF0pO1xcXG4rXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXG4rXHRyNiA9IHI5O1xcXG4rXHRyNiArPSA4O1xcXG4rXHRpZiByNiBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjkgKyAwKTtcXFxuK1x0cjQgPSByMDtcXFxuK1x0cjQgXHUwMDI2PSAxNTtcXFxuK1x0cjcgPSByMDtcXFxuK1x0cjcgXHUwMDNlXHUwMDNlPSA2MztcXFxuK1x0aWYgcjcgIT0gMCBnb3RvIGxfcGF0aF9iXyU9O1xcXG4rXHRyMiA9IHI5O1xcXG4rXHRyMiArPSByNDtcXFxuK1x0cjMgPSByMjtcXFxuK1x0cjMgKz0gNDtcXFxuK1x0Z290byBsX2pvaW5fJT07XFxcbitsX3BhdGhfYl8lPTogXFxcbitcdHI0IFx1MDAyNj0gMztcXFxuK1x0cjQgKz0gODtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzIC09IDQ7XFxcbitsX2pvaW5fJT06IFxcXG4rXHRyNSA9IHIzO1xcXG4rXHRyNSArPSA0O1xcXG4rXHRpZiByNSBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxuK2xfZXhpdF8lPTogXFxcbitcdHIwID0gMDtcXFxuK1x0ZXhpdDtcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksXG4rXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gU0VDKFwieGRwXCIpXG4gX19kZXNjcmlwdGlvbihcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUjMgcG9pbnRlciBhcml0aG1ldGljIG9uIHBrdF9lbmRcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjEzLjM1ODA3ODE1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjc1MzI0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2ggU2VyaWVzIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyB3YXJyYW50cyBhIHN5emthbGxlciBmdXp6aW5nIGNhbXBhaWduIGZvciB0aGUgYW1kNjQgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGNoYW5nZWQuIEknbSBzZWVpbmcgYWRkaXRpb25zIHRvIGBicGZfaWRfcGFpcmAgaW4gYGJwZl92ZXJpZmllci5oYCBhbmQgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBjb3JlIEJQRiBmaWxlczogYGNmZy5jYCwgYGZpeHVwcy5jYCwgYHN0YXRlcy5jYCwgYW5kIGB2ZXJpZmllci5jYC5cblxuVGhlIGFkZGl0aW9ucyBvZiBgczMyIHBrdF9wdHJfZGVsdGE7IGJvb2wgcGt0X3B0cl9kZWx0YV9zZXQ7YCBpbiBgYnBmX2lkX3BhaXJgIHNlZW0gbGlrZSBhIHBvdGVudGlhbCBwb2ludGVyLXJlbGF0ZWQgY2hhbmdlLCB3aGljaCBhbHdheXMgcmFpc2VzIGEgZmxhZy4gVGhlbiwgbW9kaWZpY2F0aW9ucyB0byBgcHVzaF9pbnNuKClgIGluIGBjZmcuY2Agd2l0aCBmYWxsdGhyb3VnaCBjaGVja3MgbG9vayBpbnRlcmVzdGluZy4gYGZpeHVwcy5jYCBub3cgaW5jbHVkZXMgYSBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCBmdW5jdGlvbiB3aXRoIGNoZWNrcyBmb3IgYGZhdGFsX3NpZ25hbF9wZW5kaW5nYCBhbmQgYGNvbmRfcmVzY2hlZCgpYCwgaW5kaWNhdGluZyBwb3RlbnRpYWwgaW50ZXJydXB0aW9uIG1lY2hhbmlzbXMuIGBzdGF0ZXMuY2AgaW50cm9kdWNlcyBgY2hlY2tfcGt0X3B0cl9pZHMoKWAsIHNvIHdlJ3JlIHNlZWluZyBtb3JlIHBvaW50ZXIgaGFuZGxpbmcuIEZpbmFsbHksIGB2ZXJpZmllci5jYCBpbmNsdWRlcyBhIGBtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eSgpYCBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIGluY2x1ZGluZyBzZXR0aW5nIHJlZ2lzdGVyIGlkcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBEb2VzIHRoaXMgcGF0Y2ggbW9kaWZ5IGV4ZWN1dGFibGUga2VybmVsIGNvZGUgdGhhdCdzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMgY29yZSBhbmQgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gQ2hhbmdlcyB0byB0aGUgdmVyaWZpZXIgYXJlIGFsd2F5cyBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIG5vdG9yaW91cyBmb3IgaGF2aW5nIHN1YnRsZSBmbGF3cywgYW5kIHRoZXNlIGNoYW5nZXMgc2VlbSB0byB0b3VjaCBvbiBjcml0aWNhbCBhcmVhcy5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCwgdGhlIHN1YnN5c3RlbSBpcyBpbXBvcnRhbnQsIGFuZCBwb2ludGVyL3N0YXRlL2NvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zIGFyZSBzdHJvbmcgaW5kaWNhdG9ycy4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgbWF5YmUgc29tZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZXNlIG5ldyBjaGFuZ2VzLiBJ4oCZbGwgdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhlIGtlcm5lbC9icGYgZmlsZXMgdG8gZ2V0IHRoYXQgaW5mb3JtYXRpb24uIEknbSByZWFkeSB0byBjcmFmdCBzb21lIGdvb2Qgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjE3LjY4NTYxMzQzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjczNDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19CUEZfU1lTQ0FMTFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTIzPWlmZXEgKCQoQ09ORklHX05FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGV2bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzdGFja21hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJldXNlcG9ydF9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc3RydWN0X29wcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfcmVsb2NhdGUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrbWVtX2NhY2hlX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRtYWJ1Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjE3Ljc0MjM1MjM5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzOTg4NjQ2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEZfU1lTQ0FMTCBEZXBlbmRlbmNpZXMgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9TWVNDQUxMYC4gSSdtIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBub3cuIE15IGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgcHJlLXJlcXVpc2l0ZXMgdGhhdCB3b3VsZCBhZmZlY3QgdGhlIGF2YWlsYWJpbGl0eSBvZiBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2Ugb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHBvdGVudGlhbGx5IGtlcm5lbCBoYXJkZW5pbmcgb3B0aW9ucywgb3IgZXZlbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2Ugd2hldGhlciBgQlBGX1NZU0NBTExgIGlzIGV2ZW4gKnByZXNlbnQqIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGllcmFyY2h5IGFuZCBob3cgZGlmZmVyZW50IGZlYXR1cmVzIGludGVyYWN0IHdpdGggaXQuIFRoZSBvYmplY3RpdmUgaXMgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgY29uc2lzdGVudCBmb3IgbXkgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MjEuMTQxMjIwMDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjEwMDc2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoyMS4xODg4Mzg3MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDczOTAyMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbmZpZyBCUEZfU1lTQ0FMTGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBjb25maWcgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5IHNldC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlcywgbGlrZWx5IHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlIG9yIGZlYXR1cmUgZGlyZWN0b3JpZXMuIEnigJlsbCBwcm9iYWJseSBuZWVkIHRvIHVzZSBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAgKG9yIHBvc3NpYmx5IGBhY2tgIG9yIGByaXBncmVwYCBmb3Igc3BlZWQpIHRvIGxvY2F0ZSBpdCBlZmZpY2llbnRseS4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIHN5bWJvbCBpcyBlaXRoZXIgZXhwbGljaXRseSBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgd2l0aGluIGRlcGVuZGVuY3kgZXhwcmVzc2lvbnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBpbnNpZ2h0IGludG8gdGhlIGZ1bmN0aW9uYWxpdHkgZ3VhcmRlZCBieSB0aGF0IGNvbmZpZywgYW5kIGhvdyB0byBlbmFibGUvZGlzYWJsZSBpdC4gSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBzdWJ0bGV0eSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEyMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjIzLjY2Mjc0MzMxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2ODEzMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjI1LjQ4OTU2MTAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTczMzc2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBCUEYgS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBCUEYgc2l0dWF0aW9uLCBJIG5lZWQgdG8gZ3JvdW5kIG15c2VsZiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIExpbmUgMjUgb2YgYGtlcm5lbC9icGYvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5Li4uIHRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUga2V5IGRlcGVuZGVuY2llcyBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0gYXJlIGRlY2xhcmVkLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBCUEYgZmVhdHVyZXMgYXJlIGdhdGVkIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJ20gYXNzdW1pbmcgdGhhdCBpdOKAmXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGJhc2UgcmVxdWlyZW1lbnRzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBzZWN1cml0eSBtb2RlbHMsIENQVSBhcmNoaXRlY3R1cmUgZmVhdHVyZXMgb3Igb3RoZXIgc3Vic3lzdGVtcyBhcmUgY2xlYXJseSBzcGVjaWZpZWQuIEkgY2FuIGNoZWNrIHRoaXMgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzIGJlZm9yZSBnb2luZyBmdXJ0aGVyLiBUaGlzJ2xsIGhlbHAgbWUgYXZvaWQgd2FzdGluZyB0aW1lIGxhdGVyIG9uIGJ5IGNoYXNpbmcgZG93biByZWQgaGVycmluZ3MgcmVsYXRlZCB0byB1bm1ldCBwcmVyZXF1aXNpdGVzLiBMZXTigJlzIGRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjI3LjQ4NjkwMTM3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2MzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzoyNy40ODY5NjcwMjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NzMwMzE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmaWxlIGFuZCBzeW1ib2wgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIHR3byBrZXkgYXJlYXM6XG5cbkZpcnN0LCBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBzdHJ1Y3QgYnBmX2lkX3BhaXJgLiBBIG5ldyBmaWVsZCwgYHBrdF9wdHJfZGVsdGFgLCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciwgYW5kIGEgYm9vbGVhbiBmbGFnIGBwa3RfcHRyX2RlbHRhX3NldGAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBvaW50ZXIgZGVsdGEgY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gcGFja2V0IGRhdGEgbWFuaXB1bGF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGlzIGltcGFjdHMgaG93IHdlIHRyYWNrIGFuZCBtYW5hZ2Ugb2Zmc2V0cyB3aXRoaW4gdGhlIHBhY2tldCBidWZmZXIuIFRoZSBhZGRpdGlvbiBvZiBhIGJvb2xlYW4gZmxhZyBzdWdnZXN0cyBjb25kaXRpb25hbCB1c2FnZSwgaW1wbHlpbmcgdGhpcyBkZWx0YSBpc24ndCBhbHdheXMgcmVsZXZhbnQuIEl0J2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmVyaWZpZXIuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvY2ZnLmNgLCB0aGUgYHB1c2hfaW5zbmAgZnVuY3Rpb24gaGFzIGJlZW4gY2hhbmdlZC4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgYm91bmRhcnkgY2hlY2sgcmVsYXRlZCB0byBmYWxsdGhyb3VnaCAoYGUgPT0gRkFMTFRIUk9VR0hgKS4gVGhhdCBjYXRjaGVzIG15IGV5ZS4gV2UncmUgZXhwbGljaXRseSBndWFyZGluZyBhZ2FpbnN0IHNvbWV0aGluZyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZhbGx0aHJvdWdoIHNjZW5hcmlvLCB3aGljaCBpcyB1c3VhbGx5IGEgY3JpdGljYWwgcGF0aCBmb3IgY29udHJvbCBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgcHJldmVudHMuIFRvIGRvIHRoYXQsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBwdXNoX2luc25gLiBJJ2xsIGhhdmUgdG8gcXVpY2tseSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBga2VybmVsL2JwZi9jZmcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBjaGVjayB3aWxsIGFmZmVjdCB0aGUgb3ZlcmFsbCBCUEYgdmVyaWZpZXIgYmVoYXZpb3IuIEkgc3VzcGVjdCBpdCdzIHByZXZlbnRpbmcgc29tZSBraW5kIG9mIHBvdGVudGlhbGx5IGludmFsaWQgc3RhdGUgZHVyaW5nIGluc3RydWN0aW9uIHB1c2ggb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEJQRiBjb250cm9sIGZsb3cgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MzAuNDQ0Mjc0MTA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE1MTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXNoX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZmcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NmZy5jPTkzPWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0xMDItICovXFxua2VybmVsL2JwZi9jZmcuYzoxMDM6c3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTEwNC17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTE4Mj1zdGF0aWMgaW50IHZpc2l0X2Z1bmNfY2FsbF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX2luc24gKmluc25zLFxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0xODktXFx0aW5zbl9zeiA9IGJwZl9pc19sZGltbTY0KFxcdTAwMjZpbnNuc1t0XSkgPyAyIDogMTtcXG5rZXJuZWwvYnBmL2NmZy5jOjE5MDpcXHRyZXQgPSBwdXNoX2luc24odCwgdCArIGluc25fc3osIEZBTExUSFJPVUdILCBlbnYpO1xcbmtlcm5lbC9icGYvY2ZnLmMtMTkxLVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTIwMS1cXHRcXHRtZXJnZV9jYWxsZWVfZWZmZWN0cyhlbnYsIHQsIHcpO1xcbmtlcm5lbC9icGYvY2ZnLmM6MjAyOlxcdFxcdHJldCA9IHB1c2hfaW5zbih0LCB3LCBCUkFOQ0gsIGVudik7XFxua2VybmVsL2JwZi9jZmcuYy0yMDMtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz00NzQ9c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy00OTItXFx0XFx0aW5zbl9zeiA9IGJwZl9pc19sZGltbTY0KGluc24pID8gMiA6IDE7XFxua2VybmVsL2JwZi9jZmcuYzo0OTM6XFx0XFx0cmV0dXJuIHB1c2hfaW5zbih0LCB0ICsgaW5zbl9zeiwgRkFMTFRIUk9VR0gsIGVudik7XFxua2VybmVsL2JwZi9jZmcuYy00OTQtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01ODMtXFx0XFx0LyogdW5jb25kaXRpb25hbCBqdW1wIHdpdGggc2luZ2xlIGVkZ2UgKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjU4NDpcXHRcXHRyZXQgPSBwdXNoX2luc24odCwgdCArIG9mZiArIDEsIEZBTExUSFJPVUdILCBlbnYpO1xcbmtlcm5lbC9icGYvY2ZnLmMtNTg1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTU5OS1cXG5rZXJuZWwvYnBmL2NmZy5jOjYwMDpcXHRcXHRyZXQgPSBwdXNoX2luc24odCwgdCArIDEsIEZBTExUSFJPVUdILCBlbnYpO1xcbmtlcm5lbC9icGYvY2ZnLmMtNjAxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTYwMy1cXG5rZXJuZWwvYnBmL2NmZy5jOjYwNDpcXHRcXHRyZXR1cm4gcHVzaF9pbnNuKHQsIHQgKyBpbnNuLVxcdTAwM2VvZmYgKyAxLCBCUkFOQ0gsIGVudik7XFxua2VybmVsL2JwZi9jZmcuYy02MDUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzozMC40OTU0MzIzNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyODkwMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFbnRyeSBQb2ludCBBbmFseXNpcyBpbiBgY2ZnLmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBjZmcuY2AgYW5kIGltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVudHJ5IHBvaW50cy4gV2hlcmUgZG9lcyB0aGUgZXhlY3V0aW9uIGJlZ2luLCBhbmQgd2hhdCBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlLCB0aGUgYnVpbGRpbmcgYmxvY2tzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGUgY29uZmlndXJhdGlvbiBsb2FkaW5nLCBwYXJzaW5nLCBhbmQgYXBwbGljYXRpb24uIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgb2J2aW91cyBjYW5kaWRhdGVzOiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIHBhcnNpbmcgcm91dGluZXMsIGFuZCBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmVzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBhcyB3ZWxsIOKAkyBjYWxscyB0byBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcyB0aGF0IGFyZSBjcnVjaWFsIGZvciB0aGUgcHJvcGVyIG9wZXJhdGlvbiBvZiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGhvdyBgY2ZnLmNgIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIGlzIGp1c3QgYXMgaW1wb3J0YW50IGFzIHRoZSBpbnRlcm5hbHMgb2YgdGhlIG1vZHVsZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTM2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MzIuNzI0MzQ0NTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE5ODM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2NmZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2ZnLmM9NDU9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTUxLVxcbmtlcm5lbC9icGYvY2ZnLmM6NTI6c3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG5rZXJuZWwvYnBmL2NmZy5jLTUzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTktXFxua2VybmVsL2JwZi9jZmcuYzo2MDpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfbWlnaHRfc2xlZXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG5rZXJuZWwvYnBmL2NmZy5jLTYxLXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNjctXFxua2VybmVsL2JwZi9jZmcuYzo2ODpzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfbWlnaHRfdGhyb3coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG5rZXJuZWwvYnBmL2NmZy5jLTY5LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtODEtICovXFxua2VybmVsL2JwZi9jZmcuYzo4MjpzdGF0aWMgdm9pZCBtZXJnZV9jYWxsZWVfZWZmZWN0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdCwgaW50IHcpXFxua2VybmVsL2JwZi9jZmcuYy04My17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTkzPWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0xMDItICovXFxua2VybmVsL2JwZi9jZmcuYzoxMDM6c3RhdGljIGludCBwdXNoX2luc24oaW50IHQsIGludCB3LCBpbnQgZSwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTEwNC17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTE4MS1cXG5rZXJuZWwvYnBmL2NmZy5jOjE4MjpzdGF0aWMgaW50IHZpc2l0X2Z1bmNfY2FsbF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX2luc24gKmluc25zLFxcbmtlcm5lbC9icGYvY2ZnLmMtMTgzLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTIwNi1cXG5rZXJuZWwvYnBmL2NmZy5jOjIwNzpzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2lhcnJheV9yZWFsbG9jKHN0cnVjdCBicGZfaWFycmF5ICpvbGQsIHNpemVfdCBuX2VsZW0pXFxua2VybmVsL2JwZi9jZmcuYy0yMDgte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0yMjItXFxua2VybmVsL2JwZi9jZmcuYzoyMjM6c3RhdGljIGludCBjb3B5X2luc25fYXJyYXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIHN0YXJ0LCB1MzIgZW5kLCB1MzIgKml0ZW1zKVxcbmtlcm5lbC9icGYvY2ZnLmMtMjI0LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtMjQyLVxcbmtlcm5lbC9icGYvY2ZnLmM6MjQzOnN0YXRpYyBpbnQgY21wX3B0cl90b191MzIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG5rZXJuZWwvYnBmL2NmZy5jLTI0NC17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTI0Ny1cXG5rZXJuZWwvYnBmL2NmZy5jOjI0ODpzdGF0aWMgaW50IHNvcnRfaW5zbl9hcnJheV91bmlxKHUzMiAqaXRlbXMsIGludCBjbnQpXFxua2VybmVsL2JwZi9jZmcuYy0yNDkte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0yNjQtICovXFxua2VybmVsL2JwZi9jZmcuYzoyNjU6aW50IGJwZl9jb3B5X2luc25fYXJyYXlfdW5pcShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgc3RhcnQsIHUzMiBlbmQsIHUzMiAqb2ZmKVxcbmtlcm5lbC9icGYvY2ZnLmMtMjY2LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtMjc5LSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6MjgwOnN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqanRfZnJvbV9tYXAoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2NmZy5jLTI4MS17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTMxMC0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjMxMTpzdGF0aWMgc3RydWN0IGJwZl9pYXJyYXkgKmp0X2Zyb21fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvY2ZnLmMtMzEyLVxcdFxcdFxcdFxcdFxcdCAgaW50IHN1YnByb2dfc3RhcnQsIGludCBzdWJwcm9nX2VuZClcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9MzYzPXN0YXRpYyBzdHJ1Y3QgYnBmX2lhcnJheSAqXFxua2VybmVsL2JwZi9jZmcuYzozNjQ6Y3JlYXRlX2p0KGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtMzY1LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtMzk2LS8qIFxcXCJjb25kaXRpb25hbCBqdW1wIHdpdGggTiBlZGdlc1xcXCIgKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjM5NzpzdGF0aWMgaW50IHZpc2l0X2dvdG94X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy0zOTgte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy00NDktICovXFxua2VybmVsL2JwZi9jZmcuYzo0NTA6c3RhdGljIGludCB2aXNpdF9hYm5vcm1hbF9yZXR1cm5faW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdClcXG5rZXJuZWwvYnBmL2NmZy5jLTQ1MS17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTQ3My0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjQ3NDpzdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy00NzUte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy02MTAtICovXFxua2VybmVsL2JwZi9jZmcuYzo2MTE6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTYxMi17XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTcxMi0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjcxMzppbnQgYnBmX2NvbXB1dGVfcG9zdG9yZGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy03MTQte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy03NjUtICovXFxua2VybmVsL2JwZi9jZmcuYzo3NjY6aW50IGJwZl9jb21wdXRlX3NjYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNzY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6MzIuNzcxNTQ4NTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzA2NzQ1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFZlcmlmaWVyIEZsb3cgYW5kIEZpeHVwIENvbmNlcm5zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgQlBGIHZlcmlmaWVyIGFuZCBob3cgaXQgaGFuZGxlcyBpbnN0cnVjdGlvbiBtb2RpZmljYXRpb25zLiBJIHNlZSB0aGF0IHRoZSBgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KWAgZnVuY3Rpb24gaXMga2V5OyBpdCBjYWxscyBgdmlzaXRfaW5zbmAsIHdoaWNoIHRoZW4gcHVzaGVzIGluc3RydWN0aW9ucyB1c2luZyBgcHVzaF9pbnNuYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgZGVhbCB3aXRoIHBhdGNoaW5nIGFuZCByZW1vdmluZyBpbnN0cnVjdGlvbnMgZHVyaW5nIHZlcmlmaWNhdGlvbi4gTGV0J3MgZGVsdmUgaW50byBga2VybmVsL2JwZi9maXh1cHMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgYnBmX3BhdGNoX2luc25fZGF0YSgpYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNucygpYC4gQm90aCBvZiB0aGVtIGFyZSBpbnRlcmVzdGluZyBzaW5jZSB0aGV5IGhhdmUgYGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKWAuIFRoYXQgbG9va3MgbGlrZSBhIGNyaXRpY2FsIHBvaW50IHdoZXJlIHdlIG1pZ2h0IG5lZWQgdG8gYWJvcnQgdGhlIHZlcmlmaWNhdGlvbi5cblxuT2theSwgSSdsbCBleGFtaW5lIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBjaGVjayB0aGVpciBjYWxsZXJzLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzdGF0aWMgb3IgaGF2ZSBicm9hZGVyIHZpc2liaWxpdHkuIEknbGwgcmVhY2ggZm9yIGBncmVwYCBhbmQgaHVudCB0aGVtIGRvd24gaW4gdGhlIGNvZGViYXNlLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzLCBvciB1bmV4cGVjdGVkIHVzZXMuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjEwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjM2LjI0MjIyNjI1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMTA3ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihicGZfcGF0Y2hfaW5zbl9kYXRhfHZlcmlmaWVyX3JlbW92ZV9pbnNucylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MTU2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE1NzYtXFxua2VybmVsL2JwZi9jb3JlLmM6MTU3NzpcXHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xcbmtlcm5lbC9icGYvY29yZS5jLTE1NzgtXFx0aWYgKGVudilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE2MDgtXFx0XFx0aWYgKGVudilcXG5rZXJuZWwvYnBmL2NvcmUuYzoxNjA5OlxcdFxcdFxcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxua2VybmVsL2JwZi9jb3JlLmMtMTYxMC1cXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTMxNT1zdGF0aWMgYm9vbCBicGZfcmV3cml0ZV9tdXN0X2Fib3J0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTMyMi1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjMyMzpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTMyNC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTUyMz12b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNTM2LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6NTM3OnN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxua2VybmVsL2JwZi9maXh1cHMuYy01Mzgte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02MTU9aW50IGJwZl9vcHRfcmVtb3ZlX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy02MjktXFxua2VybmVsL2JwZi9maXh1cHMuYzo2MzA6XFx0XFx0ZXJyID0gdmVyaWZpZXJfcmVtb3ZlX2luc25zKGVudiwgaSwgaik7XFxua2VybmVsL2JwZi9maXh1cHMuYy02MzEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM5PWludCBicGZfb3B0X3JlbW92ZV9ub3BzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY1Mi1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY1MzpcXHRcXHRlcnIgPSB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoZW52LCBpLCAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY1NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02NjQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NDgtYXBwbHlfcGF0Y2hfYnVmZmVyOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ5OlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzUwLVxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTc2Nj1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc5My1cXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaVswXTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc5NS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy04MTYtXFx0XFx0fSBlbHNlIGlmIChjbnQpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjgxNzpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgxOC1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy04NDktXFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg1MDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtODUxLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTkyMi1cXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6OTIzOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy05MjQtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTA1Ni1wYXRjaF9pbnNuX2J1ZjpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwNTc6XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNTgtXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTE2LVxcdCAqIG9uZXMgZm9yIHRoZSBoaWRkZW4gc3VicHJvZy4gSGVuY2UgYWxsIG9mIHRoZSBhZGp1c3RtZW50IG9wZXJhdGlvbnNcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MTc6XFx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUxOC1cXHQgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MTk6XFx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMC1cXHRpZiAoIXByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNjAwLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTYwMTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTYwMi1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNjkxLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTY5MjpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY5My1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIxLVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzIyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIzLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzQyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzQzLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk1OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk2LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4MzktXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODQwOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODQxLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjAtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODYxOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODYyLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4ODctXFx0XFx0XFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiArIG1vdjY0X3BlcmNwdV9yZWcgaW5zbi5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4ODg6XFx0XFx0XFx0ICogQWxsIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGNhbiBvbmx5XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODg5LVxcdFxcdFxcdCAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4OTctXFx0XFx0XFx0aSsrO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg5ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg5OS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xOTE4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTkxOTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTkyMC1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDA1LVxcdFxcdFxcdGNudCA9IDM7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDA2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDA3LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMzgtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDM5OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDQwLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNTctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDU4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDU5LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDAtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTAxOlxcdFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSxcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxMDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTgzLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjE4NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250KTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIxMy0jZW5kaWZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMTQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMTUtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIzMi1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyMzM6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI2Ni1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjgtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5OC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyOTk6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMDAtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjMyNC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzMjU6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMjYtXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM0MC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzNDE6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgMSk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzQyLVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzOTUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzk2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzk3LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0MTMtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDE0OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDE1LVxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0ODEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDgyOlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ4My1cXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDg5LVxcdFxcdCAqIHRvIGluc24gYWZ0ZXIgQlBGX1NUIHRoYXQgaW5pdHMgbWF5X2dvdG8gY291bnQuXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDkwOlxcdFxcdCAqIEFkanVzdG1lbnQgd2lsbCBzdWNjZWVkIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGRpZG4ndCBmYWlsLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ5MS1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MjUxOT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4MC1cXHQqdG90YWxfY250ID0gY250O1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MjU4MTpcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yNTgyLVxcdGlmICghbmV3X3Byb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjM2LjUxNDMzODg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MTc0MjUwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIFN0YXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBCUEYgc3RhdGUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBgY2hlY2tfcGt0X3B0cl9pZHNgIGZ1bmN0aW9uLCBzaW5jZSBpdCdzIGNhbGxlZCBmcm9tIGByZWdzYWZlYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcmVnc2FmZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW5kLCBpbXBvcnRhbnRseSwgd2hhdCB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBmdW5jdGlvbnMgd2l0aGluIGBzdGF0ZXMuY2AgYXJlIHRoYXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBvciB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IuIEknbSBsb29raW5nIGZvciBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGNvbm5lY3QgdG8gZWFjaCBvdGhlci4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgY29udGV4dCBmb3IgYGNoZWNrX3BrdF9wdHJfaWRzYCdzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDAuMDMxNzY2NTQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY5NzAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdzYWZlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9iYWNrdHJhY2suYz02NjU9dm9pZCBicGZfbWFya19hbGxfc2NhbGFyc19wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTczNS0gKiBJbiB0aGUgZm9ybWVyIGNhc2UsIHByZWNpc2UgbWFya2luZ3MgaW4gY3VycmVudCBzdGF0ZSBhcmUgY29tcGxldGVseVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzM2OiAqIGlnbm9yZWQgYnkgc3RhdGUgY29tcGFyaXNvbiBjb2RlIChzZWUgcmVnc2FmZSgpIGZvciBkZXRhaWxzKS4gT25seVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNzM3LSAqIGNoZWNrcG9pbnRlZCAoXFxcIm9sZFxcXCIpIHN0YXRlIHByZWNpc2UgbWFya2luZ3MgYXJlIGltcG9ydGFudCwgYW5kIGlmIG9sZFxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NzM4OiAqIHN0YXRlJ3MgcmVnaXN0ZXIvc2xvdCBpcyBwcmVjaXNlLCByZWdzYWZlKCkgYXNzdW1lcyBjdXJyZW50IHN0YXRlJ3NcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTczOS0gKiByZWdpc3Rlci9zbG90IGFzIHByZWNpc2UgYW5kIGNoZWNrcyB2YWx1ZSByYW5nZXMgZXhhY3RseSBhbmQgcHJlY2lzZWx5LiBJZlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MzU9ZW51bSBleGFjdF9sZXZlbCB7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0MS0vKiBSZXR1cm5zIHRydWUgaWYgKHJvbGQgc2FmZSBpbXBsaWVzIHJjdXIgc2FmZSkgKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjU0MjpzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTQzLVxcdFxcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTczNz1zdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4NC1cXHRcXHQgKiBDb25zdHJ1Y3QgYSBmYWtlIHJlZ2lzdGVyIGZvciBzdWNoIHN0YWNrIGFuZCBjYWxsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo3ODU6XFx0XFx0ICogcmVnc2FmZSgpIHRvIGVuc3VyZSBzY2FsYXIgaWRzIGFyZSBjb21wYXJlZC5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTc4Ni1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzkwLVxcdFxcdFxcdGlmIChvbGRfcmVnIFxcdTAwMjZcXHUwMDI2IGN1cl9yZWcpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjc5MTpcXHRcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNzkyLVxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODI3LVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODI4OlxcdFxcdFxcdGlmICghcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04MjktXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBpZG1hcCwgZXhhY3QpKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz04ODI9c3RhdGljIGJvb2wgc3RhY2tfYXJnX3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg5Ni1cXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrX2FyZ19yZWdzW2ldIDogXFx1MDAyNm5vdF9pbml0O1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODk3OlxcdFxcdGlmICghcmVnc2FmZShlbnYsIG9sZF9hcmcsIGN1cl9hcmcsIGlkbWFwLCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04OTgtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05ODA9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk5My1cXHRcXHRpZiAoKCgxIFxcdTAwM2NcXHUwMDNjIGkpIFxcdTAwMjYgbGl2ZV9yZWdzKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6OTk0OlxcdFxcdCAgICAhcmVnc2FmZShlbnYsIFxcdTAwMjZvbGQtXFx1MDAzZXJlZ3NbaV0sIFxcdTAwMjZjdXItXFx1MDAzZXJlZ3NbaV0sXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05OTUtXFx0XFx0XFx0ICAgICBcXHUwMDI2ZW52LVxcdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjQwLjA4MTQ2OTYzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU0MDU2MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHN0YXRlcy5jYCBmb3IgYGZ1bmNfc3RhdGVzX2VxdWFsYCBhbmQgYHJlZ3NhZmVgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHN0YXRlcy5jYCB0aGF0IGFyZSBhY3R1YWxseSAqdXNpbmcqIGBmdW5jX3N0YXRlc19lcXVhbGAgb3IgYHJlZ3NhZmVgLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYSBncmVwIHNlYXJjaDsgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjYWxscy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgYSByZWFzb24gd2UncmUgZXhhbWluaW5nIHRoaXMgc3BlY2lmaWNhbGx5IOKAkyBsaWtlbHkgYSBwb3RlbnRpYWwgYXJlYSBmb3Igb3B0aW1pemF0aW9uLCBhIHNlY3VyaXR5IGNvbmNlcm4sIG9yIHBlcmhhcHMganVzdCBhIGNvZGUgcmV2aWV3IHRvIGVuc3VyZSBjb25zaXN0ZW50IHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9uLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgZGVmaW5pdGlvbiwgaW50ZXJuYWwgdG8gdGhlIGZpbGUuIEkgYW0gbG9va2luZyBmb3Igc29tZXRoaW5nIG1vcmUgdmlzaWJsZSB0byB0aGUgb3V0c2lkZSB3b3JsZCwgYW5kIGFtIGZvY3VzaW5nIG9uIHRoaXMgZmlyc3QuXG5cblNvLCBJJ2xsIGdvIHRocm91Z2ggdGhlIGZ1bmN0aW9ucywgbm90aW5nICp3aGVyZSogdGhlc2UgY29tcGFyaXNvbnMgb3Igc2FmZXRseSBjaGVja3MgYXJlIGhhcHBlbmluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwdXJwb3NlIG9mIHRob3NlIGZ1bmN0aW9ucyAtIHdoYXQgaXMgaXQgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGZvcj8gV2hhdCBzdGF0ZXMgYXJlIHdlIHdvcmtpbmcgd2l0aD8gV2hhdCBpcyB0aGUgZnVuY3Rpb24gdHJ5aW5nIHRvIHZhbGlkYXRlIG9yIHNlY3VyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29kZSBzbWVsbHM/IEFyZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aGF0IEkgd291bGQgZXhwZWN0LCBnaXZlbiB0aGUgY29uc3RyYWludHMgb2YgdGhlIHN5c3RlbT8gQW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHdvdWxkIGJlIGEgaGlnaCBwcmlvcml0eS4gSSB3YW50IHRvIGJ1aWxkIGEgcXVpY2sgbWVudGFsIG1vZGVsIG9mIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGNhbGxzLiBPbmNlIHRoYXQgY29udGV4dCBpcyB1bmRlcnN0b29kLCBpdCdzIGVhc2llciB0byBhc3Nlc3Mgd2hldGhlciB0aGUgdXNhZ2UgaXMgc291bmQgb3IgaWYgdGhlcmUncyByb29tIGZvciBpbXByb3ZlbWVudCwgc3VjaCBhcyBjaGFuZ2luZyB0aGUgd2F5IHRoYXQgc29tZSBzdGF0ZXMgYXJlIHZhbGlkYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDIuNzM1NTI4ODY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEzNjMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdW5jX3N0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9OTA0PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk3OS0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk4MDpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMDE1PXN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ2LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwNDc6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDIuNzgzNjcwMzE2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTkyNTY4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzdGF0ZXNfZXF1YWxgIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHN0YXRlc19lcXVhbGAgZnVuY3Rpb24gYmVpbmcgdXNlZD9cIiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGJlaGF2aW9yLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcmVseWluZyBvbiBpdHMgY29tcGFyaXNvbiBsb2dpYy4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBvZiB0aGUgY29kZWJhc2UsIEknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcywgbWF5YmUgdXNpbmcgYW4gSURFJ3MgXCJmaW5kIHVzYWdlc1wiIGZlYXR1cmUsIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGNvZGUgYW5hbHlzaXMgdG9vbCBpZiB0aGlzIGlzIGEgbGFyZ2UgcHJvamVjdC4gVGhlIGdvYWwgaGVyZSBpc24ndCBqdXN0IGEgbGlzdDsgSSdtIGFmdGVyIHRoZSAqdHlwZXMqIG9mIGNvbnRleHRzLiBBcmUgd2UgY29tcGFyaW5nIHN0YXRlcyBpbiBhIHNpbXVsYXRpb24gbG9vcCwgaW4gdmFsaWRhdGlvbiBjaGVja3MsIGluIHNlcmlhbGl6YXRpb24gcm91dGluZXMsIG9yIHdoYXQ/IEtub3dpbmcgdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZSB0byBgc3RhdGVzX2VxdWFsYC4gVW5kZXJzdGFuZGluZyB0aGlzIGNvdWxkIGFsc28gcmV2ZWFsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgYnVncyBzdGVtbWluZyBmcm9tIHRoZSBmdW5jdGlvbidzIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyOTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo0NC44MDI5Mjk3MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA2MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTkwND1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzktICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05ODEtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTAwNz1zdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMTQtXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDE1OnN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxNi1cXHRcXHRcXHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ2LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwNDc6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDQ4LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTI3ND1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY3LVxcdFxcdFxcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2ODpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzY5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyX2ZyYW1lO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzc3LVxcdFxcdFxcdFxcdFxcdGl0ZXJfcmVnID0gXFx1MDAyNmN1cl9mcmFtZS1cXHUwMDNlcmVnc1tCUEZfUkVHXzFdO1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM3ODpcXHRcXHRcXHRcXHRcXHQvKiBjdXJyZW50IHN0YXRlIGlzIHZhbGlkIGR1ZSB0byBzdGF0ZXNfZXF1YWwoKSxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNzktXFx0XFx0XFx0XFx0XFx0ICogc28gd2UgY2FuIGFzc3VtZSB2YWxpZCBpdGVyIGFuZCByZWcgc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTItXFx0XFx0XFx0XFx0aWYgKHNsLVxcdTAwM2VzdGF0ZS5tYXlfZ290b19kZXB0aCAhPSBjdXItXFx1MDAzZW1heV9nb3RvX2RlcHRoIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzkzOlxcdFxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTQtXFx0XFx0XFx0XFx0XFx0bG9vcCA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzOTgtXFx0XFx0XFx0aWYgKGJwZl9jYWxsc19jYWxsYmFjayhlbnYsIGluc25faWR4KSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM5OTpcXHRcXHRcXHRcXHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDAwLVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA2LVxcdFxcdFxcdGlmIChzdGF0ZXNfbWF5YmVfbG9vcGluZyhcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDA3OlxcdFxcdFxcdCAgICBzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwOC1cXHRcXHRcXHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDM5LVxcdFxcdGxvb3AgPSBpbmNvbXBsZXRlX3JlYWRfbWFya3MoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NDA6XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0NDEtaGl0Olxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDc5LVxcdFxcdFxcdCAqXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDgwOlxcdFxcdFxcdCAqIC0gV2hlbiBhIHZlcmlmaWNhdGlvbiBwYXRoIGVuY291bnRlcnMgYSBgc3RhdGVzX2VxdWFsKC4uLixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTE0ODEtXFx0XFx0XFx0ICogICBSQU5HRV9XSVRISU4pYCBjb25kaXRpb24sIHRoZXJlIGV4aXN0cyBhIGNhbGwgY2hhaW4gZGVzY3JpYmluZyB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDQuODUxMzQzOTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzMjI1MjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFN0YXRlIFZpc2l0YXRpb24qKlxuXG5Pa2F5LCBzbyBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2AgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBXaGF0IGNoYW5nZXMgd2VyZSBtYWRlIGluIHRoZSB2ZXJpZmllciBjb2RlIHRoYXQgcmVsYXRlIHRvIHRoaXMgc3RhdGUgbWFuYWdlbWVudD8gTG9va3MgbGlrZSBgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKClgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlKClgLCBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSgpYCwgYW5kIHRoYXQgaGVscGVyLCBgbWFwX3ZhbHVlX2hhc19zdGF0aWNfaWRlbnRpdHkoKWAsIHdlcmUgYWxsIHRvdWNoZWQuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlaXIgc2NvcGUgYmVjYXVzZSB0aGF0J2xsIHRlbGwgbWUgaWYgdGhleSdyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIG9yIGlmIHRoZXkncmUgaW50ZXJuYWwgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gTGV0J3MgZmlyZSB1cCBgZ3JlcGAgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTYxMywiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo0OC4zODM1OTkzNTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTc5NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3N8c2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlfHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGUpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz04NTk9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc3LVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4Nzg6XFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc5LVxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfYXJyYXlfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMi1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAzOlxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwNC1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2FycmF5X2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MzM9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDE4LVxcdFxcdFxcdCAqIHdpdGggZGlmZmVyZW50IG1hcHMgYW5kIHRoZSByZWdpc3RlciBzdGF0ZXMgcHJlcGFyZWQgYnlcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMTk6XFx0XFx0XFx0ICogc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlIHdpbGwgYmUgYWNjdXJhdGUuXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDIwLVxcdFxcdFxcdCAqXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzczLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3NDpcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5Ni1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSBodGFiX21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTc6XFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk4LVxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzYtXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3NzpcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTctXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU5ODpcXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTktXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIyOlxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMy1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTA2PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwMjM6aW50IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDAyNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDA2OT1zdGF0aWMgaW50IHNldF9tYXBfZWxlbV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDc5LVxcdG1hcCA9IGluc25fYXV4LVxcdTAwM2VtYXBfcHRyX3N0YXRlLm1hcF9wdHI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDgwOlxcdGlmICghbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA4MS1cXHQgICAgIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZm9yX2VhY2hfY2FsbGJhY2spIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA4NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwODY6XFx0ZXJyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyhlbnYsIGNhbGxlciwgY2FsbGVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwODctXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDA5NT1zdGF0aWMgaW50IHNldF9sb29wX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMTYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTE3OnN0YXRpYyBpbnQgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTE4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDIwNT1zdGF0aWMgaW50IHNldF9yYnRyZWVfYWRkX2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyMzctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjM4OnN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDIzOS1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MjY9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5NzItXFx0XFx0ZXJyID0gcHVzaF9jYWxsYmFja19jYWxsKGVudiwgaW5zbiwgaW5zbl9pZHgsIG1ldGEuc3VicHJvZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk3MzpcXHRcXHRcXHRcXHRcXHQgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5NzQtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3Njg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg5NC1cXHRcXHRlcnIgPSBwdXNoX2NhbGxiYWNrX2NhbGwoZW52LCBpbnNuLCBpbnNuX2lkeCwgbWV0YS5zdWJwcm9nbm8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzODk1OlxcdFxcdFxcdFxcdFxcdCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg5Ni1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM5MDQtXFx0XFx0ZXJyID0gcHVzaF9jYWxsYmFja19jYWxsKGVudiwgaW5zbiwgaW5zbl9pZHgsIG1ldGEuc3VicHJvZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzkwNTpcXHRcXHRcXHRcXHRcXHQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzOTA2LVxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjM6NDguNDM2MTg0MDI0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NjUxNTEyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIFZlcmlmaWVyIE1vZGlmaWNhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IGlzIHBpbnBvaW50aW5nIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUuIEZpcnN0LCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGlzIGBicGZfY2hlY2tgLCBidXQgdGhhdCdzIGEgZ2VuZXJhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCBvciBkaXJlY3RseSByZWxldmFudCB0byB0aGUgY2hhbmdlcyB0byBsaXN0IGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlOlxuXG4qICAgSW4gYGtlcm5lbC9icGYvY2ZnLmNgLCBJJ20gbG9va2luZyBhdCBgYnBmX2NoZWNrX2NmZ2AgKHdoaWNoIGNhbGxzIGB2aXNpdF9pbnNuYCB3aGljaCBjYWxscyBgcHVzaF9pbnNuYCkuXG4qICAgVGhlbiBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AsIHRoZXJlJ3MgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYGJwZl9vcHRfcmVtb3ZlX2RlYWRfY29kZWAsIGFuZCBgYnBmX29wdF9yZW1vdmVfbm9wc2AuXG4qICAgTW92aW5nIG9uIHRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgSSBoYXZlIGBjaGVja19wa3RfcHRyX2lkc2AsIGByZWdzYWZlYCwgYW5kIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuXG4qICAgRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgbmVlZCB0byBsb29rIGF0IGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgLCBgc2V0X3RpbWVyX2NhbGxiYWNrX3N0YXRlYCwgYHNldF90YXNrX3dvcmtfc2NoZWR1bGVfY2FsbGJhY2tfc3RhdGVgLCBhbmQgYGJwZl9jaGVja2AgKGFnYWluKS5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBzeW1ib2xzIGFyZSBpbiBgdm1saW51eGAgb3IgaWYgdGhleSBnZXQgaW5saW5lZC4gV2l0aCBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhleSdyZSBkZWZpbml0ZWx5IGV4cG9ydGVkLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGJpdCB0cmlja2llciwgdGhleSBtYXkgb3IgbWF5IG5vdCBiZSBpbmxpbmVkIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIncyBvcHRpbWl6YXRpb25zLiBTbywgdG8gYmUgc2FmZSwgSSdsbCBsaXN0IGJvdGggbm9uLXN0YXRpYyBzeW1ib2xzIGFzIHdlbGwgYXMgc3RhdGljIG9uZXMgaWYgdGhleSBhcmVuJ3Qgc3RhdGljIGlubGluZSBpbiBoZWFkZXJzLiBTZWN0aW9uIDQgY29uZmlybXMgdGhpczogSSBuZWVkIHRvIHRhcmdldCAqc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyogYW5kIGVudHJ5cG9pbnRzLCBhbmQgYWNjb3VudCBmb3Igc3RhdGljIGlubGluZXMuXG5cblNvLCBsZXQncyBuYWlsIGRvd24gdGhpcyBsaXN0LCBjb25maXJtaW5nIHRoYXQgYWxsIHRoZSBjb2RlIGZyb20gdGhlIGRpZmYgaXMgaW5jbHVkZWQ6XG4xLiAgYHB1c2hfaW5zbmAgYW5kIGBicGZfY2hlY2tfY2ZnYCBpbiBgY2ZnLmNgXG4yLiAgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYCwgYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgIGluIGBmaXh1cHMuY2BcbjMuICBgY2hlY2tfcGt0X3B0cl9pZHNgLCBgcmVnc2FmZWAsIGFuZCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGluIGBzdGF0ZXMuY2BcbjQuICBgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzYCwgYHNldF90aW1lcl9jYWxsYmFja19zdGF0ZWAsIGBzZXRfdGFza193b3JrX3NjaGVkdWxlX2NhbGxiYWNrX3N0YXRlYCBhbmQgYG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5YCBpbiBgdmVyaWZpZXIuY2BcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGFueSBkZXBlbmRlbmNpZXMgb24gY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgaXQncyBhIHNpbXBsZSBib29sZWFuLiBDaGVja2luZyB0aGUgY29kZSBmb3IgaWZkZWZzIGluIGBjZmcuY2AsIGBmaXh1cHMuY2AsIGBzdGF0ZXMuY2AsIGFuZCBgdmVyaWZpZXIuY2AsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55LiBgQlBGX1NZU0NBTExgIHNlZW1zIHRvIGJlIGFsbCBJIG5lZWQsIGFuZCBpdCBzZWxlY3RzIEJQRi5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogSXMgdGhpcyBgV29ydGhGdXp6aW5nPXRydWVgPyBBYnNvbHV0ZWx5LiBUaGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIEJQRiB2ZXJpZmllcidzIGNvbnRyb2wgZmxvdyBncmFwaCBjb25zdHJ1Y3Rpb24sIGluc3RydWN0aW9uIHJld3JpdGluZywgcGFja2V0IHBvaW50ZXIgc3RhdGUgY2hlY2tzLCBhbmQgbG9jayBJRCBhc3NpZ25tZW50LiBUaGlzIGFsbCB0b3VjaGVzIGNvcmUsIHJlYWNoYWJsZSBsb2dpYywgYW5kIHRoZSBCUEYgc3lzdGVtIGNhbGwgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuXG5cbk9rYXksIGxldCdzIG1ha2UgYSBmaW5hbCwgYWNjdXJhdGUgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDpcblxuKiAgIGBicGZfY2hlY2tfY2ZnYFxuKiAgIGBwdXNoX2luc25gXG4qICAgYGJwZl9wYXRjaF9pbnNuX2RhdGFgXG4qICAgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2BcbiogICBgY2hlY2tfcGt0X3B0cl9pZHNgXG4qICAgYHJlZ3NhZmVgXG4qICAgYGJwZl9pc19zdGF0ZV92aXNpdGVkYFxuKiAgIGBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NgXG4qICAgYHNldF90aW1lcl9jYWxsYmFja19zdGF0ZWBcbiogICBgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZWBcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBub25lIG9mIHRoZXNlIGFyZSBnZW5lcmljIG9yIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgQlBGIHZlcmlmaWVyIHN1YnN5c3RlbSBhbmQgbm90IGdlbmVyYWwga2VybmVsIGxpZmVjeWNsZSBmdW5jdGlvbnMsIHdoaWNoIGlzIGdvb2QuXG5cbkZpbmFsbHksIEkgY2FuIHF1aWNrbHkgc3VtbWFyaXNlIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBzZXJpZXMgaXMgbW9kaWZ5aW5nIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGludm9sdmVkIGluIHZhbGlkYXRpbmcgY29udHJvbCBmbG93LCBzaWduYWwgaGFuZGxpbmcsIHBvaW50ZXIgY29tcGFyaXNvbiwgYW5kIHVuaXF1ZSBsb2NrIElEIGFzc2lnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYXJlIGV4ZXJjaXNlZCB0aHJvdWdoIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBzeXNjYWxsLCBzb1xuXG4iLCJJbnB1dFRva2VucyI6MjgxNzUsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo1Ny45MDEzMzc2NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU3NDcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tfY2ZnXCIsXG4gICAgXCJwdXNoX2luc25cIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tfY2ZnXCIsXG4gICAgXCJwdXNoX2luc25cIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiY2hlY2tfcGt0X3B0cl9pZHNcIixcbiAgICBcInJlZ3NhZmVcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3NcIixcbiAgICBcInNldF90aW1lcl9jYWxsYmFja19zdGF0ZVwiLFxuICAgIFwic2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgZXhlY3V0aW9uIHBhdGhzLCBpbmNsdWRpbmcgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIHN1YnByb2dyYW0gYm91bmRhcnkgY2hlY2tzLCBzaWduYWwtYXdhcmUgaW5zdHJ1Y3Rpb24gcmV3cml0aW5nL3JlbW92YWwgcGFzc2VzLCBwYWNrZXQgcG9pbnRlciBzdGF0ZSBlcXVpdmFsZW5jZSBjb21wYXJpc29uIChyZWdzYWZlKSwgYW5kIGxvY2sgaWRlbnRpdHkgdHJhY2tpbmcgZm9yIGNhbGxiYWNrIGFyZ3VtZW50cy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLikgc3lzY2FsbCBhbmQgZGlyZWN0bHkgYWZmZWN0IHZlcmlmaWNhdGlvbiBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5IGludmFyaWFudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjU3Ljk3NDkxODMyNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNzUwMDAzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyMzo1Ny45NzU0MDE1OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjM3NDUxMTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIENGRyBhbmFseXNpcyBpbiBzZXZlcmFsIGFyZWFzOlxcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXFxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxcbjMuIEFkZHMgZmF0YWwgc2lnbmFsIGNoZWNrcyAoYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgKSB0byBwcmV2ZW50IG5vbi1raWxsYWJsZSBsb29wcyBkdXJpbmcgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcvcmVtb3ZhbCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuXFxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuIEFsbCBzdHJ1Y3QgZmllbGRzIGFkZGVkIChgcGt0X3B0cl9kZWx0YWAsIGBwa3RfcHRyX2RlbHRhX3NldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSByZWFkIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB2ZXJpZmllciBsb2dpYywgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGFuZCBzaWduYWwtaGFuZGxpbmcgaW1wcm92ZW1lbnRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjJlYzJhMzhlOTgzYmEwMDI0MzFmZmI1YmIxNzcwN2M3MzYwZGNlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6MjM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uNWNmOTJjZTE4NTIwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC04NTQsNiArODU0LDggQEAgc3RydWN0IGJhY2t0cmFja19zdGF0ZSB7XG4gc3RydWN0IGJwZl9pZF9wYWlyIHtcbiBcdHUzMiBvbGQ7XG4gXHR1MzIgY3VyO1xuK1x0czMyIHBrdF9wdHJfZGVsdGE7XG4rXHRib29sIHBrdF9wdHJfZGVsdGFfc2V0O1xuIH07XG4gXG4gc3RydWN0IGJwZl9pZG1hcCB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcbmluZGV4IDg0MmM3ZDFlYWJjY2MuLmUzYzkwNDMyOGVkZTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NmZy5jXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXG5AQCAtMTAyLDYgKzEwMiw3IEBAIGVudW0ge1xuICAqL1xuIHN0YXRpYyBpbnQgcHVzaF9pbnNuKGludCB0LCBpbnQgdywgaW50IGUsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuK1x0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7XG4gXHRpbnQgKmluc25fc3RhY2sgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhY2s7XG4gXHRpbnQgKmluc25fc3RhdGUgPSBlbnYtXHUwMDNlY2ZnLmluc25fc3RhdGU7XG4gXG5AQCAtMTIxLDYgKzEyMiwyNiBAQCBzdGF0aWMgaW50IHB1c2hfaW5zbihpbnQgdCwgaW50IHcsIGludCBlLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBjaGVja19zdWJwcm9ncygpIHByZXZlbnRzIGNvbnRyb2wgZmxvdyBmcm9tIGZhbGxpbmcgdGhyb3VnaCBhXG4rXHQgKiBzdWJwcm9ncmFtIGJvdW5kYXJ5LCBidXQgcnVucyBiZWZvcmUgQ08tUkUgcmVsb2NhdGlvbnMgY2FuIHJld3JpdGUgYW5cbitcdCAqIGluc3RydWN0aW9uLiBSZWVzdGFibGlzaCB0aGUgaW52YXJpYW50IG9uIHRoZSBmaW5hbCBpbnN0cnVjdGlvbiBzdHJlYW1cbitcdCAqIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIENGRyB1c2VkIGJ5IGxhdGVyIHBlci1zdWJwcm9ncmFtIHBhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGUgPT0gRkFMTFRIUk9VR0gpIHtcbitcdFx0c3VicHJvZyA9IGJwZl9maW5kX2NvbnRhaW5pbmdfc3VicHJvZyhlbnYsIHQpO1xuK1x0XHRpZiAodyBcdTAwM2Mgc3VicHJvZy1cdTAwM2VzdGFydCB8fCB3IFx1MDAzZT0gKHN1YnByb2cgKyAxKS1cdTAwM2VzdGFydCkge1xuK1x0XHRcdHZlcmJvc2VfbGluZm8oZW52LCB0LCBcIiVkOiBcIiwgdCk7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiZmFsbC10aHJvdWdoIG91dCBvZiBzdWJwcm9nIGZyb20gaW5zbiAlZCB0byAlZFxcblwiLCB0LCB3KTtcbitcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbitcdFx0XHRcdGVudiwgdCwgXCJmYWxsLXRocm91Z2ggbGVhdmVzIHN1YnByb2dyYW1cIixcbitcdFx0XHRcdFwiS2VlcCBmYWxsLXRocm91Z2ggY29udHJvbCBmbG93IGluc2lkZSB0aGUgY3VycmVudCBzdWJwcm9ncmFtLlwiLFxuK1x0XHRcdFx0XCJJbnN0cnVjdGlvbiAlZCBmYWxscyB0aHJvdWdoIHRvIGluc3RydWN0aW9uICVkIG91dHNpZGUgaXRzIHN1YnByb2dyYW0uXCIsXG4rXHRcdFx0XHR0LCB3KTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGUgPT0gQlJBTkNIKSB7XG4gXHRcdC8qIG1hcmsgYnJhbmNoIHRhcmdldCBmb3Igc3RhdGUgcHJ1bmluZyAqL1xuIFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IDUyZDNjZWMzMzY3MjcuLjk0MDFmZmZjZWRmZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtOCw2ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ic2VhcmNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZGlzYXNtLmhcIlxuIFxuQEAgLTMwNiwxMiArMzA3LDI4IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9wb2tlX2Rlc2NzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGxlbilcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBTb21lIHBvc3QtdmVyaWZpY2F0aW9uIGluc3RydWN0aW9uIHJld3JpdGluZyBwYXNzZXMgcmVxdWlyZSBhblxuKyAqIE8ocHJvZy1cdTAwM2VsZW4pIG9wZXJhdGlvbiBwZXIgaW5zdHJ1Y3Rpb24uIEtlZXAgdGhlaXIgc2hhcmVkIHByaW1pdGl2ZXNcbisgKiBraWxsYWJsZSBhbmQgcHJlZW1wdGlibGUuXG4rICovXG4rc3RhdGljIGJvb2wgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCh2b2lkKVxuK3tcbitcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjb25kX3Jlc2NoZWQoKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRpZiAobGVuIFx1MDAzZSAxKSB7XG4gXHRcdG5ld19kYXRhID0gdnJlYWxsb2MoZW52LVx1MDAzZWluc25fYXV4X2RhdGEsXG4gXHRcdFx0XHQgICAgYXJyYXlfc2l6ZShlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gKyBsZW4gLSAxLFxuQEAgLTUyMyw2ICs1NDAsOSBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFx0dW5zaWduZWQgaW50IG9yaWdfcHJvZ19sZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKGJwZl9yZXdyaXRlX211c3RfYWJvcnQoKSlcbitcdFx0cmV0dXJuIC1FSU5UUjtcbitcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG5AQCAtMjY2Niw0ICsyNjg2LDMgQEAgaW50IGJwZl9yZW1vdmVfZmFzdGNhbGxfc3BpbGxzX2ZpbGxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IDY2ZmIxMWI2YzZhNzYuLjJmOGYzZmUxNjRiMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtMzM5LDYgKzMzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2lkcyh1MzIgb2xkX2lkLCB1MzIgY3VyX2lkLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdGlmIChpZG1hcC1cdTAwM2VjbnQgXHUwMDNjIEJQRl9JRF9NQVBfU0laRSkge1xuIFx0XHRtYXBbaWRtYXAtXHUwMDNlY250XS5vbGQgPSBvbGRfaWQ7XG4gXHRcdG1hcFtpZG1hcC1cdTAwM2VjbnRdLmN1ciA9IGN1cl9pZDtcbitcdFx0bWFwW2lkbWFwLVx1MDAzZWNudF0ucGt0X3B0cl9kZWx0YV9zZXQgPSBmYWxzZTtcbiBcdFx0aWRtYXAtXHUwMDNlY250Kys7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTM1Miw2ICszNTMsNDMgQEAgc3RhdGljIGJvb2wgY2hlY2tfaWRzKHUzMiBvbGRfaWQsIHUzMiBjdXJfaWQsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjaGVja19wa3RfcHRyX2lkcyhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb2xkLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIsXG4rXHRcdFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4re1xuK1x0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cdTAwM2VtYXA7XG4rXHRzNjQgZGVsdGE7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGlmICghY2hlY2tfaWRzKG9sZC1cdTAwM2VpZCwgY3VyLVx1MDAzZWlkLCBpZG1hcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghb2xkLVx1MDAzZWlkKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBQYWNrZXQgcmFuZ2UgaXMgc2hhcmVkIGJ5IGFsbCBwb2ludGVycyB3aXRoIHRoZSBzYW1lIElELiBQcmVzZXJ2ZVxuK1x0ICogdGhlaXIgcmVsYXRpdmUgZGlzcGxhY2VtZW50LCB3aGlsZSBhbGxvd2luZyB0aGUgd2hvbGUgY2xhc3MgdG8gbW92ZS5cbitcdCAqIFBhY2tldCBwb2ludGVyIG9mZnNldHMgYXJlIGJvdW5kZWQgYnkgQlBGX01BWF9WQVJfT0ZGLCBzbyB0aGUgZGVsdGFcbitcdCAqIGJldHdlZW4gdHdvIHZhbGlkIG9mZnNldHMgZml0cyBpbiBzMzIuXG4rXHQgKi9cbitcdGRlbHRhID0gKHM2NCkoY3VyLVx1MDAzZXI2NC5iYXNlIC0gb2xkLVx1MDAzZXI2NC5iYXNlKTtcbitcdGlmIChkZWx0YSBcdTAwM2MgUzMyX01JTiB8fCBkZWx0YSBcdTAwM2UgUzMyX01BWClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWRtYXAtXHUwMDNlY250OyBpKyspIHtcbitcdFx0aWYgKG1hcFtpXS5vbGQgIT0gb2xkLVx1MDAzZWlkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoIW1hcFtpXS5wa3RfcHRyX2RlbHRhX3NldCkge1xuK1x0XHRcdG1hcFtpXS5wa3RfcHRyX2RlbHRhID0gZGVsdGE7XG4rXHRcdFx0bWFwW2ldLnBrdF9wdHJfZGVsdGFfc2V0ID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gbWFwW2ldLnBrdF9wdHJfZGVsdGEgPT0gZGVsdGE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogQ29tcGFyZSBzY2FsYXIgcmVnaXN0ZXIgSURzIGZvciBzdGF0ZSBlcXVpdmFsZW5jZS5cbiAgKlxuQEAgLTYzMiw4ICs2NzAsOCBAQCBzdGF0aWMgYm9vbCByZWdzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyb2xkLFxuIFx0XHR9IGVsc2UgaWYgKHJvbGQtXHUwMDNlcmFuZ2UgXHUwMDNlIHJjdXItXHUwMDNlcmFuZ2UpIHtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbi1cdFx0LyogaWQgcmVsYXRpb25zIG11c3QgYmUgcHJlc2VydmVkICovXG4tXHRcdGlmICghY2hlY2tfaWRzKHJvbGQtXHUwMDNlaWQsIHJjdXItXHUwMDNlaWQsIGlkbWFwKSlcbitcdFx0LyogaWQgcmVsYXRpb25zIGFuZCBpbnRyYS1jbGFzcyBkaXNwbGFjZW1lbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi9cbitcdFx0aWYgKCFjaGVja19wa3RfcHRyX2lkcyhyb2xkLCByY3VyLCBpZG1hcCkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHQvKiBuZXcgdmFsIG11c3Qgc2F0aXNmeSBvbGQgdmFsIGtub3dsZWRnZSAqL1xuIFx0XHRyZXR1cm4gcmFuZ2Vfd2l0aGluKHJvbGQsIHJjdXIpIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMWMzMDM5ZjNmYzMyMy4uYjA4NTAxNzM0ZGRmYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDQ3LDYgKzQ0NywxMSBAQCBzdGF0aWMgYm9vbCByZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIFx0cmV0dXJuIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlZ19idGZfcmVjb3JkKHJlZyksIEJQRl9TUElOX0xPQ0sgfCBCUEZfUkVTX1NQSU5fTE9DSyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4re1xuK1x0cmV0dXJuIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtYXhfZW50cmllcyA9PSAxO1xuK31cbitcbiBzdGF0aWMgYm9vbCB0eXBlX2lzX3Jkb25seV9tZW0odTMyIHR5cGUpXG4ge1xuIFx0cmV0dXJuIHR5cGUgXHUwMDI2IE1FTV9SRE9OTFk7XG5AQCAtMTAwMzUsNiArMTAwNDAsOSBAQCBpbnQgbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRfX21hcmtfcmVnX2tub3duX3plcm8oXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSk7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzFdLm1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiBwb2ludGVyIHRvIHN0YWNrIG9yIG51bGwgKi9cbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0gPSBjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzNdO1xuQEAgLTEwMTMxLDYgKzEwMTM5LDkgQEAgc3RhdGljIGludCBzZXRfdGltZXJfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdF9fbWFya19yZWdfa25vd25femVybyhcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdKTtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0ciA9IG1hcF9wdHI7XG4gXHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF91aWQgPSBtYXBfdWlkO1xuK1x0aWYgKHJlZ19tYXlfcG9pbnRfdG9fc3Bpbl9sb2NrKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtYXBfdmFsdWVfaGFzX3N0YXRpY19pZGVudGl0eShjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLm1hcF9wdHIpKVxuK1x0XHRjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO1xuIFxuIFx0LyogdW51c2VkICovXG4gXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzRdKTtcbkBAIC0xMDI0OSw2ICsxMDI2MCw5IEBAIHN0YXRpYyBpbnQgc2V0X3Rhc2tfd29ya19zY2hlZHVsZV9jYWxsYmFja19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10pO1xuIFx0Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXS5tYXBfcHRyID0gbWFwX3B0cjtcbiBcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3VpZCA9IG1hcF91aWQ7XG4rXHRpZiAocmVnX21heV9wb2ludF90b19zcGluX2xvY2soXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbQlBGX1JFR18zXSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5KGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10ubWFwX3B0cikpXG4rXHRcdGNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfM10uaWQgPSArK2Vudi1cdTAwM2VpZF9nZW47XG4gXG4gXHQvKiB1bnVzZWQgKi9cbiBcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW0JQRl9SRUdfNF0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcmVfcmVsb2NfcmF3LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3JlX3JlbG9jX3Jhdy5jXG5pbmRleCBhMThkMzY4MGZiMTY5Li5jMzUwZmJiOTU4NDU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29yZV9yZWxvY19yYXcuY1xuQEAgLTE0LDYgKzE0LDExNyBAQFxuIFxuIHN0YXRpYyBjaGFyIGxvZ1sxNiAqIDEwMjRdO1xuIFxuK3N0YXRpYyBpbnQgbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhpbnQgYnRmX2ZkLCBpbnQgbWFpbl9pZCwgaW50IHN1Yl9pZCxcbitcdFx0XHRcdCAgaW50IGVudW1faWQsIGludCBhY2Nlc3Nfc3RyX29mZiwgYm9vbCByZWxvY2F0ZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbitcdFx0QlBGX0NBTExfUkVMKDIpLFxuK1x0XHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9mdW5jX2luZm8gZnVuY3NbXSA9IHtcbitcdFx0eyAuaW5zbl9vZmYgPSAwLCAudHlwZV9pZCA9IG1haW5faWQgfSxcbitcdFx0eyAuaW5zbl9vZmYgPSAzLCAudHlwZV9pZCA9IHN1Yl9pZCB9LFxuK1x0fTtcbitcdHN0cnVjdCBicGZfY29yZV9yZWxvIHJlbG8gPSB7XG4rXHRcdC5pbnNuX29mZiA9IDIgKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSxcbitcdFx0LnR5cGVfaWQgPSBlbnVtX2lkLFxuK1x0XHQuYWNjZXNzX3N0cl9vZmYgPSBhY2Nlc3Nfc3RyX29mZixcbitcdFx0LmtpbmQgPSBCUEZfQ09SRV9FTlVNVkFMX1ZBTFVFLFxuK1x0fTtcbitcdHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7XG4rXHRcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsXG4rXHRcdC5pbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpLFxuK1x0XHQuaW5zbnMgPSAoX191NjQpaW5zbnMsXG4rXHRcdC5saWNlbnNlID0gKF9fdTY0KVwiR1BMXCIsXG4rXHRcdC5sb2dfYnVmID0gKF9fdTY0KWxvZyxcbitcdFx0LmxvZ19zaXplID0gc2l6ZW9mKGxvZyksXG4rXHRcdC5sb2dfbGV2ZWwgPSAxLFxuK1x0XHQucHJvZ19idGZfZmQgPSBidGZfZmQsXG4rXHRcdC5mdW5jX2luZm9fcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pLFxuK1x0XHQuZnVuY19pbmZvID0gKF9fdTY0KWZ1bmNzLFxuK1x0XHQuZnVuY19pbmZvX2NudCA9IEFSUkFZX1NJWkUoZnVuY3MpLFxuK1x0fTtcbitcbitcdGlmIChyZWxvY2F0ZSkge1xuK1x0XHRhdHRyLmNvcmVfcmVsb19jbnQgPSAxO1xuK1x0XHRhdHRyLmNvcmVfcmVsb3MgPSAoX191NjQpXHUwMDI2cmVsbztcbitcdFx0YXR0ci5jb3JlX3JlbG9fcmVjX3NpemUgPSBzaXplb2YocmVsbyk7XG4rXHR9XG4rXHRtZW1zZXQobG9nLCAwLCBzaXplb2YobG9nKSk7XG4rXHRyZXR1cm4gc3lzX2JwZl9wcm9nX2xvYWQoXHUwMDI2YXR0ciwgc2l6ZW9mKGF0dHIpLCAxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9wb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3Iodm9pZClcbit7XG4rXHRjb25zdCB2b2lkICpyYXdfYnRmO1xuK1x0c3RydWN0IGJ0ZiAqYnRmID0gTlVMTDtcbitcdF9fdTMyIHJhd19idGZfc2l6ZTtcbitcdGludCBhY2Nlc3Nfc3RyX29mZiwgYnRmX2ZkID0gLTEsIGVudW1faWQ7XG4rXHRpbnQgaW50X2lkLCBtYWluX2lkLCBwcm9nX2ZkID0gLTEsIHByb3RvX2lkLCBzdWJfaWQ7XG4rXG4rXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXHRpbnRfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVChpbnRfaWQsIDAsIFwiYWRkX2ludFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cHJvdG9faWQgPSBidGZfX2FkZF9mdW5jX3Byb3RvKGJ0ZiwgaW50X2lkKTtcbitcdGlmICghQVNTRVJUX0dUKHByb3RvX2lkLCAwLCBcImFkZF9mdW5jX3Byb3RvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRtYWluX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwibWFpbl9mblwiLCBCVEZfRlVOQ19TVEFUSUMsIHByb3RvX2lkKTtcbitcdGlmICghQVNTRVJUX0dUKG1haW5faWQsIDAsIFwiYWRkX21haW5fZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c3ViX2lkID0gYnRmX19hZGRfZnVuYyhidGYsIFwic3ViX2ZuXCIsIEJURl9GVU5DX1NUQVRJQywgcHJvdG9faWQpO1xuK1x0aWYgKCFBU1NFUlRfR1Qoc3ViX2lkLCAwLCBcImFkZF9zdWJfZnVuY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0ZW51bV9pZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBcImNvcmVfcmVsb19zdWJwcm9nX3BvaXNvbl9taXNzaW5nXCIsIDQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoZW51bV9pZCwgMCwgXCJhZGRfZW51bVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfT0soYnRmX19hZGRfZW51bV92YWx1ZShidGYsIFwidmFsdWVcIiwgMCksIFwiYWRkX2VudW1fdmFsdWVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGFjY2Vzc19zdHJfb2ZmID0gYnRmX19hZGRfc3RyKGJ0ZiwgXCIwXCIpO1xuK1x0aWYgKCFBU1NFUlRfR1QoYWNjZXNzX3N0cl9vZmYsIDAsIFwiYWRkX2FjY2Vzc19zdHJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHJhd19idGYgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2cmF3X2J0Zl9zaXplKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihyYXdfYnRmLCBcInJhd19idGZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGJ0Zl9mZCA9IGJwZl9idGZfbG9hZChyYXdfYnRmLCByYXdfYnRmX3NpemUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYnRmX2ZkLCAwLCBcImJ0Zl9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBUaGUgc2FtZSB0d28tc3VicHJvZ3JhbSBwcm9ncmFtIGlzIHZhbGlkIGJlZm9yZSB0aGUgcmVsb2NhdGlvbi4gKi9cbitcdHByb2dfZmQgPSBsb2FkX2NvcmVfcmVsb19zdWJwcm9nKGJ0Zl9mZCwgbWFpbl9pZCwgc3ViX2lkLCBlbnVtX2lkLFxuK1x0XHRcdFx0XHQgYWNjZXNzX3N0cl9vZmYsIGZhbHNlKTtcbitcdGlmICghQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwiY29udHJvbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdC8qXG4rXHQgKiBQb2lzb24gdGhlIGZpcnN0IHN1YnByb2dyYW0ncyB0ZXJtaW5hbCBleGl0LiBUaGUgdmVyaWZpZXIgbXVzdCByZWplY3RcbitcdCAqIHRoZSByZXN1bHRpbmcgY29udHJvbCBmbG93IGFjcm9zcyB0aGUgc3VicHJvZ3JhbSBib3VuZGFyeSBpbiB0aGUgQ0ZHLlxuK1x0ICovXG4rXHRwcm9nX2ZkID0gbG9hZF9jb3JlX3JlbG9fc3VicHJvZyhidGZfZmQsIG1haW5faWQsIHN1Yl9pZCwgZW51bV9pZCxcbitcdFx0XHRcdFx0IGFjY2Vzc19zdHJfb2ZmLCB0cnVlKTtcbitcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFwicG9pc29uZWRfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIobG9nLCBcImZhbGwtdGhyb3VnaCBvdXQgb2Ygc3VicHJvZyBmcm9tIGluc24gMiB0byAzXCIsXG4rXHRcdFx0ICBcInBvaXNvbmVkX2xvYWRfbG9nXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoZW52LnZlcmJvc2l0eSBcdTAwM2UgVkVSQk9TRV9OT1JNQUwgXHUwMDI2XHUwMDI2IGxvZ1swXSkge1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIHN0YXJ0IC0tLS0tLS0tXFxuXCIpO1xuK1x0XHRwcmludGYoXCIlc1wiLCBsb2cpO1xuK1x0XHRwcmludGYoXCItLS0tLS0tLSBwcm9ncmFtIGxvYWQgbG9nIGVuZCAtLS0tLS0tLS0tXFxuXCIpO1xuK1x0fVxuK1x0Y2xvc2UocHJvZ19mZCk7XG4rXHRjbG9zZShidGZfZmQpO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rfVxuK1xuIC8qIENoZWNrIHRoYXQgdmVyaWZpZXIgcmVqZWN0cyBCUEYgcHJvZ3JhbSBjb250YWluaW5nIHJlbG9jYXRpb25cbiAgKiBwb2ludGluZyB0byBub24tZXhpc3RlbnQgQlRGIHR5cGUuXG4gICovXG5AQCAtMTIwLDYgKzIzMSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFkX2xvY2FsX2lkKHZvaWQpXG4gXG4gdm9pZCB0ZXN0X2NvcmVfcmVsb2NfcmF3KHZvaWQpXG4ge1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJwb2lzb25lZF9zdWJwcm9nX3Rlcm1pbmF0b3JcIikpXG4rXHRcdHRlc3RfcG9pc29uZWRfc3VicHJvZ190ZXJtaW5hdG9yKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJhZF9sb2NhbF9pZFwiKSlcbiBcdFx0dGVzdF9iYWRfbG9jYWxfaWQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMGY3OGRiM2JjY2M3NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ19sb2FkX3NpZ25hbC5jXG5AQCAtMCwwICsxLDEzMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNkZWZpbmUgTk9QX0NOVFx0XHQzMjc2OFxuKyNkZWZpbmUgTUlOX0tJTExfREVMQVlfTlNcdCgxMDBVTEwgKiAxMDAwICogMTAwMClcbisjZGVmaW5lIFJFQVBfVElNRU9VVF9OU1x0XHQoMTAwMFVMTCAqIDEwMDAgKiAxMDAwKVxuK1xuK3N0YXRpYyBfX3U2NCBtb25vdG9uaWNfbnModm9pZClcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHM7XG4rXG4rXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMpO1xuK1x0cmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAwMDAwMDBVTEwgKyB0cy50dl9uc2VjO1xuK31cbitcbitzdGF0aWMgdm9pZCBzbGVlcF9ucyhfX3U2NCBkdXJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7XG4rXHRcdC50dl9zZWMgPSBkdXJhdGlvbiAvIDEwMDAwMDAwMDBVTEwsXG4rXHRcdC50dl9uc2VjID0gZHVyYXRpb24gJSAxMDAwMDAwMDAwVUxMLFxuK1x0fTtcbitcbitcdHdoaWxlIChuYW5vc2xlZXAoXHUwMDI2dHMsIFx1MDAyNnRzKSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpXG4rXHRcdDtcbit9XG4rXG4rc3RhdGljIGludCB3YWl0cGlkX3RpbWVvdXQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgX191NjQgdGltZW91dClcbit7XG4rXHRfX3U2NCBkZWFkbGluZSA9IG1vbm90b25pY19ucygpICsgdGltZW91dDtcbitcdGludCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdhaXRwaWQocGlkLCBzdGF0dXMsIFdOT0hBTkcpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH0gd2hpbGUgKG1vbm90b25pY19ucygpIFx1MDAzYyBkZWFkbGluZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCB0ZXN0X3Byb2dfbG9hZF9zaWduYWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gTlVMTDtcbitcdF9fdTY0IHN0YXJ0LCBjb250cm9sX3RpbWUsIGtpbGxfZGVsYXk7XG4rXHRpbnQgcGlwZWZkWzJdID0geyAtMSwgLTEgfTtcbitcdGludCBwcm9nX2ZkID0gLTEsIHN0YXR1cyA9IDA7XG4rXHRwaWRfdCBwaWQgPSAtMTtcbitcdGNoYXIgYnl0ZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRpbnNucyA9IGNhbGxvYyhOT1BfQ05UICsgMiwgc2l6ZW9mKCppbnNucykpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluc25zLCBcImNhbGxvY1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTk9QX0NOVDsgaSsrKVxuK1x0XHRpbnNuc1tpXSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzEpO1xuK1x0aW5zbnNbTk9QX0NOVF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRpbnNuc1tOT1BfQ05UICsgMV0gPSBCUEZfRVhJVF9JTlNOKCk7XG4rXG4rXHRzdGFydCA9IG1vbm90b25pY19ucygpO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0aW5zbnMsIE5PUF9DTlQgKyAyLCBOVUxMKTtcbitcdGNvbnRyb2xfdGltZSA9IG1vbm90b25pY19ucygpIC0gc3RhcnQ7XG4rXHRpZiAoIUFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImNvbnRyb2xfcHJvZ19sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRjbG9zZShwcm9nX2ZkKTtcbitcdHByb2dfZmQgPSAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5PUF9DTlQ7IGkrKylcbitcdFx0aW5zbnNbaV0gPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDApO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlZmQpLCBcInBpcGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIXBpZCkge1xuK1x0XHRjbG9zZShwaXBlZmRbMF0pO1xuK1x0XHRpZiAod3JpdGUocGlwZWZkWzFdLCBcInhcIiwgMSkgIT0gMSlcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0Y2xvc2UocGlwZWZkWzFdKTtcbitcdFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcIkdQTFwiLFxuK1x0XHRcdFx0XHRpbnNucywgTk9QX0NOVCArIDIsIE5VTEwpO1xuK1x0XHRpZiAocHJvZ19mZCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRcdF9leGl0KHByb2dfZmQgXHUwMDNjIDApO1xuK1x0fVxuK1xuK1x0Y2xvc2UocGlwZWZkWzFdKTtcbitcdHBpcGVmZFsxXSA9IC0xO1xuK1x0cmV0ID0gcmVhZChwaXBlZmRbMF0sIFx1MDAyNmJ5dGUsIDEpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAxLCBcImNoaWxkX3JlYWR5XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWxsb3cgbGluZWFyIHZlcmlmaWNhdGlvbiB0byBmaW5pc2ggYmVmb3JlIHNlbmRpbmcgU0lHS0lMTC4gVGhlIG5vcFxuK1x0ICogcmVtb3ZhbCBwYXNzIGlzIHF1YWRyYXRpYywgc28gZm91ciBjb250cm9sLWxvYWQgdGltZXMgc3RpbGwgbGVhdmVzIGFcbitcdCAqIHdpZGUgd2luZG93IGluIHdoaWNoIGFuIGFmZmVjdGVkIGtlcm5lbCBpcyByZXdyaXRpbmcgaW5zdHJ1Y3Rpb25zLlxuK1x0ICovXG4rXHRraWxsX2RlbGF5ID0gTUFYKGNvbnRyb2xfdGltZSAqIDQsIE1JTl9LSUxMX0RFTEFZX05TKTtcbitcdHNsZWVwX25zKGtpbGxfZGVsYXkpO1xuK1x0aWYgKCFBU1NFUlRfT0soa2lsbChwaWQsIFNJR0tJTEwpLCBcImtpbGxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHN0YXJ0ID0gbW9ub3RvbmljX25zKCk7XG4rXHRyZXQgPSB3YWl0cGlkX3RpbWVvdXQocGlkLCBcdTAwMjZzdGF0dXMsIFJFQVBfVElNRU9VVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHBpZCwgXCJwcm9nX2xvYWRfa2lsbGFibGVcIikpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiY29udHJvbCBsb2FkICVsbHUgdXMsIGNoaWxkIHN0aWxsIGFsaXZlICVsbHUgdXMgYWZ0ZXIgU0lHS0lMTFxcblwiLFxuK1x0XHRcdGNvbnRyb2xfdGltZSAvIDEwMDAsIChtb25vdG9uaWNfbnMoKSAtIHN0YXJ0KSAvIDEwMDApO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXHRwaWQgPSAtMTtcbitcdEFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdURVJNU0lHKHN0YXR1cykgPT0gU0lHS0lMTCxcbitcdFx0ICAgIFwia2lsbGVkX2J5X3NpZ2tpbGxcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChwcm9nX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRpZiAocGlwZWZkWzBdIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocGlwZWZkWzBdKTtcbitcdGlmIChwaXBlZmRbMV0gXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwaXBlZmRbMV0pO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApO1xuK1x0fVxuK1x0ZnJlZShpbnNucyk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCA2NGFjNDlhZDY3ZTYzLi41YzU3MmRkNzI1ZTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTI1LDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2J0Zl9jdHhfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9idGZfdW5yZWxpYWJsZV9wcm9nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jYWxsX2xhcmdlX2ltbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfY2FsbGJhY2tfbG9jay5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfY2ZnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jZ3JvdXBfaW52X3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2Nncm91cF9za2Iuc2tlbC5oXCJcbkBAIC0xODgsNiArMTg5LDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2Jzd2FwKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2Jzd2FwKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9idGZfY3R4X2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyh2b2lkKSAgeyBSVU4odmVyaWZpZXJfYnRmX3VucmVsaWFibGVfcHJvZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY2FsbF9sYXJnZV9pbW0pOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NhbGxiYWNrX2xvY2spOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2NmZyh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2NmZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKHZvaWQpICAgeyBSVU4odmVyaWZpZXJfY2dyb3VwX2ludl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9jZ3JvdXBfc2tiKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9jZ3JvdXBfc2tiKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9jYWxsYmFja19sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfY2FsbGJhY2tfbG9jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWUwOWRkNjZmNDY3OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2NhbGxiYWNrX2xvY2suY1xuQEAgLTAsMCArMSw3MyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rc3RydWN0IGJwZl9tYXA7XG4rXG4rc3RydWN0IGxvY2tfdmFsdWUge1xuK1x0c3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbG9ja192YWx1ZSk7XG4rfSBsb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3QgY2FsbGJhY2tfY3R4IHtcbitcdHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZTtcbit9O1xuK1xuK3N0YXRpYyBsb25nIGxvY2tfZGlmZmVyZW50X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIGludCAqa2V5LFxuK1x0XHRcdFx0IHN0cnVjdCBsb2NrX3ZhbHVlICp2YWx1ZSwgc3RydWN0IGNhbGxiYWNrX2N0eCAqY3R4KVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXZhbHVlLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbG9ja192YWx1ZSAqdmFsdWUsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGNhbGxiYWNrX2N0eCBjdHggPSB7IC52YWx1ZSA9IHZhbHVlIH07XG4rXG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIGxvY2tfZGlmZmVyZW50X3ZhbHVlLCBcdTAwMjZjdHgsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fZGVzY3JpcHRpb24oXCJjYWxsYmFjayBtYXAgdmFsdWUgaGFzIGEgZGlzdGluY3QgbG9jayBpZGVudGl0eVwiKVxuK19fZmFpbHVyZSBfX21zZyhcImJwZl9zcGluX3VubG9jayBvZiBkaWZmZXJlbnQgbG9ja1wiKVxuK2ludCBjYWxsYmFja192YWx1ZV9sb2NrX2lkZW50aXR5KHZvaWQgKmN0eClcbit7XG4rXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2bG9ja19tYXAsIG5lc3RfbG9ja19kaWZmZXJlbnRfdmFsdWUsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGxvY2tfc2FtZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgKmtleSxcbitcdFx0XHQgICAgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2dmFsdWUtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGxvbmcgbmVzdF9sb2NrX3NhbWVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50ICprZXksXG4rXHRcdFx0XHQgc3RydWN0IGxvY2tfdmFsdWUgKnZhbHVlLCB2b2lkICpkYXRhKVxuK3tcbitcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZsb2NrX21hcCwgbG9ja19zYW1lX3ZhbHVlLCBOVUxMLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2Rlc2NyaXB0aW9uKFwibmVzdGVkIGNhbGxiYWNrIGNhbiBsb2NrIGl0cyBvd24gbWFwIHZhbHVlXCIpXG4rX19zdWNjZXNzXG4raW50IGNhbGxiYWNrX3ZhbHVlX2xvY2tfaWRlbnRpdHlfc2FtZSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmxvY2tfbWFwLCBuZXN0X2xvY2tfc2FtZV92YWx1ZSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuaW5kZXggMGI4NmQ5NWE0MTMzNS4uNjkyYTg0NjhmM2Q3NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl94ZHBfZGlyZWN0X3BhY2tldF9hY2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3hkcF9kaXJlY3RfcGFja2V0X2FjY2Vzcy5jXG5AQCAtNSw2ICs1LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuK1NFQyhcInhkcFwiKVxuK19fZGVzY3JpcHRpb24oXCJYRFAgcGt0IHJlZ3NhZmUgcHJlc2VydmVzIHBhY2tldCBwb2ludGVyIGNsYXNzIGRpc3BsYWNlbWVudFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIyIG1pbiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2VkIG1lbW9yeSByYW5nZVwiKVxuK19fZmxhZyhCUEZfRl9BTllfQUxJR05NRU5UKVxuK19fbmFrZWQgdm9pZCBwa3RfcmVnc2FmZV9jbGFzc19kaXNwbGFjZW1lbnQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXFxcbitcdHI4ID0gKih1MzIgKikocjEgKyAlW3hkcF9tZF9kYXRhX2VuZF0pO1xcXG4rXHRyOSA9ICoodTMyICopKHIxICsgJVt4ZHBfbWRfZGF0YV0pO1xcXG4rXHRyNiA9IHI5O1xcXG4rXHRyNiArPSA4O1xcXG4rXHRpZiByNiBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjkgKyAwKTtcXFxuK1x0cjQgPSByMDtcXFxuK1x0cjQgXHUwMDI2PSAxNTtcXFxuK1x0cjcgPSByMDtcXFxuK1x0cjcgXHUwMDNlXHUwMDNlPSA2MztcXFxuK1x0aWYgcjcgIT0gMCBnb3RvIGxfcGF0aF9iXyU9O1xcXG4rXHRyMiA9IHI5O1xcXG4rXHRyMiArPSByNDtcXFxuK1x0cjMgPSByMjtcXFxuK1x0cjMgKz0gNDtcXFxuK1x0Z290byBsX2pvaW5fJT07XFxcbitsX3BhdGhfYl8lPTogXFxcbitcdHI0IFx1MDAyNj0gMztcXFxuK1x0cjQgKz0gODtcXFxuK1x0cjIgPSByOTtcXFxuK1x0cjIgKz0gcjQ7XFxcbitcdHIzID0gcjI7XFxcbitcdHIzIC09IDQ7XFxcbitsX2pvaW5fJT06IFxcXG4rXHRyNSA9IHIzO1xcXG4rXHRyNSArPSA0O1xcXG4rXHRpZiByNSBcdTAwM2UgcjggZ290byBsX2V4aXRfJT07XFxcbitcdHIwID0gKih1NjQgKikocjIgKyAwKTtcXFxuK2xfZXhpdF8lPTogXFxcbitcdHIwID0gMDtcXFxuK1x0ZXhpdDtcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhLCBvZmZzZXRvZihzdHJ1Y3QgeGRwX21kLCBkYXRhKSksXG4rXHQgIF9faW1tX2NvbnN0KHhkcF9tZF9kYXRhX2VuZCwgb2Zmc2V0b2Yoc3RydWN0IHhkcF9tZCwgZGF0YV9lbmQpKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gU0VDKFwieGRwXCIpXG4gX19kZXNjcmlwdGlvbihcIlhEUCBwa3QgcmVhZCwgcGt0X2VuZCBtYW5nbGluZywgYmFkIGFjY2VzcyAxXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUjMgcG9pbnRlciBhcml0aG1ldGljIG9uIHBrdF9lbmRcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjIzOjU3Ljk3NTQwNDUyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDU5NDM1ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzIG9mIEJQRiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24g4oCTIGBOZWVkc0tNU0FOID0gdHJ1ZS9mYWxzZWAg4oCTIGFuZCB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGF0IGRlY2lzaW9uIChgS01TQU5SZWFzb25pbmdgKS4gSSBuZWVkIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZXNlIGNoYW5nZXMgYWNyb3NzIHRoZSBmaWxlcyBwcm92aWRlZC5cblxuRmlyc3QsIEkgc2VlIGEgbmV3IG1lbWJlciwgYHBrdF9wdHJfZGVsdGFgLCBhbmQgYHBrdF9wdHJfZGVsdGFfc2V0YCBhZGRlZCB0byBgc3RydWN0IGJwZl9pZF9wYWlyYCBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRyYWNraW5nIHJlbGF0aXZlIGRpc3BsYWNlbWVudHMgb2YgcGFja2V0IHBvaW50ZXJzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHBvdGVudGlhbCBkYXRhIHJhY2VzLlxuXG5JbiBga2VybmVsL2JwZi9jZmcuY2AsIGEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIENvbnRyb2wgRmxvdyBHcmFwaCAoQ0ZHKSB2YWxpZGF0aW9uIHRvIHJlamVjdCBmYWxsdGhyb3VnaCBvdXQgb2Ygc3VicHJvZ3JhbXMuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QsIHNvbGlkIGRlZmVuc2l2ZSBtZWFzdXJlIGFnYWluc3QgY29udHJvbC1mbG93IGVycm9ycy4gSXQncyB1bmxpa2VseSB0byBiZSBhIEtNU0FOIGNvbmNlcm4gZGlyZWN0bHksIGJ1dCBhIGZsYXdlZCBDRkcgY291bGQgbGVhZCB0byBvdGhlciBpc3N1ZXMuXG5cbk5leHQsIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgdGhlIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBhbmQgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgZnVuY3Rpb25zIG5vdyBhYm9ydCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZldHkgY2hlY2sgZHVyaW5nIGluc3RydWN0aW9uIG1hbmlwdWxhdGlvbi4gIFdoaWxlIGhhbmRsaW5nIHNpZ25hbHMgaXMgZ2VuZXJhbGx5IGdvb2QgcHJhY3RpY2UsIEknbSBub3QgaW1tZWRpYXRlbHkgc2VlaW5nIGEgc3Ryb25nIEtNU0FOIGltcGxpY2F0aW9uIGhlcmUsIHVubGVzcyB0aGUgYWJvcnQgbGVhdmVzIHNvbWV0aGluZyBpbiBhbiB1bnNhZmUgc3RhdGUuXG5cbmBrZXJuZWwvYnBmL3N0YXRlcy5jYCBpbnRyb2R1Y2VzIGBjaGVja19wa3RfcHRyX2lkc2AgYW5kIHVwZGF0ZXMgYHJlZ3NhZmVgLiAgVGhlIGFkZGl0aW9uIG9mIHRoZSBgY2hlY2tfcGt0X3B0cl9pZHNgIGZ1bmN0aW9uIGFuZCB0aGUgbG9naWMgdG8gdHJhY2sgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHdpdGhpbiBgc3RydWN0IGJwZl9pZF9wYWlyYCBhcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgc28gZmFyLiBUaGlzIGFwcGVhcnMgdG8gYmUgYWltZWQgYXQgbWFpbnRhaW5pbmcgcmVsYXRpdmUgZGlzcGxhY2VtZW50IG9mIHBhY2tldCBwb2ludGVycyBhY3Jvc3MgQlBGIHByb2dyYW0gdHJhbnNmb3JtYXRpb25zLCBhbmQgdGhpcyBtaWdodCBpbnRyb2R1Y2Ugc29tZSBwb3RlbnRpYWwgcmlza3MuIFRoZSBleHBsaWNpdCBjaGVja3MgZm9yIGBTMzJfTUlOYCBhbmQgYFMzMl9NQVhgIGZvciB0aGUgZGVsdGEgYXJlIGdvb2QuIFRoZSBgY2hlY2tfaWRzYCBmdW5jdGlvbiBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGFuIG9sZGVyIGNvbnN0cnVjdCB0aGF0IHRoaXMgY2hhbmdlIGJ1aWxkcyB1cG9uLlxuXG5MZXQgbWUgZXhhbWluZSB3aGVyZSBgc3RydWN0IGJwZl9pZG1hcGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaWZldGltZSBhbmQgc2NvcGUgb2YgdGhpcyBuZXcgcGFja2V0IHBvaW50ZXIgdHJhY2tpbmcuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGtlcm5lbCBjb2RlIGZvciBhbGxvY2F0aW9ucyBhbmQgdXNlcyBvZiB0aGlzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBwb3B1bGF0ZWQgYW5kIGRlYWxsb2NhdGVkIGFuZCB3aG8gaGFzIGFjY2VzcyB0byBpdC4gQW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGRhdGEgYWNjZXNzIHJpc2tzIHdpdGhpbiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGEgbWFqb3IgY29uY2VybiBmb3IgS01TQU4uIEknbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gb2YgdGhpcyBtYXAuIFRoaXMgaXMgd2hlcmUgSSdsbCBiZSBmb2N1c2luZyBteSBLTVNBTiBhbmFseXNpcy5cblxuRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIEkgc2VlIGEgZnVuY3Rpb24gYG1hcF92YWx1ZV9oYXNfc3RhdGljX2lkZW50aXR5YC4gSXQgYXBwZWFycyB0byBhZGRyZXNzIGxvY2sgaWRlbnRpdHkgaW4gY2FsbGJhY2tzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYXJyYXkgbWFwcy4gSXQgY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlbGVtZW50IGluIHRoZSBtYXAgYW5kIHRoZSBtYXAgaXMgb2YgdHlwZSBgQlBGX01BUF9UWVBFX0FSUkFZYC4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBjYWxsZWUtXHUwMDNlcmVnc1tCUEZfUkVHXzNdLmlkID0gKytlbnYtXHUwMDNlaWRfZ2VuO2AgdG8gYXNzaWduIGFuIElEIHRvIGEgcmVnaXN0ZXIgcG9pbnRpbmcgdG8gYSBzcGlubG9jayBpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIHRoZSBtYXAgZG9lc24ndCBoYXZlIGEgc3RhdGljIGlkZW50aXR5LiBUaGlzIGFwcGVhcnMgcmVsZXZhbnQgZm9yIHByb3RlY3Rpbmcgc3BpbmxvY2tzIGluIHRoZSBjb250ZXh0IG9mIGNhbGxiYWNrcy4gVGhlIEtNU0FOIGltcGxpY2F0aW9ucyBhcmUgbGVzcyBvYnZpb3VzIGhlcmUsIGJ1dCBJIG11c3Qgbm90IGRpc2NvdW50IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHBvaW50ZXIgbWFuaXB1bGF0aW9uLlxuXG5UaGUgc2VsZnRlc3RzIGFyZSBhIGdvb2Qgc2lnbjsgSSdsbCBuZWVkIHRvIHJldmlldyB0aGVtIHRvIHNlZSB3aGF0IHNjZW5hcmlvcyB0aGV5IGNvdmVyLiBUZXN0cyBmb3Igc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwcm9ncmFtIGxvYWQsIGNhbGxiYWNrIGxvY2sgaWRlbnRpdHksIGNvcmUgcmVsb2MgcmF3LCBhbmQgeGRwIHJlZ3NhZmUgYWxsIHNlZW0gcmVsZXZhbnQgdG8gcG90ZW50aWFsIGRhdGEgcmFjZSBpc3N1ZXMuXG5cbk92ZXJhbGwsIHRoZSBwYWNrZXQgcG9pbnRlciB0cmFja2luZyBhbmQgdGhlIHNwaW5sb2NrIHByb3RlY3Rpb24gc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBhcmVhcyB0byByZXF1aXJlIGNhcmVmdWwgc2NydXRpbnkgZm9yIEtNU0FOLCBhbmQgbXkgYGdyZXBwZXJgIHNlYXJjaCBmb3IgYHN0cnVjdCBicGZfaWRtYXBgIHdpbGwgYmUgY3J1Y2lhbCB0byBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgYE5lZWRzS01TQU5gIHZhbHVlIGFuZCB3cml0aW5nIHRoZSBgS01TQU5SZWFzb25pbmdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMToyNDowNi40MzQ4NDQxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MTE2OTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYnBmX2lkbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9ODU0PXN0cnVjdCBicGZfaWRfcGFpciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTg2MC1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjg2MTpzdHJ1Y3QgYnBmX2lkbWFwIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTg2Mi1cXHR1MzIgdG1wX2lkX2dlbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9OTIwPXN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtOTY3LVxcdHVuaW9uIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjk2ODpcXHRcXHRzdHJ1Y3QgYnBmX2lkbWFwIGlkbWFwX3NjcmF0Y2g7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC05NjktXFx0XFx0c3RydWN0IGJwZl9pZHNldCBpZHNldF9zY3JhdGNoO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0zMDI9c3RhdGljIGJvb2wgcmFuZ2Vfd2l0aGluKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTMxOC0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjMxOTpzdGF0aWMgYm9vbCBjaGVja19pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0zMjAte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0zNTY9c3RhdGljIGJvb2wgY2hlY2tfcGt0X3B0cl9pZHMoY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTM1Ny1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MzU4OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMzU5LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNDE3LSAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6NDE4OnN0YXRpYyBib29sIGNoZWNrX3NjYWxhcl9pZHModTMyIG9sZF9pZCwgdTMyIGN1cl9pZCwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MTkte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MjY9c3RhdGljIGJvb2wgcmVnc19leGFjdChjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTUyNy1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJjdXIsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1Mjg6XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNTI5LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9NTQyPXN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo1NDM6XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTU0NC1cXHRcXHQgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9NzM3PXN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjczODpcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MzktXFx0XFx0ICAgICAgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9ODgyPXN0YXRpYyBib29sIHN0YWNrX2FyZ19zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbmtlcm5lbC9icGYvc3RhdGVzLmM6ODgzOlxcdFxcdFxcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTg4NC1cXHRcXHRcXHQgICBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05MDQ9c3RhdGljIGJvb2wgcmVmc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjkwNTpcXHRcXHQgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05MDYte1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMDA3PXN0YXRpYyB2b2lkIHJlc2V0X2lkbWFwX3NjcmF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEwMDgte1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAwOTpcXHRzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEwLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk0Mjc9c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0MzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Mzc6c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQzOC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ1NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ1NTpzdGF0aWMgaW50IGlkc3RhY2tfcG9wKHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDU2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NDY0PXN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjctXFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0Njg6XFx0c3RydWN0IGJwZl9pZG1hcCAqaWRzdGFjayA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0NjktXFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjA4LjM4NjAxOTMxMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIxMDM0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLZXJuZWwgQlBGIFN0YXRlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgY2hlY2tfaWRzYCBhbmQgYHJlc2V0X2lkbWFwX3NjcmF0Y2hgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCUEYga2VybmVsIGlzIG1hbmFnaW5nIGl0cyBpbnRlcm5hbCBzdGF0ZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJRCBtYXBwaW5nLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCBhbmQgc3RhcnQgZGlnZ2luZy4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGNoZWNraW5nIGFuZCBwb3RlbnRpYWxseSByZXNldHRpbmcgdGhlIElEIG1hcCBzY3JhdGNoIGFyZWEgbGl2ZXMuIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QuIEknbSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IElEcyBhcmUgdmFsaWRhdGVkLCBwb3RlbnRpYWxseSByZS1tYXBwZWQsIGFuZCBob3cgdGVtcG9yYXJ5IHNjcmF0Y2ggc3BhY2UgaXMgaGFuZGxlZCB0byBrZWVwIHRoZSBCUEYgZXhlY3V0aW9uIGVudmlyb25tZW50IGNsZWFuIGFuZCBjb3JyZWN0LiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBrZXkgdG8gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNlY3VyZSBhbmQgZWZmaWNpZW50IEJQRiBwcm9ncmFtIGV4ZWN1dGlvbjsgdGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjEwLjUwNzA1NjQ0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0e1xcbiAzMjE6XFx0XFx0c3RydWN0IGJwZl9pZF9wYWlyICptYXAgPSBpZG1hcC1cXHUwMDNlbWFwO1xcbiAzMjI6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdC8qIGVpdGhlciBib3RoIElEcyBzaG91bGQgYmUgc2V0IG9yIGJvdGggc2hvdWxkIGJlIHplcm8gKi9cXG4gMzI1OlxcdFxcdGlmICghIW9sZF9pZCAhPSAhIWN1cl9pZClcXG4gMzI2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aWYgKG9sZF9pZCA9PSAwKSAvKiBjdXJfaWQgPT0gMCBhcyB3ZWxsICovXFxuIDMyOTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGlkbWFwLVxcdTAwM2VjbnQ7IGkrKykge1xcbiAzMzI6XFx0XFx0XFx0aWYgKG1hcFtpXS5vbGQgPT0gb2xkX2lkKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIG1hcFtpXS5jdXIgPT0gY3VyX2lkO1xcbiAzMzQ6XFx0XFx0XFx0aWYgKG1hcFtpXS5jdXIgPT0gY3VyX2lkKVxcbiAzMzU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHQvKiBSZWFjaGVkIHRoZSBlbmQgb2Yga25vd24gbWFwcGluZ3M7IGhhdmVuJ3Qgc2VlbiB0aGlzIGlkIGJlZm9yZSAqL1xcbiAzMzk6XFx0XFx0aWYgKGlkbWFwLVxcdTAwM2VjbnQgXFx1MDAzYyBCUEZfSURfTUFQX1NJWkUpIHtcXG4gMzQwOlxcdFxcdFxcdG1hcFtpZG1hcC1cXHUwMDNlY250XS5vbGQgPSBvbGRfaWQ7XFxuIDM0MTpcXHRcXHRcXHRtYXBbaWRtYXAtXFx1MDAzZWNudF0uY3VyID0gY3VyX2lkO1xcbiAzNDI6XFx0XFx0XFx0bWFwW2lkbWFwLVxcdTAwM2VjbnRdLnBrdF9wdHJfZGVsdGFfc2V0ID0gZmFsc2U7XFxuIDM0MzpcXHRcXHRcXHRpZG1hcC1cXHUwMDNlY250Kys7XFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMzQ1OlxcdFxcdH1cXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0LypcXG4gMzQ4OlxcdFxcdCAqIGlkbWFwIHNsb3RzIGFyZSBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGFuZCBzdGFjayBzbG90cy5cXG4gMzQ5OlxcdFxcdCAqIFNpbmNlIHJlZmVyZW5jZWQgZHlucHRycyBhY3F1aXJlIGludGVybWVkaWF0ZSByZWZlcmVuY2VzIHRoYXQgZG9cXG4gMzUwOlxcdFxcdCAqIG5vdCBsaXZlIGluIGVpdGhlciwgc28gdGhlIG1hcCBjYW4gYmUgZXhoYXVzdGVkLiBTaW5jZSBpdCBpcyB1bmxpa2VseSxcXG4gMzUxOlxcdFxcdCAqIGZhaWwgdGhlIHZlcmlmaWNhdGlvbiBieSB0cmVhdGluZyB0aGUgc3RhdGVzIGFzIG5vdCBlcXVpdmFsZW50LlxcbiAzNTI6XFx0XFx0ICovXFxuIDM1MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM1NDpcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdHN0YXRpYyBib29sIGNoZWNrX3BrdF9wdHJfaWRzKGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvbGQsXFxuIDM1NzpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqY3VyLFxcbiAzNTg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuIDM1OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjEwLjUwNzE5ODg4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODYzNTU4NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgcmVzZXRfaWRtYXBfc2NyYXRjaGAqKlxuXG5SaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSwgYW5kIEkgcmVhbGx5IG1lYW4gaXQsIHRvIGFsc28gc2NydXRpbml6ZSBgcmVzZXRfaWRtYXBfc2NyYXRjaGAuIEl0J3MgZWFzeSB0byBmb2N1cyBvbiB0aGUgcHJpbWFyeSBpc3N1ZSwgYnV0IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IHRoZXNlIHNlZW1pbmdseSBwZXJpcGhlcmFsIGZ1bmN0aW9ucyBjYW4gb2Z0ZW4gaGFyYm9yIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzIHRoYXQgdWx0aW1hdGVseSBiaXRlIHlvdSBpbiB0aGUgcmVhciBsYXRlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIHRoZSBjb3JlIGxvZ2ljLCBidXQgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgYHJlc2V0X2lkbWFwX3NjcmF0Y2hgIGNvdWxkIHByZXZlbnQgYSB3b3JsZCBvZiBodXJ0IGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaWYgaXQncyBpbnZvbHZlZCBpbiBhbnkgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3IgY2xlYW51cCBwcm9jZWR1cmVzLiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3Mgd29ya2luZyBhcyBleHBlY3RlZCwgZXZlbiBpZiBpdCBzZWVtcyB1bnJlbGF0ZWQgYXQgZmlyc3QgZ2xhbmNlLiBJdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSBhbmQgdGhhdCB3YXJyYW50cyBhbiBpbnNwZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6MjQ6MTQuMzcwNzYwMjU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDU6XFx0fVxcbjEwMDY6XFx0XFxuMTAwNzpcXHRzdGF0aWMgdm9pZCByZXNldF9pZG1hcF9zY3JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuMTAwODpcXHR7XFxuMTAwOTpcXHRcXHRzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCA9IFxcdTAwMjZlbnYtXFx1MDAzZWlkbWFwX3NjcmF0Y2g7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdGlkbWFwLVxcdTAwM2V0bXBfaWRfZ2VuID0gZW52LVxcdTAwM2VpZF9nZW47XFxuMTAxMjpcXHRcXHRpZG1hcC1cXHUwMDNlY250ID0gMDtcXG4xMDEzOlxcdH1cXG4xMDE0OlxcdFxcbjEwMTU6XFx0c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMTAxNjpcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxcbjEwMTc6XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cixcXG4xMDE4OlxcdFxcdFxcdFxcdCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbjEwMTk6XFx0e1xcbjEwMjA6XFx0XFx0dTMyIGluc25faWR4O1xcbjEwMjE6XFx0XFx0aW50IGk7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdGlmIChvbGQtXFx1MDAzZWN1cmZyYW1lICE9IGN1ci1cXHUwMDNlY3VyZnJhbWUpXFxuMTAyNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjE0LjM3MDkxODMyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDU1NTE2NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBpZHN0YWNrX3B1c2hgIGFuZCBgaWRzdGFja19wb3BgIHdpdGggUmVzcGVjdCB0byBgaWRtYXBfc2NyYXRjaGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gaG93IGBpZHN0YWNrX3B1c2hgIGFuZCBgaWRzdGFja19wb3BgIGludGVyYWN0IHdpdGggYGlkbWFwX3NjcmF0Y2hgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgYGlkbWFwX3NjcmF0Y2hgIGxpa2VseSBzZXJ2ZXMgYXMgYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50ICpob3cqIGl0J3MgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZXNlIHN0YWNrIG9wZXJhdGlvbnMuIElzIGl0IGEgc3RhZ2luZyBhcmVhIGZvciBJRHMgYmVmb3JlIGJlaW5nIHBsYWNlZCBvbiB0aGUgc3RhY2s/IElzIGl0IHVzZWQgZm9yIHZhbGlkYXRpb24gb3IgY29uZmxpY3QgZGV0ZWN0aW9uIGR1cmluZyBwdXNoL3BvcCBvcGVyYXRpb25zPyBPciBwZXJoYXBzIGl0IGhhbmRsZXMgdGVtcG9yYXJ5IHN0b3JhZ2Ugb2YgZWxlbWVudHMgdGhhdCBhcmUgYmVpbmcgXCJwb3BwZWRcIiBhbmQgbGF0ZXIgcHV0IHNvbWV3aGVyZSBlbHNlP1xuXG5JJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaGludHMgcmVnYXJkaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIENvdWxkIGNvbmN1cnJlbnQgY2FsbHMgdG8gdGhlc2Ugc3RhY2sgZnVuY3Rpb25zIGxlYWQgdG8gY29ycnVwdGlvbiBvZiBkYXRhIGluIGBpZG1hcF9zY3JhdGNoYD8gQXJlIHRoZXJlIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2wgbWVhc3VyZXM/IFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZXNlIHRoaW5ncyB3aWxsIGd1aWRlIG15IGFzc2Vzc21lbnQgb2YgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHNvdW5kbmVzcy4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBhbHRlciB0aGUgdmFsdWUsIGluIGFueSB3YXksIG9mIGBpZG1hcF9zY3JhdGNoYC4gVGhpcyB3aWxsIHRlbGwgbWUgbW9yZSBhYm91dCBpdHMgZXhwZWN0ZWQgYmVoYXZpb3VyLlxuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMsIGZvY3VzaW5nIG9uIGhvdyBgaWRtYXBfc2NyYXRjaGAgaXMgYWNjZXNzZWQgYW5kIG1vZGlmaWVkIGluIHJlbGF0aW9uIHRvIHRoZSBzdGFjayBtYW5pcHVsYXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IEkgbmVlZCB0byBiZSBleGFjdCwgc28gdGhhdCBJIGNhbiB0aGVuIGFwcGx5IHRoaXMga25vd2xlZGdlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHNlZSBpZiBpdCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gYSBzaW1pbGFyIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjE3LjgyNjQzNzUzN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5NDMwOlxcdFxcbjk0MzE6XFx0XFx0ZXJyID0gX19yZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVxcdTAwM2VjdXJfc3RhdGUsIGlkKTtcXG45NDMyOlxcdFxcdGlmICghZXJyKVxcbjk0MzM6XFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3JlZl9yZWxlYXNlKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgaWQpO1xcbjk0MzQ6XFx0XFx0cmV0dXJuIGVycjtcXG45NDM1OlxcdH1cXG45NDM2OlxcdFxcbjk0Mzc6XFx0c3RhdGljIGludCBpZHN0YWNrX3B1c2goc3RydWN0IGJwZl9pZG1hcCAqaWRtYXAsIHUzMiBpZClcXG45NDM4OlxcdHtcXG45NDM5OlxcdFxcdGludCBpO1xcbjk0NDA6XFx0XFxuOTQ0MTpcXHRcXHRpZiAoIWlkKVxcbjk0NDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuOTQ0MzpcXHRcXG45NDQ0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpZG1hcC1cXHUwMDNlY250OyBpKyspXFxuOTQ0NTpcXHRcXHRcXHRpZiAoaWRtYXAtXFx1MDAzZW1hcFtpXS5vbGQgPT0gaWQpXFxuOTQ0NjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG45NDQ3OlxcdFxcbjk0NDg6XFx0XFx0aWYgKFdBUk5fT05fT05DRShpZG1hcC1cXHUwMDNlY250IFxcdTAwM2U9IEJQRl9JRF9NQVBfU0laRSkpXFxuOTQ0OTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG45NDUwOlxcdFxcbjk0NTE6XFx0XFx0aWRtYXAtXFx1MDAzZW1hcFtpZG1hcC1cXHUwMDNlY250KytdLm9sZCA9IGlkO1xcbjk0NTI6XFx0XFx0cmV0dXJuIDA7XFxuOTQ1MzpcXHR9XFxuOTQ1NDpcXHRcXG45NDU1OlxcdHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXFxuOTQ1NjpcXHR7XFxuOTQ1NzpcXHRcXHRpZiAoIWlkbWFwLVxcdTAwM2VjbnQpXFxuOTQ1ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG45NDU5OlxcdFxcbjk0NjA6XFx0XFx0cmV0dXJuIGlkbWFwLVxcdTAwM2VtYXBbLS1pZG1hcC1cXHUwMDNlY250XS5vbGQ7XFxuOTQ2MTpcXHR9XFxuOTQ2MjpcXHRcXG45NDYzOlxcdC8qIFJlbGVhc2UgaWQgYW5kIG9iamVjdHMgZGVyaXZlZCBmcm9tIGl0IGl0ZXJhdGl2ZWx5IGluIGEgREZTIG1hbm5lciAqL1xcbjk0NjQ6XFx0c3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuOTQ2NTpcXHR7XFxuOTQ2NjpcXHRcXHR1MzIgbWFzayA9ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX0RZTlBUUik7XFxuOTQ2NzpcXHRcXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXFx1MDAzZWN1cl9zdGF0ZTtcXG45NDY4OlxcdFxcdHN0cnVjdCBicGZfaWRtYXAgKmlkc3RhY2sgPSBcXHUwMDI2ZW52LVxcdTAwM2VpZG1hcF9zY3JhdGNoO1xcbjk0Njk6XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjE3LjgyNzYwMTU0N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTIyMjg5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIERldGVjdGVkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlIGFuZCBhc3Nlc3MgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgS01TQU4uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbGVha2VkIHRvIHVzZXJzcGFjZSwgb3IgbGVhZGluZyB0byB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5GaXJzdCwgdGhlIGBicGZfaWRfcGFpcmAgc3RydWN0dXJlIHVwZGF0ZXMsIGluY2x1ZGluZyB0aGUgbmV3IGZpZWxkcyBgcGt0X3B0cl9kZWx0YWAgYW5kIGBwa3RfcHRyX2RlbHRhX3NldGAsIHNlZW0gc2FmZS4gVGhlIGluaXRpYWxpemF0aW9uIG9mIGBwa3RfcHRyX2RlbHRhX3NldGAgdG8gYGZhbHNlYCB3aXRoaW4gYGNoZWNrX2lkc2AgYW5kIHRoZSBzdWJzZXF1ZW50IHNldHRpbmcgb2YgYHBrdF9wdHJfZGVsdGFgIHdpdGhpbiBgY2hlY2tfcGt0X3B0cl9pZHNgIGVuc3VyZXMgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgc2V0cyB0aGVzZSBmaWVsZHMuIFRoZXJlJ3Mgbm8gc2NlbmFyaW8gd2hlcmUgdGhlc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgYGlkbWFwYCBpcyBwcm9wZXJseSBtYW5hZ2VkIHdpdGhpbiBgZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2hgLiBTbywgbm8gY29uY2VybnMgaGVyZSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbk5leHQsIHRoZSBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvY2ZnLmNgIHdpdGggdGhlIGBwdXNoX2luc24oKWAgbG9naWMsIHdoaWNoIGlzIGp1c3Qgc3RhbmRhcmQgbG9naWMgdmFsaWRhdGlvbiBvbiB0aGUgQlBGIENGRywgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MganVzdCBhIGNvbnRyb2wgZmxvdyB2ZXJpZmljYXRpb24uXG5cblRoZSBhZGRpdGlvbiBvZiBgYnBmX3Jld3JpdGVfbXVzdF9hYm9ydCgpYCB3aXRoaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgIGFuZCBpdHMgdXNlIGluIGBicGZfcGF0Y2hfaW5zbl9kYXRhKClgIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zKClgIGlzIGFsbCBhYm91dCBoYW5kbGluZyBwb3RlbnRpYWwgc2lnbmFsIGludGVycnVwdGlvbnMuIFRoZSBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYXZvaWQgbG9uZyBzdGFsbHMgYW5kIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGdldHRpbmcgc3R1Y2suIFRoaXMgZG9lc24ndCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvcGVyYXRpb25zLCBlaXRoZXIuXG5cblRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aGljaCBpbnRyb2R1Y2UgZGlzdGluY3QgYGlkYCBhc3NpZ25tZW50cyBmb3IgY2FsbGJhY2sgbWFwIHBvaW50ZXJzIHdoZW4gc3BlY2lmaWMgY29uZGl0aW9ucyBhcmUgbWV0LCBhcmUgYWxsIGFib3V0IHN0YXRlIHRyYWNraW5nIHdpdGhpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBjcnVjaWFsIG1lY2hhbmlzbSB0byBwcmV2ZW50IHBvdGVudGlhbCBpbmNvcnJlY3QgdW5sb2NraW5nIG9mIHNwaW4gbG9ja3MuIFRoZSBjb25kaXRpb25zIHdoZXJlIGl0IHNldHMgdGhlc2UgSURzIGFyZSBjYXJlZnVsbHkgdmVyaWZpZWQuIFNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgZGlzdGluY3QgYGlkYCBiYXNlZCBvbiBgcmVnX21heV9wb2ludF90b19zcGluX2xvY2tgIGFuZCB0aGUgbWFwIHZhbHVlIG5vdCBiZWluZyBhIG9uZS1lbGVtZW50IGFycmF5LCBhbHNvIGFwcGVhcnMgc2FmZSBhbmQgZm9jdXNlZCBvbiB0cmFja2luZyB2ZXJpZmllciBzdGF0ZS5cblxuVGhlIGluY2x1c2lvbiBvZiB0aGUgc2VsZnRlc3RzIGNvdmVyaW5nIHRoZSBjaGFuZ2VzIGFuZCB0aGUgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBgYnBmX3Byb2dfbG9hZGAgaXMgaW1wb3J0YW50IGJ1dCBjb25maXJtcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGRlc2NyaWJlZCBsb2dpYy5cblxuRmluYWxseSwgdGhlIEtNU0FOIGNyaXRlcmlhLiBBZnRlciBjb25zaWRlcmluZyB0aGVzZSBjaGFuZ2VzOiBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXNlIHBhdGNoZXMgKipkbyBub3QqKiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIHNwZWNpZmljYWxseSB0YXJnZXQuIFRoZXJlJ3Mgbm8gcmlzayBvZiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsb2dpY2FsIHZhbGlkYXRpb24sIHZlcmlmaWVyIHN0YXRlIHRyYWNraW5nLCBhbmQgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBCUEYgb3BlcmF0aW9ucywgbm90IHJhdyBtZW1vcnkgbWFuaXB1bGF0aW9uLiBUaGUgQlBGIHZlcmlmaWVyIGl0c2VsZiBlbmZvcmNlcyB0eXBlIHNhZmV0eSBhbmQgYm91bmRzIGNoZWNrcyBvbiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIGEgdmVyeSByb2J1c3QgbWVjaGFuaXNtIGZvciBlbnN1cmluZyBvdmVyYWxsIG1lbW9yeSBzYWZldHkuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYW5kIHRlc3Rpbmcgd2lsbCBiZSBzdWZmaWNpZW50IGhlcmUuXG5cbkknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOOiBmYWxzZWAgaW4gdGhlIHNldC1yZXN1bHRzIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgxLCJPdXRwdXRUb2tlbnMiOjI5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjI0OjI0LjM0OTg5NDExNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIENGRyBhbmFseXNpcyBpbiBzZXZlcmFsIGFyZWFzOlxcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXFxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxcbjMuIEFkZHMgZmF0YWwgc2lnbmFsIGNoZWNrcyAoYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgKSB0byBwcmV2ZW50IG5vbi1raWxsYWJsZSBsb29wcyBkdXJpbmcgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcvcmVtb3ZhbCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuXFxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuIEFsbCBzdHJ1Y3QgZmllbGRzIGFkZGVkIChgcGt0X3B0cl9kZWx0YWAsIGBwa3RfcHRyX2RlbHRhX3NldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSByZWFkIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB2ZXJpZmllciBsb2dpYywgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGFuZCBzaWduYWwtaGFuZGxpbmcgaW1wcm92ZW1lbnRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIENGRyBhbmFseXNpcyBpbiBzZXZlcmFsIGFyZWFzOlxcbjEuIEFkZHMgcGFja2V0IHBvaW50ZXIgZGlzcGxhY2VtZW50IHRyYWNraW5nIGFjcm9zcyBzdGF0ZSBlcXVpdmFsZW5jZSBjaGVja3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgICh1c2luZyBgY2hlY2tfcGt0X3B0cl9pZHNgIGFuZCBpbml0aWFsaXppbmcgYHBrdF9wdHJfZGVsdGFfc2V0YCBpbiBgY2hlY2tfaWRzYCkuXFxuMi4gVmFsaWRhdGVzIHN1YnByb2dyYW0gYm91bmRhcmllcyBvbiBmYWxsLXRocm91Z2ggZWRnZXMgaW4gYGtlcm5lbC9icGYvY2ZnLmNgLlxcbjMuIEFkZHMgZmF0YWwgc2lnbmFsIGNoZWNrcyAoYGJwZl9yZXdyaXRlX211c3RfYWJvcnRgKSB0byBwcmV2ZW50IG5vbi1raWxsYWJsZSBsb29wcyBkdXJpbmcgcG9zdC12ZXJpZmljYXRpb24gaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcvcmVtb3ZhbCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuXFxuNC4gRW5zdXJlcyBkaXN0aW5jdCByZWdpc3RlciBJRHMgZm9yIGNhbGxiYWNrIG1hcCB2YWx1ZXMgdGhhdCBtYXkgcG9pbnQgdG8gc3BpbiBsb2NrcyB1bmxlc3MgdGhlIG1hcCBoYXMgc3RhdGljIGlkZW50aXR5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzIGluIHdheXMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuIEFsbCBzdHJ1Y3QgZmllbGRzIGFkZGVkIChgcGt0X3B0cl9kZWx0YWAsIGBwa3RfcHRyX2RlbHRhX3NldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSByZWFkIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB2ZXJpZmllciBsb2dpYywgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGFuZCBzaWduYWwtaGFuZGxpbmcgaW1wcm92ZW1lbnRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[1] Phase: Succeeded StartedAt: 2026-09-06 11:24:36 +0000 UTC FinishedAt: 2026-09-06 11:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 11:24:36 +0000 UTC FinishedAt: 2026-09-06 11:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2] Phase: Succeeded StartedAt: 2026-09-06 11:24:36 +0000 UTC FinishedAt: 2026-09-06 15:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:24:36 +0000 UTC FinishedAt: 2026-09-06 15:04:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:24:36 +0000 UTC FinishedAt: 2026-09-06 11:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:24:36 +0000 UTC FinishedAt: 2026-09-06 11:24:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflowjlcv9/series-workflowjlcv9-convert-artifact-4246473249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:24:46 +0000 UTC FinishedAt: 2026-09-06 11:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:24:46 +0000 UTC FinishedAt: 2026-09-06 11:40:52 +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:*44b5adf8-c125-41fa-a9c0-985f37b9ac84,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-workflowjlcv9/series-workflowjlcv9-convert-artifact-4246473249/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": "431cce70-f827-4ae8-8090-ec9025207578", "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-workflowjlcv9/series-workflowjlcv9-build-action-3718046031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:24:46 +0000 UTC FinishedAt: 2026-09-06 11:40:42 +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:*44b5adf8-c125-41fa-a9c0-985f37b9ac84,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-workflowjlcv9/series-workflowjlcv9-convert-artifact-4246473249/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": "431cce70-f827-4ae8-8090-ec9025207578", "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-workflowjlcv9/series-workflowjlcv9-build-action-3718046031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:40:52 +0000 UTC FinishedAt: 2026-09-06 11:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:40:52 +0000 UTC FinishedAt: 2026-09-06 11:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:40:52 +0000 UTC FinishedAt: 2026-09-06 11:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:40:52 +0000 UTC FinishedAt: 2026-09-06 11:40:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-workflowjlcv9/series-workflowjlcv9-convert-artifact-3114867572/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:41:02 +0000 UTC FinishedAt: 2026-09-06 11:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:41:02 +0000 UTC FinishedAt: 2026-09-06 11:42:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*431cce70-f827-4ae8-8090-ec9025207578,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-workflowjlcv9/series-workflowjlcv9-build-action-3718046031/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-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:43:02 +0000 UTC FinishedAt: 2026-09-06 11:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:43:02 +0000 UTC FinishedAt: 2026-09-06 11:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:43:02 +0000 UTC FinishedAt: 2026-09-06 12:01:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:43:02 +0000 UTC FinishedAt: 2026-09-06 12:01:18 +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:*44b5adf8-c125-41fa-a9c0-985f37b9ac84,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-workflowjlcv9/series-workflowjlcv9-convert-artifact-3114867572/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": "369d7d83-cc1e-4ca5-b33d-c7bf55a6cab9", "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-workflowjlcv9/series-workflowjlcv9-build-action-1843941440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 11:43:02 +0000 UTC FinishedAt: 2026-09-06 12:01:05 +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:*44b5adf8-c125-41fa-a9c0-985f37b9ac84,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-workflowjlcv9/series-workflowjlcv9-convert-artifact-3114867572/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": "369d7d83-cc1e-4ca5-b33d-c7bf55a6cab9", "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-workflowjlcv9/series-workflowjlcv9-build-action-1843941440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:01:18 +0000 UTC FinishedAt: 2026-09-06 12:01:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:01:18 +0000 UTC FinishedAt: 2026-09-06 12:01:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:01:18 +0000 UTC FinishedAt: 2026-09-06 12:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:01:18 +0000 UTC FinishedAt: 2026-09-06 12:03:12 +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:*369d7d83-cc1e-4ca5-b33d-c7bf55a6cab9,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-workflowjlcv9/series-workflowjlcv9-build-action-1843941440/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-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:23 +0000 UTC FinishedAt: 2026-09-06 15:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:23 +0000 UTC FinishedAt: 2026-09-06 15:04:57 +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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"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:*431cce70-f827-4ae8-8090-ec9025207578,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*369d7d83-cc1e-4ca5-b33d-c7bf55a6cab9,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-workflowjlcv9/series-workflowjlcv9-build-action-3718046031/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-workflowjlcv9/series-workflowjlcv9-build-action-1843941440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:23 +0000 UTC FinishedAt: 2026-09-06 12:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:23 +0000 UTC FinishedAt: 2026-09-06 12:03:41 +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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"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-workflowjlcv9/series-workflowjlcv9-convert-artifact-2370504349/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:23 +0000 UTC FinishedAt: 2026-09-06 12:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:23 +0000 UTC FinishedAt: 2026-09-06 12:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:23 +0000 UTC FinishedAt: 2026-09-06 12:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:46 +0000 UTC FinishedAt: 2026-09-06 15:04:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlcv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["bpf_check_cfg","push_insn","bpf_patch_insn_data","verifier_remove_insns","check_pkt_ptr_ids","regsafe","bpf_is_state_visited","map_set_for_each_callback_args","set_timer_callback_state","set_task_work_schedule_callback_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b75a000f2ac15f4778ddd6d9298d60b24ad776fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"17dd08c4-341a-490c-a2c5-54eed0993dd8","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-06 12:03:46 +0000 UTC FinishedAt: 2026-09-06 15:04:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*431cce70-f827-4ae8-8090-ec9025207578,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*369d7d83-cc1e-4ca5-b33d-c7bf55a6cab9,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-workflowjlcv9/series-workflowjlcv9-build-action-3718046031/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-workflowjlcv9/series-workflowjlcv9-build-action-1843941440/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-workflowjlcv9/series-workflowjlcv9-convert-artifact-2370504349/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,}