Name: series-workflow9hz99 Phase: Succeeded StartedAt: 2026-09-09 04:37:47 +0000 UTC FinishedAt: 2026-09-09 08:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[0] Phase: Succeeded StartedAt: 2026-09-09 04:37:47 +0000 UTC FinishedAt: 2026-09-09 04:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 04:37:47 +0000 UTC FinishedAt: 2026-09-09 04:40:12 +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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "3fa3a687-355f-4f1c-a56a-c10e7f21b42c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_kfunc_call", "bpf_check" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmVmZXJlbmNlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9yICYjMzk7bmV4dCYjMzk7IGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uYmU0OTc4NjI5YWU1OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTQxMDUsNiAmIzQzOzE0MTA1LDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuJiM0MztcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFx1MDAyNm1ldGEpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmI4YzhhM2IyNDU4MmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5AQCAtMjgsNiAmIzQzOzI4LDI3IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICghdm1hX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwmIzM0OylcbiBpbnQgaXRlcl9uZXh0X3RydXN0ZWRfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG5AQCAtNjYsNiAmIzQzOzg3LDI4IEBAIGludCBpdGVyX25leHRfcmN1KGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0O1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfbmV3KFx1MDAyNnRhc2tfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4mIzQzO1x0aWYgKCF0YXNrX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4mIzQzO1x0YnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19kZXN0cm95KFx1MDAyNnRhc2tfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcJiMzNDspXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmJlNDk3ODYyOWFlNTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTE0MTA1LDYgJiM0MzsxNDEwNSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQlyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7CiAJCQlyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7CiAJCQlyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7CiYjNDM7CiYjNDM7CQkJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSAmYW1wOyZhbXA7ICEodHlwZSAmYW1wOyBNRU1fUkNVKSkKJiM0MzsJCQkJcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDsKIAkJfQogCiAJCWlmIChpc19rZnVuY19yZXRfbnVsbCgmYW1wO21ldGEpKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwppbmRleCA3NjAxMmRiYmRiNDEzLi5iOGM4YTNiMjQ1ODJmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKQEAgLTI4LDYgJiM0MzsyOCwyNyBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIHZtYV9wdHItJmd0O3ZtX3N0YXJ0OwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF90cnVzdGVkX29yX251bGwoY29uc3Qgdm9pZCAqY3R4KQpAQCAtNjYsNiAmIzQzOzg3LDI4IEBAIGludCBpdGVyX25leHRfcmN1KGNvbnN0IHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza19uZXcoJmFtcDt0YXNrX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXRhc2tfcHRyID0gYnBmX2l0ZXJfdGFza19uZXh0KCZhbXA7dGFza19pdCk7CiYjNDM7CWlmICghdGFza19wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CWJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX2Rlc3Ryb3koJmFtcDt0YXNrX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxJiMzNDspCiBpbnQgaXRlcl9uZXh0X3JjdV9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjaGVja19rZnVuY19jYWxsYCBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBsb2dpYyByZWxhdGVkIHRvIGl0ZXJhdG9yIGNhbGxzLCBzcGVjaWZpY2FsbHkgd2hlbiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgcmV0dXJucyB0cnVlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkYCB0byBgbWV0YS5yZWZfb2JqLmlkYCBpZiB0aGUgdHlwZSBpc24mIzM5O3QgYE1FTV9SQ1VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFdoeSB0aGlzIHNwZWNpZmljIGNoZWNrIGZvciBgTUVNX1JDVWA/IElzIHRoaXMgcmVsYXRlZCB0byBtZW1vcnkgYmFycmllcnMsIHBlcmhhcHM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGlmIHRoaXMgY29uZGl0aW9uIGlzbiYjMzk7dCBtZXQ/CgpUaGUgb3RoZXIgcGFydCBvZiB0aGlzIHBhdGNoIGlzIHVwZGF0aW5nIHRoZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNgLiBUaGF0JiMzOTtzIGdvb2Q7IGhvcGVmdWxseSwgdGhvc2UgdGVzdHMgY292ZXIgdGhlIG5ldyBsb2dpYy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhvc2UgdGVzdHMgY2xvc2VseSB0byBzZWUgaG93IHRoZXkmIzM5O3JlIHZlcmlmeWluZyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBpdGVyYXRvciBjYWxscyB3aXRoIHRoaXMgY2hhbmdlLgoKUmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBjb2RlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IGFyb3VuZCBga2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTA1YCBhbmQgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgZ2VuZXJhbGx5LCBhbmQgd2hhdCBvdGhlciBjaGVja3MgYXJlIHBlcmZvcm1lZC4gVGhhdCYjMzk7bGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIGNvcnJlY3RuZXNzIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwOTA6XHRcdFx0XHRcdCAqIHRoZSBNRU1fUkNVIGZsYWcgdG8gdGhlIHBvaW50ZXIgcmV0dXJuZWQgZnJvbVxuMTQwOTE6XHRcdFx0XHRcdCAqIHRoZSBpdGVyYXRvciYjMzk7cyBuZXh0IGZ1bmN0aW9uIChlLmcuLFxuMTQwOTI6XHRcdFx0XHRcdCAqIGJwZl9pdGVyX3Rhc2tfbmV4dCkuXG4xNDA5MzpcdFx0XHRcdFx0ICovXG4xNDA5NDpcdFx0XHRcdFx0dHlwZSB8PSBNRU1fUkNVO1xuMTQwOTU6XHRcdFx0XHR9IGVsc2Uge1xuMTQwOTY6XHRcdFx0XHRcdC8qXG4xNDA5NzpcdFx0XHRcdFx0ICogQW55IFBUUl9UT19CVEZfSUQgdGhhdCBpcyByZXR1cm5lZCBmcm9tIGEgQlBGXG4xNDA5ODpcdFx0XHRcdFx0ICoga2Z1bmMgc2hvdWxkIGJ5IGRlZmF1bHQgYmUgdHJlYXRlZCBhc1xuMTQwOTk6XHRcdFx0XHRcdCAqIGltcGxpY2l0bHkgdHJ1c3RlZC5cbjE0MTAwOlx0XHRcdFx0XHQgKi9cbjE0MTAxOlx0XHRcdFx0XHR0eXBlIHw9IFBUUl9UUlVTVEVEO1xuMTQxMDI6XHRcdFx0XHR9XG4xNDEwMzpcdFxuMTQxMDQ6XHRcdFx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbjE0MTA1Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuMTQxMDY6XHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XG4xNDEwNzpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcbjE0MTA4Olx0XG4xNDEwOTpcdFx0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuMTQxMTA6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4xNDExMTpcdFx0XHR9XG4xNDExMjpcdFxuMTQxMTM6XHRcdFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFx1MDAyNm1ldGEpKSB7XG4xNDExNDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IFBUUl9NQVlCRV9OVUxMO1xuMTQxMTU6XHRcdFx0XHQvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovXG4xNDExNjpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuMTQxMTc6XHRcdFx0fVxuMTQxMTg6XHRcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkpIHtcbjE0MTE5Olx0XHRcdFx0aWQgPSBhY3F1aXJlX3JlZmVyZW5jZShlbnYsIGluc25faWR4LCAwKTtcbjE0MTIwOlx0XHRcdFx0aWYgKGlkIFx1MDAzYyAwKVxuMTQxMjE6XHRcdFx0XHRcdHJldHVybiBpZDtcbjE0MTIyOlx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gaWQ7XG4xNDEyMzpcdFx0XHR9IGVsc2UgaWYgKGlzX3JidHJlZV9ub2RlX3R5cGUocHRyX3R5cGUpIHx8IGlzX2xpc3Rfbm9kZV90eXBlKHB0cl90eXBlKSkge1xuMTQxMjQ6XHRcdFx0XHRyZWZfc2V0X25vbl9vd25pbmcoZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuMTQxMjU6XHRcdFx0fVxuMTQxMjY6XHRcbjE0MTI3Olx0XHRcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcdTAwMjZyZWdzW0JQRl9SRUdfMF0pIFx1MDAyNlx1MDAyNiAhcmVnc1tCUEZfUkVHXzBdLmlkKVxuMTQxMjg6XHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0uaWQgPSAmIzQzOyYjNDM7ZW52LVx1MDAzZWlkX2dlbjtcbjE0MTI5Olx0XHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3ZvaWQodCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEJQRiBWZXJpZmllcioqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQ6IGBjaGVja19rZnVuY19jYWxsYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhlIEJQRiB2ZXJpZmllciwgcmlnaHQ/IFRoYXQmIzM5O3MgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgd2l0aCBgQlBGX1BST0dfTE9BRGAuIERlZmluaXRlbHkgd29ydGggZGlnZ2luZyBpbnRvLgoKTGV0JiMzOTtzIHF1aWNrbHkgYW5hbHl6ZTogQ29yZSBzdWJzeXN0ZW0/IFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IEJQRiB2ZXJpZmllciBsb2dpYywgbWVhbmluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGF0IGFyZWEuIFNlY3Rpb24gMyBsaXN0cyB0aGUganVpY3kgYXJlYXMgdG8gZnV6ejsgbW0sIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLCBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuIEJpbmdvISBCUEYgZGVmaW5pdGVseSB0aWNrcyB0aGUgJiMzNDtXb3J0aEZ1enppbmcgPSB0cnVlJiMzNDsgYm94LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZXF1aXJlbWVudHM6IFdoYXQgY29uZmlncyBhbmQgc3ltYm9scyBhcmUgbmVlZGVkIHRvIG1ha2UgdGhpcyBjb2RlIGFjdGl2ZT8gSSBuZWVkIHRvIGNoZWNrIGBLY29uZmlnYCBmb3IgYm90aCBCUEYgYW5kIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O20gYXNzdW1pbmcgYEJQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCwgY292ZXJpbmcgdGhlIEJQRiBzeXNjYWxsIGFuZCB2ZXJpZmllci4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgb3IgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9idGYuYy01OTgwLVxua2VybmVsL2JwZi9idGYuYzo1OTgxOlx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxua2VybmVsL2JwZi9idGYuYy01OTgyLVx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXHUwMDNlb3BzO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVx0Lypcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0mIzM5O3Mgb3BzLiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XHRbX2lkXSA9IFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI3MD1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI4MS0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjgyOiAqIGNsZWFycyByZWctXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODMtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24mIzM5O3QgY2FyZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDU0Mz1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MTctXHRcdFx0XHRlbnYsIFwmIzM0O1RoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFwmIzM0O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzE4Olx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MTktXHRcdFx0XHRwdHJfcmVnbm8sIGRzdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NjY1PWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMC0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzMxOiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzMyLSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTcxMj1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI5LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODMwOlx0ZW52LVx1MDAzZW9wcyA9IHN0X29wcy1cdTAwM2V2ZXJpZmllcl9vcHM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4MzEtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNDYzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUwMi1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1MDM6XHRcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTA0LVx0XHRwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMTM1PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE0NS1cdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE0NjpcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNDctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1Ny1cdGVudi1cdTAwM2Vwcm9nID0gKnByb2c7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNTg6XHRlbnYtXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1OS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNjc6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjgtXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gQlBGIEl0ZXJhdGlvbiBGdW5jdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgZnVuY3Rpb24gYSBiaXQgYmV0dGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGJyb2FkZXIgYGNoZWNrX2tmdW5jX2NhbGxgIG1lY2hhbmlzbSBhbmQgd2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpbmdzLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gRmlyc3QsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRvIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jYCB3aXRoaW4gYHZlcmlmaWVyLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGl0IGRvZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHZlcmlmaWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19pdGVyX25leHRfa2Z1bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jPTQ1Mz1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01MjMtXHRcdFx0cmV0ID0gYnBmX2ZldGNoX2tmdW5jX2FyZ19tZXRhKGVudiwgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvY2ZnLmM6NTI0Olx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xua2VybmVsL2JwZi9jZmcuYy01MjUtXHRcdFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNzU1PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzk3Olx0aW5zbl9hdXgtXHUwMDNlaXNfaXRlcl9uZXh0ID0gYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5OC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwODAtXHRcdFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcdTAwMjZtZXRhKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDgxOlx0XHRcdFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDgyLVx0XHRcdFx0ICAoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcdFx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjYgISh0eXBlIFx1MDAyNiBNRU1fUkNVKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYwOlx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE2MS1cdFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcdTAwMjZtZXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODMxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVmVyaWZ5aW5nIEtmdW5jIENhbGxzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGZvciBrZnVuYyBjYWxscyB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0uIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgdmVyaWZpZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGNoZWNrX2tmdW5jX2NhbGxgIGZ1bmN0aW9uLiBJIGtub3cgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgdmVyaWZpZXIuY2AsIGJ1dCB0aGF0IHN0aWxsIG1ha2VzIGl0IGEgc3ltYm9sLiBgdmVyaWZpZXIuY2AgaXMgYSBtYXNzaXZlIGZpbGUsIHNvIGl0JiMzOTtzIG1vc3QgY2VydGFpbmx5IG5vdCBpbmxpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgc3ltYm9sIGlzIHByb3Blcmx5IGRlZmluZWQgaW4gdm1saW51eC4KClRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBJIHNob3VsZCBhbHNvIGlkZW50aWZ5IG90aGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzLiBUaGUgcHJpbWFyeSBvbmUsIGFzIEkgcmVjYWxsLCBpcyBgYnBmX2NoZWNrYC4gSXQgbG9va3MgbGlrZSB0aGF0IGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllciwgY2FsbGVkIGZyb20gYGJwZl9wcm9nX2xvYWRgIGluIGBzeXNjYWxsLmNgLgoKTm93LCBjb25zaWRlcmluZyBteSBpbml0aWFsIGZvY3VzIGlzIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBwZXJoYXBzIGBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsYCBzZWVtIGxpa2UgcHJvbWlzaW5nIHN5bWJvbHMgdG8gdHJhY2UgdGhyb3VnaC4KCkJlZm9yZSBkaWdnaW5nIGRlZXBlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGLXJlbGF0ZWQgZmVhdHVyZS4gUmF0aGVyIHRoYW4ganVzdCBndWVzc2luZyBvciBibGluZGx5IHNlYXJjaGluZywgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgY29yZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgMjUuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZmluZCB0aGUgbWFpbiBkZWZpbml0aW9ucyBhbmQgc2VlIGhvdyB0aGluZ3MgYnJhbmNoIG91dCBmcm9tIHRoZXJlLiBJdCBzaG91bGQgcXVpY2tseSBleHBvc2UgYW55IHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCByZXZlYWxpbmcgdGhlIHByZXJlcXVpc2l0ZXMg4oCTIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgZmxhZ3MsIG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5ncyDigJMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgbGF0ZXIgb24gZHVlIHRvIG1pc3NpbmcgZGVwZW5kZW5jaWVzLCBvciB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIHJlbGF0aW9uc2hpcHMuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgc2F2ZSB0aW1lIGluIHRoZSBsb25nIHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBCVEYgRGVidWcgSW5mbyBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBhbmQga2Z1bmNzL0JURiBzdXBwb3J0IHdpdGhpbiBCUEYuIEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uLCBhbmQgSSBuZWVkIHRvIGVzdGFibGlzaCBhIGNsZWFyIGRlcGVuZGVuY3kgaGVyZS4gSXMgdGhpcyBkZWJ1ZyBpbmZvIHNldHRpbmcgKnJlcXVpcmVkKiBmb3Iga2Z1bmMgZmVhdHVyZXMsIG9yIGlzIGl0IG9wdGlvbmFsPyBEb2VzIGVuYWJsaW5nIEJURiBkZXBlbmQgb24gaXQ/IEkmIzM5O3ZlIHNlZW4gc2l0dWF0aW9ucyB3aGVyZSBpdCBpcyBjcml0aWNhbCwgYW5kIG90aGVycyB3aGVyZSBpdCBpcyBub3QsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBrZXJuZWwgYnVpbGQgYW5kIHRoZSBCUEYgdG9vbHMuCgpNeSBmaXJzdCBtb3ZlIGlzIGdvaW5nIHRvIGJlIGEgcXVpY2sgYGdyZXBgIG9wZXJhdGlvbi4gSSYjMzk7bGwgc2VhcmNoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIHRyZWVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBpbnN0YW5jZXMgb2YgYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGFueSBjb2RlIHJlbGF0ZWQgdG8ga2Z1bmMgZW5hYmxlbWVudC4gVGhhdCBzaG91bGQgb2ZmZXIgcXVpY2sgaW5zaWdodHMgaW50byBhbnkgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLiBJZiBgZ3JlcGAgZG9lc24mIzM5O3QgeWllbGQgYW55dGhpbmcgaW1tZWRpYXRlbHksIEkgd2lsbCBicm9hZGVuIG15IHNlYXJjaCBieSBsb29raW5nIGF0IGhvdyBrZnVuY3MgdGhlbXNlbHZlcyBhcmUgZW5hYmxlZCwgSSBhbSBjb25maWRlbnQgdGhhdCBJIGNhbiBmaW5kIGEgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCB0cmlnZ2VycyBCVEYgdG8gYmUgZW5hYmxlZC4gQnkgYW5hbHl6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBpbmZlciB0aGUgaW1wb3J0YW5jZSBvZiBCVEYgZGVidWcgaW5mbyBmb3Iga2Z1bmMgZnVuY3Rpb25hbGl0eS4gVGhpcyBkaXJlY3QgZXhhbWluYXRpb24gaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYXZvaWQgYW55IG1pc3N0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQyLWVuZGlmXG4tLVxua2VybmVsL2JwZi9idGYuYz02NDAwPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjQwNS1cbmtlcm5lbC9icGYvYnRmLmM6NjQwNjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKVxua2VybmVsL2JwZi9idGYuYy02NDA3LVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY0ODY9X191MzIgYnRmX3JlbG9jYXRlX2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgX191MzIgaWQpXG4tLVxua2VybmVsL2JwZi9idGYuYy02NDkyLVxua2VybmVsL2JwZi9idGYuYzo2NDkzOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy02NDk0LVxua2VybmVsL2JwZi9idGYuYz02NDk1PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjU5MC1cbmtlcm5lbC9icGYvYnRmLmM6NjU5MTojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtNjU5Mi1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg1MDc9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy04NTEwLVxua2VybmVsL2JwZi9idGYuYzo4NTExOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy04NTEyLXN0cnVjdCBidGZfbW9kdWxlIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2NDk9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcbmtlcm5lbC9icGYvYnRmLmM6ODY1MDojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtODY1MS1cbmtlcm5lbC9icGYvYnRmLmM9ODY1Mj1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODY1NC1cdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NTU6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTYtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2ODI9c3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmtlcm5lbC9icGYvYnRmLmMtODY4My17XG5rZXJuZWwvYnBmL2J0Zi5jOjg2ODQ6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2ODUtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg2OTUtXG5rZXJuZWwvYnBmL2J0Zi5jOjg2OTY6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2OTctXHRtdXRleF9sb2NrKFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODcxMj1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTMte1xua2VybmVsL2JwZi9idGYuYzo4NzE0Olx0aWYgKCFtb2R1bGUgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xua2VybmVsL2JwZi9idGYuYy04NzE1LVx0XHRwcl9lcnIoXCYjMzQ7bWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxuXCYjMzQ7LCBmZWF0dXJlKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTctXHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjg3MTg6XHRpZiAobW9kdWxlIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbmtlcm5lbC9icGYvYnRmLmMtODcxOS1cdFx0cHJfd2FybihcJiMzNDttaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcblwmIzM0OywgZmVhdHVyZSk7XG4tLVxua2VybmVsL2JwZi9idGYuYz04ODYwPXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxua2VybmVsL2JwZi9idGYuYy04ODYxLXtcbmtlcm5lbC9icGYvYnRmLmM6ODg2MjojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg2My1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtODg3Ni1cbmtlcm5lbC9icGYvYnRmLmM6ODg3NzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg3OC1cdGd1YXJkKG11dGV4KShcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTk1MjU9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTU1Mi1cbmtlcm5lbC9icGYvYnRmLmM6OTU1MzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtOTU1NC1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjgwMj1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODE4LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjgxOTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgyMC1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MTUxPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2NS1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTY2Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2Ny1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3MTI9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NzI4LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg3Mjk6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3MzAtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNjIwPXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA2MjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA2MjU6XHRpZiAoIWJ0ZiBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA2MjYtXHRcdG11dGV4X2xvY2soXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzAwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgZG93biB3aHkgSSYjMzk7bSBoaXR0aW5nIGEgcm9hZGJsb2NrIHdpdGggdGhlc2Uga2Z1bmMgY2FsbHMgaW4gdGhlIHZlcmlmaWVyLiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgYm90aCBlc3NlbnRpYWwgdG8gZ2V0IHRoaXMgcmlnaHQuIFNwZWNpZmljYWxseSwgdGhhdCBsaW5lIDI4MTkgaW4gYHZlcmlmaWVyLmNgIGlzIHRoZSBjdWxwcml0OiAmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEYmIzM0Oy4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBob3cgdGhlc2UgdHdvIGNvbmZpZ3MgYXJlIGludGVyYWN0aW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKSSBuZWVkIHRvIGhvbWUgaW4gb24gc29tZSBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEkmIzM5O2xsIGZvY3VzIG9uIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBgcHJvY2Vzc19pdGVyX25leHRfY2FsbGAg4oCTIGFuZCBiZWNhdXNlIEkmIzM5O3ZlIHJ1biBpbnRvIGl0ZXJfbmV4dF9rZnVuYyByZWNlbnRseSwgaXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgd2hldGhlciBgcHJvY2Vzc19pdGVyX25leHRfY2FsbGAgYXBwZWFycyBpbiBgdmVyaWZpZXIuY2AuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3NfaXRlcl9uZXh0X2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTExMTE9c3RhdGljIGJvb2wgc3RhdGVzX21heWJlX2xvb3Bpbmcoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyOC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTEyOTovKiBpc19zdGF0ZV92aXNpdGVkKCkgaGFuZGxlcyBpdGVyX25leHQoKSAoc2VlIHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoKSBmb3Jcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEzMC0gKiB0ZXJtaW5vbG9neSkgY2FsbHMgc3BlY2lhbGx5OiBhcyBvcHBvc2VkIHRvIGJvdW5kZWQgQlBGIGxvb3BzLCBpdCAqZXhwZWN0cypcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExNjAtICogbG9vcGluZyAoYW5kIHdvdWxkIGJlICp0ZWNobmljYWxseSogY29ycmVjdCwgaWYgbm90IGZvciBpdGVyYXRvciYjMzk7c1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMTYxOiAqIFwmIzM0O2V2ZW50dWFsIHN0aWNreSBOVUxMXCYjMzQ7IGNvbnRyYWN0LCBzZWUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpKS4gQnV0IHdlXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExNjI6ICogZG9uJiMzOTt0IHdhbnQgdGhhdC4gU28gd2hhdCB3ZSBkbyBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgd2hlbiB3ZSBnbyBvblxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTYzLSAqIGFub3RoZXIgQUNUSVZFIGl0ZXJhdGlvbiwgd2UgYnVtcCBzbG90LVx1MDAzZWl0ZXIuZGVwdGgsIHRvIG1hcmsgdGhhdCBpdCYjMzk7c1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI5Ni1cdFx0XHQgKiBhYm91dCBJRCByZW1hcHBpbmcsIHNvIGRvbiYjMzk7dCBldmVuIHBlcmZvcm0gaXQuXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyOTc6XHRcdFx0ICogU2VlIHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoKSBhbmQgaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyOTgtXHRcdFx0ICogZm9yIG92ZXJ2aWV3IG9mIHRoZSBsb2dpYy4gV2hlbiBjdXJyZW50IGFuZCBvbmUgb2YgcGFyZW50XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc3MzQ9c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgyNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODI2Olx0XHQvKiByZW1lbWJlciBtZXRhLVx1MDAzZWl0ZXIgaW5mbyBmb3IgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgyNy1cdFx0bWV0YS1cdTAwM2VpdGVyLnNwaSA9IHNwaTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzkyMT1zdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmdldF9pdGVyX2Zyb21fc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyX3N0LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTI5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5MzA6LyogcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGlzIGNhbGxlZCB3aGVuIHZlcmlmaWVyIGdldHMgdG8gaXRlcmF0b3ImIzM5O3MgbmV4dFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5MzEtICogXCYjMzQ7bWV0aG9kXCYjMzQ7IChlLmcuLCBicGZfaXRlcl9udW1fbmV4dCgpIGZvciBudW1iZXJzIGl0ZXJhdG9yKSBjYWxsLiBXZSYjMzk7bGwgcmVmZXJcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkzOC0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5Mzk6ICogV2l0aCB0aGUgYXNzdW1wdGlvbiBvZiBzdWNoIGNvbnRyYWN0LCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc2ltdWxhdGVzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk0MC0gKiBhIGZvcmsgaW4gdGhlIHZlcmlmaWVyIHN0YXRlIHRvIHZhbGlkYXRlIGxvb3AgbG9naWMgY29ycmVjdG5lc3MgYW5kIHNhZmV0eVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDA3LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjgwMDg6c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDA5LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzM0PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MTUtXHQgKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDE2Olx0ICogVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgZm9yIG9wZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNy1cdCAqIGNvZGVkIGl0ZXJhdG9ycy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3NTU9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNTQtXHQvKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTU1Olx0ICogUmVjb3JkIFIwIGJlZm9yZSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc25hcHNob3RzIHRoZSBhbHRlcm5hdGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE1Ni1cdCAqIGl0ZXJhdG9yIHBhdGgmIzM5O3MgZGlhZ25vc3RpYyBwb3NpdGlvbi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNjAtXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYxOlx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTYyLVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyB0aGUgQlBGIEl0ZXJhdG9yIE5leHQgRnVuY3Rpb24gVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jYC4gSSB0aGluayBhIHF1aWNrIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gd2l0aGluIGB2ZXJpZmllci5jYCBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBjaGVjayBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGdyYXNwIHRoZSBleGFjdCBsb2dpYy4gVGhpcyBpcyBnb2luZyB0byBoZWxwIG1lIHRoaW5rIHRoaXMgdGhyb3VnaCBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfaXRlcl9uZXh0X2tmdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjExPWJvb2wgYnBmX2lzX3N5bmNfY2FsbGJhY2tfY2FsbGluZ19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2MTI6c3RhdGljIGlubGluZSBib29sIGJwZl9pc19pdGVyX25leHRfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NTAKCQkJCQkJCW91dHB1dDogMTQxCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBWZXJpZmllciBBbmFseXNpcyoqCgpPa2F5LCBzbyBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgaXMgc3RhdGljYWxseSBpbmxpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBjb25jZXJuIGhlcmUgaXMgY2VudGVyZWQgb24gYGNoZWNrX2tmdW5jX2NhbGxgIGJlY2F1c2UgaXQmIzM5O3MgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQsIGFjY29yZGluZyB0byB3aGF0IEkmIzM5O20gc2VlaW5nIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHNpZ25pZmljYW50OyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbG9naWMgaXMgYW5kIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBhcmUgbW9zdCBsaWtlbHkgdG8gc3VyZmFjZS4gVGhlIG92ZXJhbGwgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciBpcyBgYnBmX2NoZWNrYC4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb25kaXRpb25zIGFyZSBtZXQgdG8gd2FycmFudCBhIGRlZXAgZGl2ZS4gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyBzZXQgdG8gdHJ1ZSwgZ29vZCBzdGFydC4gVGhlICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGFyZSBpbiBwbGFjZTsgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgcHJlc2VudC4gRmluYWxseSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBicGZfY2hlY2tgLiBQZXJmZWN0LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKUmlnaHQsIHRpbWUgdG8gY29uc3RydWN0IHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncyBub3csIGFuZCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJiMzOTtuZXh0JiMzOTsga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjE5MjNhOWMzZGZkNTNjOGFjMzcyZjlkMzUzYTkwNjkxZmRkN2U5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwNDozOToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li5iZTQ5Nzg2MjlhZTU5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xNDEwNSw2ICYjNDM7MTQxMDUsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJcmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmOwogCQkJcmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlOwogCQkJcmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IHB0cl90eXBlX2lkOwomIzQzOwomIzQzOwkJCWlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKCZhbXA7bWV0YSkgJmFtcDsmYW1wOyAhKHR5cGUgJmFtcDsgTUVNX1JDVSkpCiYjNDM7CQkJCXJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7CiAJCX0KIAogCQlpZiAoaXNfa2Z1bmNfcmV0X251bGwoJmFtcDttZXRhKSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKaW5kZXggNzYwMTJkYmJkYjQxMy4uYjhjOGEzYjI0NTgyZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCkBAIC0yOCw2ICYjNDM7MjgsMjcgQEAgaW50IGl0ZXJfbmV4dF90cnVzdGVkKGNvbnN0IHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiB2bWFfcHRyLSZndDt2bV9zdGFydDsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKQEAgLTY2LDYgJiM0Mzs4NywyOCBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGl0ZXJfbmV4dF9yY3VfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfbmV3KCZhbXA7dGFza19pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dCgmYW1wO3Rhc2tfaXQpOwomIzQzOwlpZiAoIXRhc2tfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfZGVzdHJveSgmYW1wO3Rhc2tfaXQpOwomIzQzOwlicGZfa2Z1bmNfcmN1X3Rhc2tfdGVzdCh0YXNrX3B0cik7CiYjNDM7CXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHBhdGNoIGl0c2VsZiAtIGl0JiMzOTtzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aGljaCBpcyBhIGtleSBjb21wb25lbnQsIG9idmlvdXNseSwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jYCAtLSB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyB3ZSBzaG91bGQgZXhwZWN0IHNvbWUgaXRlcmF0b3ItcmVsYXRlZCB0ZXN0cy4gCgpOb3csIGZvY3VzaW5nIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgZGlmZiBzaG93cyBhIG5ldyBgaWZgIHN0YXRlbWVudCB3aXRoaW4gYGNoZWNrX2tmdW5jX2NhbGxgLiBJdCYjMzk7cyBhc3NpZ25pbmcgYHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWRgIG9ubHkgaWYgdGhlIEtGdW5jIGJlaW5nIGNhbGxlZCBpcyBhbiBpdGVyYXRvciBuZXh0IGZ1bmN0aW9uIGFuZCB0aGUgcmV0dXJuIHR5cGUgZG9lc24mIzM5O3QgaGF2ZSB0aGUgYE1FTV9SQ1VgIGZsYWcuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIG9iamVjdCByZWZlcmVuY2VzIGNvcnJlY3RseSBpbiBpdGVyYXRvcnMuIFdlJiMzOTtyZSBwcm9iYWJseSB0cmFja2luZyBhIHBhcmVudCBvYmplY3QgSUQgdG8gbWFpbnRhaW4gdGhlIG9iamVjdCYjMzk7cyBsaWZldGltZS4gSWYgaXQgaGFzIGBNRU1fUkNVYCwgdGhlIG9iamVjdCBoYXMgUkNVIHNlbWFudGljcyB3aGljaCB3ZSBjYW4gYXNzdW1lIGhhbmRsZSB0aGUgbGlmZWN5Y2xlLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIHRvIGV4cGxvcmUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agc3Vycm91bmRpbmcgdGhlIGNoYW5nZSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBhbHNvIHRyeSB0byBncmVwIGZvciBzaW1pbGFyIGNoYW5nZXMgYXJvdW5kIHRoZSBjb2RlYmFzZS4gVGhpcyBsb29rcyBsaWtlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgY3J1Y2lhbCwgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJlbnRfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE4Nj1zdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YWNrX2VsZW0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA3OnN0YXRpYyBpbnQgYWNxdWlyZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBpbnQgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgtc3RhdGljIGludCBfX3JlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZSwgaW50IGlkKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjQxPXN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTI0My1cdHJlZl9vYmotXHUwMDNlaWQgPSByZWctXHUwMDNlaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjQ0Olx0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSByZWctXHUwMDNlcGFyZW50X2lkO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTI0NS1cdHJlZl9vYmotXHUwMDNlY250JiM0MzsmIzQzOztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQ2PXN0YXRpYyB2b2lkIF9fbWFya19keW5wdHJfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ3LVx0XHRcdCAgICAgIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ4Olx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUwPXN0YXRpYyB2b2lkIG1hcmtfZHlucHRyX3N0YWNrX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyLVx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyZWcyLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MzpcdFx0XHRcdCAgIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsIGludCBwYXJlbnRfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1NzpcdF9fbWFya19keW5wdHJfcmVnKHNyZWcxLCB0eXBlLCB0cnVlLCBpZCwgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTg6XHRfX21hcmtfZHlucHRyX3JlZyhzcmVnMiwgdHlwZSwgZmFsc2UsIGlkLCBwYXJlbnRfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1OS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3MT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NS1cdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc2Olx0aW50IHNwaSwgaSwgZXJyLCBwYXJlbnRfaWQgPSAwO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY3Ny1cdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxMy1cdFx0LyogVHJhY2sgcGFyZW50JiMzOTtzIGlkIGlmIHRoZSBwYXJlbnQgaXMgYSByZWZlcmVuY2VkIG9iamVjdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjcxNDpcdFx0cGFyZW50X2lkID0gcmVmX29iai1cdTAwM2VpZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyMy1cdFx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjQ6XHRcdFx0aWQgPSBhY3F1aXJlX3JlZmVyZW5jZShlbnYsIGluc25faWR4LCBwYXJlbnRfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNS1cdFx0XHRpZiAoaWQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3Mjg6XHRcdFx0cGFyZW50X2lkID0gaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMwLVx0fSBlbHNlIHsgLyogYnBmX2R5bnB0cl9jbG9uZSgpICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxOlx0XHRwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTczMi1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzM0LVx0bWFya19keW5wdHJfc3RhY2tfcmVncyhlbnYsIFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzM1Olx0XHRcdCAgICAgICBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSAxXS5zcGlsbGVkX3B0ciwgdHlwZSwgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1Mz1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY4LVx0cmV0dXJuIHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgZHlucHRyX3R5cGVfcmVmZXJlbmNlZChyZWctXHUwMDNlZHlucHRyLnR5cGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY5Olx0XHRcdFx0ICAgICAgPyByZWctXHUwMDNlcGFyZW50X2lkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcwLVx0XHRcdFx0ICAgICAgOiByZWctXHUwMDNlaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzY9c3RhdGljIHZvaWQgbWFya19yZWdfaW52YWxpZChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzg0OnN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NS1cdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTY6XHRcdGlmIChzdGFjay1cdTAwM2VzcGlsbGVkX3B0ci5wYXJlbnRfaWQgPT0gdl9wYXJlbnRfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk3LVx0XHRcdHJlZl9jbnQmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MDM9c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyNS1cdGlmIChkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLnR5cGUpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyNjpcdCAgICBkeW5wdHJfcmVmX2NudChlbnYsIHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIucGFyZW50X2lkKSBcdTAwM2M9IDEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQyOT1zdGF0aWMgc3RydWN0IGJwZl9yZWZlcmVuY2Vfc3RhdGUgKmFjcXVpcmVfcmVmZXJlbmNlX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ0Mi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDQzOnN0YXRpYyBpbnQgYWNxdWlyZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBpbnQgcGFyZW50X2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDUxLVx0cy1cdTAwM2VpZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NTI6XHRzLVx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDUzLVx0YnBmX2RpYWdfcmVjb3JkX3JlZl9hY3F1aXJlKGVudiwgaW5zbl9pZHgsIHMtXHUwMDNlaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODYwPXN0YXRpYyB2b2lkIF9fbWFya19yZWdfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2NS1cdHJlZy1cdTAwM2VpZCA9IDA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg2NjpcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSAwO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjctXHRfX19tYXJrX3JlZ19rbm93bihyZWcsIGltbSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MDA9c3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAxOlx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEwLVx0cmVnLVx1MDAzZWlkID0gaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkxMTpcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMi1cdHJlZy1cdTAwM2VkeW5wdHIudHlwZSA9IHR5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1Njg9X19wcmludGYoNiwgNykgc3RhdGljIHZvaWQgYnBmX2RpYWdfY2FsbF9hcmdfZm10KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzU3Ny0gKiBhbmQgY29uc3VtZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgZXhwZWN0aW5nIHRvIGJlIGFuIGluaXRpYWxpemVkIGR5bnB0ci5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTc4OiAqIEBwYXJlbnRfaWQgaXMgdXNlZCB0byB0cmFjayB0aGUgcmVmZXJlbmNlZCBwYXJlbnQgb2JqZWN0IChlLmcuLCBmaWxlIG9yIHNrYiBpblxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1NzktICogcWRpc2MgcHJvZ3JhbSkgd2hlbiBjb25zdHJ1Y3RpbmcgYSBkeW5wdHIuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1OTU9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OTktXHRcdFx0ZHlucHRyLVx1MDAzZWlkID0gcmVnLVx1MDAzZWlkO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjc3MDA6XHRcdFx0ZHlucHRyLVx1MDAzZXBhcmVudF9pZCA9IHJlZy1cdTAwM2VwYXJlbnRfaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcwMS1cdFx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NDYwPXN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDg3LVx0XHRcdFx0Y29udGludWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ4ODpcdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0ucGFyZW50X2lkICE9IGlkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0ODktXHRcdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5NS1cdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoe1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk0OTY6XHRcdFx0aWYgKHJlZy1cdTAwM2VpZCAhPSBpZCBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBpZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDk3LVx0XHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OTktXHRcdFx0LyogRnJlZSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgY3VycmVudCBvYmplY3QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTAwOlx0XHRcdGlmIChyZWctXHUwMDNlcGFyZW50X2lkID09IGlkKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTUwMS1cdFx0XHRcdGVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCByZWctXHUwMDNlaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgxMz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNjctXHRpZiAoZnVuY19pZCA9PSBCUEZfRlVOQ19keW5wdHJfZGF0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI2ODpcdFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEuZHlucHRyLmlkO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjY5LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU4ND1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc0NC1cdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzQ1Olx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS1cdTAwM2VkeW5wdHIuaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NDYtXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc1NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA2OS1cdFx0XHRcdFx0cmV0dXJuIGVycjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA3MDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzEtXHRcdFx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOS1cdFx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjYgISh0eXBlIFx1MDAyNiBNRU1fUkNVKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDExMDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxMTEtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGNoZWNrX2tmdW5jX2NhbGxgIGluIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYGNoZWNrX2tmdW5jX2NhbGxgLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IHNlY3Rpb24gb2YgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNDA2MCB0aHJvdWdoIDE0MTIwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGtlcm5lbCBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGJsb2NrIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGNoZWNrcyBpdCYjMzk7cyBwZXJmb3JtaW5nIGF0IHRoYXQganVuY3R1cmUuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgZm9yIHZhbGlkYXRpbmcgYXJndW1lbnRzLCBjYWxsIGNvbnRleHQsIGFuZCBlbnN1cmluZyB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBzZWN1cml0eSBob2xlcyB0aHJvdWdoIHRoZSBCUEYgcHJvZ3JhbS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYXJndW1lbnQgdHlwZSBjaGVja2luZywgYm91bmRzIHZlcmlmaWNhdGlvbiwgYW55IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgbWl0aWdhdGlvbnMsIGFuZCBnZW5lcmFsbHksIGhvdyB0aGlzIGZ1bmN0aW9uIGJhbGFuY2VzIHRoZSBuZWVkIGZvciBCUEYgcHJvZ3JhbSBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIG5lZWQgZm9yIGtlcm5lbCBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCYjMzk7cyB0aGF0IGRlbGljYXRlIGRhbmNlIHRoYXQgSSYjMzk7bSBhbHdheXMgbG9va2luZyBmb3Igd2hlbiByZWFkaW5nIHRoaXMga2luZCBvZiBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDA2MDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5tZW1fc2l6ZSA9IG1ldGEucmV0X21lbS5zaXplO1xuMTQwNjE6XHRcbjE0MDYyOlx0XHRcdFx0aWYgKG1ldGEucjBfcmRvbmx5KVxuMTQwNjM6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IE1FTV9SRE9OTFk7XG4xNDA2NDpcdFxuMTQwNjU6XHRcdFx0XHQvKiBFbnN1cmVzIHdlIGRvbiYjMzk7dCBhY2Nlc3MgdGhlIG1lbW9yeSBhZnRlciBhIHJlbGVhc2VfcmVmZXJlbmNlKCkgKi9cbjE0MDY2Olx0XHRcdFx0aWYgKG1ldGEucmVmX29iai5pZCkge1xuMTQwNjc6XHRcdFx0XHRcdGVyciA9IHZhbGlkYXRlX3JlZl9vYmooZW52LCBcdTAwMjZtZXRhLnJlZl9vYmopO1xuMTQwNjg6XHRcdFx0XHRcdGlmIChlcnIpXG4xNDA2OTpcdFx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQwNzA6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4xNDA3MTpcdFx0XHRcdH1cbjE0MDcyOlx0XG4xNDA3MzpcdFx0XHRcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFx1MDAyNm1ldGEpKVxuMTQwNzQ6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IE1FTV9SQ1U7XG4xNDA3NTpcdFx0XHR9IGVsc2Uge1xuMTQwNzY6XHRcdFx0XHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlID0gUFRSX1RPX0JURl9JRDtcbjE0MDc3Olx0XG4xNDA3ODpcdFx0XHRcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9nZXRfa21lbV9jYWNoZV0pXG4xNDA3OTpcdFx0XHRcdFx0dHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuMTQwODA6XHRcdFx0XHRlbHNlIGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFx1MDAyNm1ldGEpIHx8XG4xNDA4MTpcdFx0XHRcdFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxuMTQwODI6XHRcdFx0XHRcdCAgKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LVx1MDAzZWN1cl9zdGF0ZSwgXHUwMDI2bWV0YSlcbjE0MDgzOlx0XHRcdFx0XHRcdCAgIC1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSkpIHtcbjE0MDg0Olx0XHRcdFx0XHQvKlxuMTQwODU6XHRcdFx0XHRcdCAqIElmIHRoZSBpdGVyYXRvciYjMzk7cyBjb25zdHJ1Y3RvciAodGhlIF9uZXdcbjE0MDg2Olx0XHRcdFx0XHQgKiBmdW5jdGlvbiBlLmcuLCBicGZfaXRlcl90YXNrX25ldykgaGFzIGJlZW5cbjE0MDg3Olx0XHRcdFx0XHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xuMTQwODg6XHRcdFx0XHRcdCAqIEtGX1JDVV9QUk9URUNURUQgYW5kIHdhcyBjYWxsZWQgd2l0aGluIGEgUkNVXG4xNDA4OTpcdFx0XHRcdFx0ICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGFsc28gcHJvcGFnYXRlXG4xNDA5MDpcdFx0XHRcdFx0ICogdGhlIE1FTV9SQ1UgZmxhZyB0byB0aGUgcG9pbnRlciByZXR1cm5lZCBmcm9tXG4xNDA5MTpcdFx0XHRcdFx0ICogdGhlIGl0ZXJhdG9yJiMzOTtzIG5leHQgZnVuY3Rpb24gKGUuZy4sXG4xNDA5MjpcdFx0XHRcdFx0ICogYnBmX2l0ZXJfdGFza19uZXh0KS5cbjE0MDkzOlx0XHRcdFx0XHQgKi9cbjE0MDk0Olx0XHRcdFx0XHR0eXBlIHw9IE1FTV9SQ1U7XG4xNDA5NTpcdFx0XHRcdH0gZWxzZSB7XG4xNDA5NjpcdFx0XHRcdFx0LypcbjE0MDk3Olx0XHRcdFx0XHQgKiBBbnkgUFRSX1RPX0JURl9JRCB0aGF0IGlzIHJldHVybmVkIGZyb20gYSBCUEZcbjE0MDk4Olx0XHRcdFx0XHQgKiBrZnVuYyBzaG91bGQgYnkgZGVmYXVsdCBiZSB0cmVhdGVkIGFzXG4xNDA5OTpcdFx0XHRcdFx0ICogaW1wbGljaXRseSB0cnVzdGVkLlxuMTQxMDA6XHRcdFx0XHRcdCAqL1xuMTQxMDE6XHRcdFx0XHRcdHR5cGUgfD0gUFRSX1RSVVNURUQ7XG4xNDEwMjpcdFx0XHRcdH1cbjE0MTAzOlx0XG4xNDEwNDpcdFx0XHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuMTQxMDU6XHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XG4xNDEwNjpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbjE0MTA3Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IHB0cl90eXBlX2lkO1xuMTQxMDg6XHRcbjE0MTA5Olx0XHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4xNDExMDpcdFx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcbjE0MTExOlx0XHRcdH1cbjE0MTEyOlx0XG4xNDExMzpcdFx0XHRpZiAoaXNfa2Z1bmNfcmV0X251bGwoXHUwMDI2bWV0YSkpIHtcbjE0MTE0Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgfD0gUFRSX01BWUJFX05VTEw7XG4xNDExNTpcdFx0XHRcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cbjE0MTE2Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4xNDExNzpcdFx0XHR9XG4xNDExODpcdFx0XHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcdTAwMjZtZXRhKSkge1xuMTQxMTk6XHRcdFx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEl0ZXJhdG9yIFBvaW50ZXIgVHJhY2tpbmcgRml4KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb2RlIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gQlBGIGl0ZXJhdG9ycywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBwb2ludGVycyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3ImIzM5O3MgYG5leHRgIGtmdW5jLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gcmV0dXJuaW5nIGEgYFBUUl9UT19CVEZfSURgIGZyb20sIHNheSwgYGJwZl9pdGVyX3Rhc2tfdm1hX25leHRgLCB0aGUgYHBhcmVudF9pZGAgb2YgdGhlIHJlZ2lzdGVyIGhvbGRpbmcgdGhlIHBvaW50ZXIgKnNob3VsZCogYmUgc2V0IHRvIHRoZSBpdGVyYXRvciYjMzk7cyByZWZlcmVuY2Ugb2JqZWN0IElEIChgbWV0YS5yZWZfb2JqLmlkYCksIGJ1dCBpdCB3YXNuJiMzOTt0IGZvciB0cnVzdGVkIHBvaW50ZXJzLgoKVGhlIHByb2JsZW0gYXJpc2VzIGR1cmluZyBpdGVyYXRvciBkZXN0cnVjdGlvbi4gV2hlbiBgYnBmX2l0ZXJfLi4uX2Rlc3Ryb3lgIGlzIGNhbGxlZCwgYHJlbGVhc2VfcmVmZXJlbmNlYCBpbnZhbGlkYXRlcyByZWdpc3RlcnMgd2hvc2UgYGlkYCBvciBgcGFyZW50X2lkYCBtYXRjaGVzIHRoZSBpdGVyYXRvciYjMzk7cyBgcmVmX29iai5pZGAuIFdpdGhvdXQgdGhlIGBwYXJlbnRfaWRgIHNldCwgdGhlIHZlcmlmaWVyIHdvdWxkbiYjMzk7dCBmbGFnIGF0dGVtcHRzIHRvIGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyIGFmdGVyIHRoZSBpdGVyYXRvciB3YXMgZGVzdHJveWVkLCBhbGxvd2luZyBwb3RlbnRpYWxseSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgY2xhc3NpYyBVQUYuCgpTbywgdGhpcyBwYXRjaCBzZXRzIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCBmb3IgdHJ1c3RlZCBwb2ludGVycy4gVGhpcyB3YXksIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIGRlc3Ryb3llZCwgYHJlbGVhc2VfcmVmZXJlbmNlYCB3aWxsIGludmFsaWRhdGUgdGhlIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBgaXRlcl9uZXh0YCwgY2F1c2luZyB0aGUgdmVyaWZpZXIgdG8gcmVqZWN0IHByb2dyYW1zIHRoYXQgdHJ5IHRvIHVzZSB0aGUgcG9pbnRlciBhZnRlciB0aGUgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuIFRoZSBzZWxmdGVzdCBgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfZGVzdHJveWAgY29uZmlybXMgdGhpczogdGhlIHZlcmlmaWVyIGNvcnJlY3RseSBjb21wbGFpbnMgd2l0aCAgYF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OylgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBLTVNBTiBjaGVjaz8gIFdlIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyByaXNrcyAqc3BlY2lmaWMqIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLgoKKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZSwgZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoYXQuCiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLgoqICAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90IGhlcmUuCiogICAqKkJvdW5kcyBjaGVja3MvbG9naWMgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogTm8sIHRoaXMgaXMgYWxsIGFib3V0IHZhbGlkYXRpbmcgdGhlIGxpZmVjeWNsZSBvZiBhbGxvY2F0ZWQgcG9pbnRlcnMuCgpUaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGxpZmVjeWNsZSBidWcgYW5kIHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBhIHByb2JsZW0gd2UgdHlwaWNhbGx5IGNhdGNoIHdpdGggS0FTQU4uIFdlIGFyZSB0cmFja2luZyBhIGBwYXJlbnRfaWRgIGZvciB1c2Ugd2l0aCBhIG1lbW9yeSBzYWZldHkgY2hlY2sgKFVBRikuIFRoZSBmaXggaXRzZWxmLCBieSBzZXR0aW5nIHRoZSBgcGFyZW50X2lkYCBiZWZvcmUgdGhlIEJQRiB2ZXJpZmllciBtYWtlcyB0aGlzIGFjY2VzcyB1bnNhZmUsICpwcmV2ZW50cyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBpc3N1ZSBpcyBtZW1vcnkgY29ycnVwdGlvbiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBzaG91bGQgZXhwZWN0IHRoZSB2ZXJpZmllciB0byBjYXRjaCB0aGUgVUFGIGNvbmRpdGlvbiBub3csIHJlbmRlcmluZyBLTVNBTiB1bm5lY2Vzc2FyeS4KClRoZSBwYXRjaCBzaG91bGQgYmUgc2FmZSwgYnV0IGxldCYjMzk7cyBjYXJlZnVsbHkgZG91YmxlLWNoZWNrIG9uZSB0aGluZzogaXMgYG1ldGEucmVmX29iai5pZGAgYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSB0aW1lIHdlIGNhbGwgYGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKWA/IExldCYjMzk7cyB0cmFjZSBob3cgdGhlIGBtZXRhLnJlZl9vYmpgIGlzIHNldCBkdXJpbmcga2Z1bmMgYXJndW1lbnQgcHJvY2Vzc2luZyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19pdGVyX25leHRfa2Z1bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jPTQ1Mz1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01MjMtXHRcdFx0cmV0ID0gYnBmX2ZldGNoX2tmdW5jX2FyZ19tZXRhKGVudiwgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvY2ZnLmM6NTI0Olx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xua2VybmVsL2JwZi9jZmcuYy01MjUtXHRcdFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNzU1PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzk3Olx0aW5zbl9hdXgtXHUwMDNlaXNfaXRlcl9uZXh0ID0gYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5OC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwODAtXHRcdFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcdTAwMjZtZXRhKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDgxOlx0XHRcdFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDgyLVx0XHRcdFx0ICAoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcdFx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjYgISh0eXBlIFx1MDAyNiBNRU1fUkNVKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYwOlx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE2MS1cdFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcdTAwMjZtZXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTYKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLRnVuYyBDYWxsIGFuZCBLTVNBTiBDb25jZXJucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgY2hlY2tfa2Z1bmNfY2FsbGAsIHRoYXQgYG1ldGFgIHN0cnVjdCwgaXQmIzM5O3MgemVyb2VkIG91dCByaWdodCBhdCB0aGUgc3RhcnQuIFNvLCB3ZSYjMzk7cmUgZ3VhcmFudGVlZCBhIGNsZWFuIHNsYXRlIHdpdGggYG1lbXNldCgmYW1wO21ldGEsIDAsIHNpemVvZihtZXRhKSlgLiBUaGVuLCBgY2hlY2tfa2Z1bmNfYXJnc2AgZ29lcyBhbmQgZmlsbHMgaW4gYG1ldGEucmVmX29iamAsIHdoaWNoIG1lYW5zIGBtZXRhLnJlZl9vYmouaWRgIGhhcyB0byBiZSBpbml0aWFsaXplZCBieSB0aGF0IHBvaW50LiBHb29kLgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIHNvdW5kOyBpdCYjMzk7cyBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIHBhcmVudCByZWZlcmVuY2UgSUQgZm9yIGl0ZXJhdG9yIHJldHVybiB2YWx1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgd2hlbiBhbiBpdGVyYXRvciBnZXRzIGRlc3Ryb3llZC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGludmFsaWRhdGluZyBjaGlsZCBwb2ludGVycywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gZG8uCgpTbywgdGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uCgoqICAgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBzY2VuYXJpby4KKiAgIFRoZSByZWFzb25pbmcgZm9yICp3aHkqIHdlJiMzOTtyZSB1c2luZyBLQVNBTiBpbnN0ZWFkIG9mIEtNU0FOIG5lZWRzIHRvIGJlIGNyeXN0YWwgY2xlYXIuIFRoZSByb290IGNhdXNlIGhlcmUgaXNuJiMzOTt0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFrcywgb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcy4gSXQmIzM5O3MgYSBsaWZlY3ljbGUvbGlmZXRpbWUgdHJhY2tpbmcgcHJvYmxlbSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0JiMzOTtzIGxlYWRpbmcgdG8gdXNlLWFmdGVyLWZyZWUgZXJyb3JzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBleGlzdGluZyBLQVNBTiBmdXp6aW5nIHNob3VsZCBoYW5kbGUgdGhvc2UgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcy4gS01TQU4mIzM5O3MgZm9jdXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJiMzOTt0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciB2dWxuZXJhYmlsaXR5LgoKQWxyaWdodCwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIHRpbWUgdG8gdHJpZ2dlciB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJiMzOTtuZXh0JiMzOTsga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmVmZXJlbmNlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9yICYjMzk7bmV4dCYjMzk7IGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToxMS41Mjk5NTU3NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk5NDI1OTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJ25leHQnIGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBjaGVja19rZnVuY19jYWxsIHRvIHNldCB0aGUgcGFyZW50X2lkIG9mIHRoZSByZXR1cm4gcmVnaXN0ZXIgKFIwKSB3aGVuIHZlcmlmeWluZyBhbiBpdGVyYXRvcidzIG5leHQga2Z1bmMgY2FsbCAodW5sZXNzIE1FTV9SQ1UgaXMgc2V0KS4gVGhpcyBlbnN1cmVzIHJlZmVyZW5jZXMgZGVyaXZlZCBmcm9tIGl0ZXJhdG9ycyBwcm9wZXJseSB0cmFjayB0aGVpciBwYXJlbnQgaXRlcmF0b3IgYWNyb3NzIHN0YXRlIGRlc3RydWN0aW9uLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIHZlcmlmaWVyIGNvZGUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjExLjUyOTk2MDczOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxOTA2NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYxOTIzYTljM2RmZDUzYzhhYzM3MmY5ZDM1M2E5MDY5MWZkZDdlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmJlNDk3ODYyOWFlNTkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTE0MTA1LDYgKzE0MTA1LDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XFxuIFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4rXFxuK1xcdFxcdFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNiAhKHR5cGUgXFx1MDAyNiBNRU1fUkNVKSlcXG4rXFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmI4YzhhM2IyNDU4MmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcXG5AQCAtMjgsNiArMjgsMjcgQEAgaW50IGl0ZXJfbmV4dF90cnVzdGVkKGNvbnN0IHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfbmV3KFxcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIXZtYV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIHZtYV9wdHItXFx1MDAzZXZtX3N0YXJ0O1xcbitvdXQ6XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5AQCAtNjYsNiArODcsMjggQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfbmV3KFxcdTAwMjZ0YXNrX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dChcXHUwMDI2dGFza19pdCk7XFxuK1xcdGlmICghdGFza19wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza19kZXN0cm95KFxcdTAwMjZ0YXNrX2l0KTtcXG4rXFx0YnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpO1xcbitcXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcXFwiKVxcbiBpbnQgaXRlcl9uZXh0X3JjdV9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MTIuMTUyNDQwNDE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTY3NzU3MTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3IncyBuZXh0IGtmdW5jIGNhbGwgKHVubGVzcyBNRU1fUkNVIGlzIHNldCkuIFRoaXMgZW5zdXJlcyByZWZlcmVuY2VzIGRlcml2ZWQgZnJvbSBpdGVyYXRvcnMgcHJvcGVybHkgdHJhY2sgdGhlaXIgcGFyZW50IGl0ZXJhdG9yIGFjcm9zcyBzdGF0ZSBkZXN0cnVjdGlvbi4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSB2ZXJpZmllciBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5iZTQ5Nzg2MjlhZTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xNDEwNSw2ICsxNDEwNSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7XG4rXG4rXHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4rXHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19rZnVuY19yZXRfbnVsbChcdTAwMjZtZXRhKSkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5pbmRleCA3NjAxMmRiYmRiNDEzLi5iOGM4YTNiMjQ1ODJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuQEAgLTI4LDYgKzI4LDI3IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcbkBAIC02Niw2ICs4NywyOCBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitcdHJldHVybiAwO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToxMi4xNTI0NDMyMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTUwMTkyNjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY2hlY2tfa2Z1bmNfY2FsbGAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSBsb2dpYyByZWxhdGVkIHRvIGl0ZXJhdG9yIGNhbGxzLCBzcGVjaWZpY2FsbHkgd2hlbiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgcmV0dXJucyB0cnVlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkYCB0byBgbWV0YS5yZWZfb2JqLmlkYCBpZiB0aGUgdHlwZSBpc24ndCBgTUVNX1JDVWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gV2h5IHRoaXMgc3BlY2lmaWMgY2hlY2sgZm9yIGBNRU1fUkNVYD8gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBiYXJyaWVycywgcGVyaGFwcz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaWYgdGhpcyBjb25kaXRpb24gaXNuJ3QgbWV0P1xuXG5UaGUgb3RoZXIgcGFydCBvZiB0aGlzIHBhdGNoIGlzIHVwZGF0aW5nIHRoZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNgLiBUaGF0J3MgZ29vZDsgaG9wZWZ1bGx5LCB0aG9zZSB0ZXN0cyBjb3ZlciB0aGUgbmV3IGxvZ2ljLiBJIG5lZWQgdG8gZXhhbWluZSB0aG9zZSB0ZXN0cyBjbG9zZWx5IHRvIHNlZSBob3cgdGhleSdyZSB2ZXJpZnlpbmcgdGhlIGJlaGF2aW91ciBvZiB0aGUgaXRlcmF0b3IgY2FsbHMgd2l0aCB0aGlzIGNoYW5nZS5cblxuUmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGNvZGUuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwNWAgYW5kIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIGdlbmVyYWxseSwgYW5kIHdoYXQgb3RoZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIFRoYXQnbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIGNvcnJlY3RuZXNzIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MTkuMTAyNjM4MjIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwOTA6XFx0XFx0XFx0XFx0XFx0ICogdGhlIE1FTV9SQ1UgZmxhZyB0byB0aGUgcG9pbnRlciByZXR1cm5lZCBmcm9tXFxuMTQwOTE6XFx0XFx0XFx0XFx0XFx0ICogdGhlIGl0ZXJhdG9yJ3MgbmV4dCBmdW5jdGlvbiAoZS5nLixcXG4xNDA5MjpcXHRcXHRcXHRcXHRcXHQgKiBicGZfaXRlcl90YXNrX25leHQpLlxcbjE0MDkzOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE0MDk0OlxcdFxcdFxcdFxcdFxcdHR5cGUgfD0gTUVNX1JDVTtcXG4xNDA5NTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE0MDk2OlxcdFxcdFxcdFxcdFxcdC8qXFxuMTQwOTc6XFx0XFx0XFx0XFx0XFx0ICogQW55IFBUUl9UT19CVEZfSUQgdGhhdCBpcyByZXR1cm5lZCBmcm9tIGEgQlBGXFxuMTQwOTg6XFx0XFx0XFx0XFx0XFx0ICoga2Z1bmMgc2hvdWxkIGJ5IGRlZmF1bHQgYmUgdHJlYXRlZCBhc1xcbjE0MDk5OlxcdFxcdFxcdFxcdFxcdCAqIGltcGxpY2l0bHkgdHJ1c3RlZC5cXG4xNDEwMDpcXHRcXHRcXHRcXHRcXHQgKi9cXG4xNDEwMTpcXHRcXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9UUlVTVEVEO1xcbjE0MTAyOlxcdFxcdFxcdFxcdH1cXG4xNDEwMzpcXHRcXG4xNDEwNDpcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG4xNDEwNTpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XFxuMTQxMDY6XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xcbjE0MTA3OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4xNDEwODpcXHRcXG4xNDEwOTpcXHRcXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxuMTQxMTA6XFx0XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4xNDExMTpcXHRcXHRcXHR9XFxuMTQxMTI6XFx0XFxuMTQxMTM6XFx0XFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbjE0MTE0OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IFBUUl9NQVlCRV9OVUxMO1xcbjE0MTE1OlxcdFxcdFxcdFxcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cXG4xNDExNjpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbjE0MTE3OlxcdFxcdFxcdH1cXG4xNDExODpcXHRcXHRcXHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcXHUwMDI2bWV0YSkpIHtcXG4xNDExOTpcXHRcXHRcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xcbjE0MTIwOlxcdFxcdFxcdFxcdGlmIChpZCBcXHUwMDNjIDApXFxuMTQxMjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGlkO1xcbjE0MTIyOlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5pZCA9IGlkO1xcbjE0MTIzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaXNfcmJ0cmVlX25vZGVfdHlwZShwdHJfdHlwZSkgfHwgaXNfbGlzdF9ub2RlX3R5cGUocHRyX3R5cGUpKSB7XFxuMTQxMjQ6XFx0XFx0XFx0XFx0cmVmX3NldF9ub25fb3duaW5nKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XFxuMTQxMjU6XFx0XFx0XFx0fVxcbjE0MTI2OlxcdFxcbjE0MTI3OlxcdFxcdFxcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcXHUwMDI2cmVnc1tCUEZfUkVHXzBdKSBcXHUwMDI2XFx1MDAyNiAhcmVnc1tCUEZfUkVHXzBdLmlkKVxcbjE0MTI4OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuMTQxMjk6XFx0XFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc192b2lkKHQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjE5LjEwMzYyMjQ0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjMwMzE3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQlBGIFZlcmlmaWVyKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHRhcmdldDogYGNoZWNrX2tmdW5jX2NhbGxgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgQlBGIHZlcmlmaWVyLCByaWdodD8gVGhhdCdzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IHdpdGggYEJQRl9QUk9HX0xPQURgLiBEZWZpbml0ZWx5IHdvcnRoIGRpZ2dpbmcgaW50by5cblxuTGV0J3MgcXVpY2tseSBhbmFseXplOiBDb3JlIHN1YnN5c3RlbT8gWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtZWFuaW5nIHdlJ3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhhdCBhcmVhLiBTZWN0aW9uIDMgbGlzdHMgdGhlIGp1aWN5IGFyZWFzIHRvIGZ1eno7IG1tLCBsb2NraW5nLCBCUEYsIHNjaGVkdWxlciwgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiBCaW5nbyEgQlBGIGRlZmluaXRlbHkgdGlja3MgdGhlIFwiV29ydGhGdXp6aW5nID0gdHJ1ZVwiIGJveC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlcXVpcmVtZW50czogV2hhdCBjb25maWdzIGFuZCBzeW1ib2xzIGFyZSBuZWVkZWQgdG8gbWFrZSB0aGlzIGNvZGUgYWN0aXZlPyBJIG5lZWQgdG8gY2hlY2sgYEtjb25maWdgIGZvciBib3RoIEJQRiBhbmQgYEJQRl9TWVNDQUxMYC4gSSdtIGFzc3VtaW5nIGBCUEZfU1lTQ0FMTGAgaXMgc3RhbmRhcmQsIGNvdmVyaW5nIHRoZSBCUEYgc3lzY2FsbCBhbmQgdmVyaWZpZXIuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgb3IgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToyMS43NjY2NTY4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDIyMDMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllci5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9NDEzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHNtX3Byb2dfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE1LVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQxNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsc21fdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cXHQuZ2V0X2Z1bmNfcHJvdG8gPSBicGZfbHNtX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcwLX07XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTU5ODAtXFxua2VybmVsL2JwZi9idGYuYzo1OTgxOlxcdC8qIHVzZXIgY291bGQgaGF2ZSByZXF1ZXN0ZWQgdmVyYm9zZSB2ZXJpZmllciBvdXRwdXRcXG5rZXJuZWwvYnBmL2J0Zi5jLTU5ODItXFx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5MjM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19kZXZfcHJvZ19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MjUtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTI2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX2Rldl92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNDc4PXN0YXRpYyB1MzIgc3lzY3RsX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQxLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU0Mjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zeXNjdGxfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNzU2PXN0YXRpYyBpbnQgY2dfc29ja29wdF9nZXRfcHJvbG9ndWUoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2NC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NjU6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja29wdF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz03NDY9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NDgtXFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2dzID0gZW52LVxcdTAwM2VzdWJwcm9nX2luZm87XFxua2VybmVsL2JwZi9maXh1cHMuYzo3NDk6XFx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKm9wcyA9IGVudi1cXHUwMDNlb3BzO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzUwLVxcdGludCBpLCBjbnQsIHNpemUsIGN0eF9maWVsZF9zaXplLCByZXQsIGRlbHRhID0gMCwgZXBpbG9ndWVfY250ID0gMDtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM1LS8qIElmIGtlcm5lbCBzdWJzeXN0ZW0gaXMgYWxsb3dpbmcgZUJQRiBwcm9ncmFtcyB0byBjYWxsIHRoaXMgZnVuY3Rpb24sXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzY6ICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLVxcdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNy0gKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjQ4LVxcdC5nZXRfZnVuY19wcm90byAgPSBzeXNjYWxsX3Byb2dfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVxcdC8qXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDExOlxcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEyLVxcdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNy0vKiBkdW1teSBfb3BzLiBUaGUgdmVyaWZpZXIgd2lsbCBvcGVyYXRlIG9uIHRhcmdldCBwcm9ncmFtJ3Mgb3BzLiAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9leHRlbnNpb25fdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE5LX07XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XFx0W19pZF0gPSBcXHUwMDI2IF9uYW1lICMjIF92ZXJpZmllcl9vcHMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjcwPWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODEtICogRm9yIHRyYWRpdGlvbmFsIFBUUl9UT19NQVBfVkFMVUUgb3IgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQywgdGhlIHZlcmlmaWVyXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyODI6ICogY2xlYXJzIHJlZy1cXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cXHUwMDNldmFsdWUgdHJhbnNpdGlvbiwgc2luY2UgdGhlIHZlcmlmaWVyIG9ubHlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI4My0gKiBjYXJlcyBhYm91dCB0aGUgcmFuZ2Ugb2YgYWNjZXNzIHRvIHZhbGlkIG1hcCB2YWx1ZSBwb2ludGVyIGFuZCBkb2Vzbid0IGNhcmVcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDU0Mz1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDcxNy1cXHRcXHRcXHRcXHRlbnYsIFxcXCJUaGlzIG9wZXJhdGlvbiBzdWJ0cmFjdHMgcG9pbnRlciByZWdpc3RlciBSJWQgZnJvbSBzY2FsYXIgcmVnaXN0ZXIgUiVkLiBcXFwiXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzE4OlxcdFxcdFxcdFxcdFxcXCJUaGUgdmVyaWZpZXIgb25seSB0cmFja3MgcG9pbnRlci1taW51cy1zY2FsYXIgYXJpdGhtZXRpYyBmb3IgYWxsb3dlZCBwb2ludGVyIHR5cGVzLlxcXCIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzE5LVxcdFxcdFxcdFxcdHB0cl9yZWdubywgZHN0KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzY2NT1ib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMC0gKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzczMTogKiAtIGlmIHNvLCBhbmQgaWYgdmVyaWZpZXIgb3IgY3VycmVudCBKSVQgaW5saW5lcyB0aGUgY2FsbCB0byB0aGVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3MzItICogICBicGZfZmFzdGNhbGwgZnVuY3Rpb24gKGUuZy4gYSBoZWxwZXIgY2FsbCksIGtlcm5lbCByZW1vdmVzIHVubmVjZXNzYXJ5XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3MTI9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI5LVxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTgzMDpcXHRlbnYtXFx1MDAzZW9wcyA9IHN0X29wcy1cXHUwMDNldmVyaWZpZXJfb3BzO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTgzMS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDQ2Mz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUwMi1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1MDM6XFx0XFx0ZW52LVxcdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVxcdTAwM2V0eXBlXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1MDQtXFx0XFx0cHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSB0Z3RfcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjExMzU9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNDUtXFx0Lyogbm8gcHJvZ3JhbSBpcyB2YWxpZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE0NjpcXHRpZiAoQVJSQVlfU0laRShicGZfdmVyaWZpZXJfb3BzKSA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE0Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1Ny1cXHRlbnYtXFx1MDAzZXByb2cgPSAqcHJvZztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNTg6XFx0ZW52LVxcdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW2Vudi1cXHUwMDNlcHJvZy1cXHUwMDNldHlwZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTU5LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE2NzpcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY4LVxcdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToyMS44MzY4ODIxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MjQyMTY5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gQlBGIEl0ZXJhdGlvbiBGdW5jdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jYCBmdW5jdGlvbiBhIGJpdCBiZXR0ZXIsIHNwZWNpZmljYWxseSBob3cgaXQgcmVsYXRlcyB0byB0aGUgYnJvYWRlciBgY2hlY2tfa2Z1bmNfY2FsbGAgbWVjaGFuaXNtIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGluZ3MuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGaXJzdCwgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0byB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2Agd2l0aGluIGB2ZXJpZmllci5jYC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGl0IGRvZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHZlcmlmaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MjMuNDYxMTAxMjU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjU4Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19pdGVyX25leHRfa2Z1bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZmcuYz00NTM9c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01MjMtXFx0XFx0XFx0cmV0ID0gYnBmX2ZldGNoX2tmdW5jX2FyZ19tZXRhKGVudiwgaW5zbi1cXHUwMDNlaW1tLCBpbnNuLVxcdTAwM2VvZmYsIFxcdTAwMjZtZXRhKTtcXG5rZXJuZWwvYnBmL2NmZy5jOjUyNDpcXHRcXHRcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkpIHtcXG5rZXJuZWwvYnBmL2NmZy5jLTUyNS1cXHRcXHRcXHRcXHRtYXJrX3BydW5lX3BvaW50KGVudiwgdCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3NTU9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3OTc6XFx0aW5zbl9hdXgtXFx1MDAzZWlzX2l0ZXJfbmV4dCA9IGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5OC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4MC1cXHRcXHRcXHRlbHNlIGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFxcdTAwMjZtZXRhKSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA4MTpcXHRcXHRcXHRcXHQgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDgyLVxcdFxcdFxcdFxcdCAgKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIFxcdTAwMjZtZXRhKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTA4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTEwLVxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNTktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYwOlxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE2MS1cXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MjMuNTQ1MzYzOTIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI3MDAxMzExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFZlcmlmeWluZyBLZnVuYyBDYWxscyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgZm9yIGtmdW5jIGNhbGxzIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS4gSSdtIHN0YXJ0aW5nIHdpdGggYHZlcmlmaWVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBjaGVja19rZnVuY19jYWxsYCBmdW5jdGlvbi4gSSBrbm93IGl0J3Mgc3RhdGljIHdpdGhpbiBgdmVyaWZpZXIuY2AsIGJ1dCB0aGF0IHN0aWxsIG1ha2VzIGl0IGEgc3ltYm9sLiBgdmVyaWZpZXIuY2AgaXMgYSBtYXNzaXZlIGZpbGUsIHNvIGl0J3MgbW9zdCBjZXJ0YWlubHkgbm90IGlubGluZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBzeW1ib2wgaXMgcHJvcGVybHkgZGVmaW5lZCBpbiB2bWxpbnV4LlxuXG5UbyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgSSBzaG91bGQgYWxzbyBpZGVudGlmeSBvdGhlciByZWxhdGVkIGVudHJ5IHBvaW50cy4gVGhlIHByaW1hcnkgb25lLCBhcyBJIHJlY2FsbCwgaXMgYGJwZl9jaGVja2AuIEl0IGxvb2tzIGxpa2UgdGhhdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGNhbGxlZCBmcm9tIGBicGZfcHJvZ19sb2FkYCBpbiBgc3lzY2FsbC5jYC5cblxuTm93LCBjb25zaWRlcmluZyBteSBpbml0aWFsIGZvY3VzIGlzIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBwZXJoYXBzIGBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsYCBzZWVtIGxpa2UgcHJvbWlzaW5nIHN5bWJvbHMgdG8gdHJhY2UgdGhyb3VnaC5cblxuQmVmb3JlIGRpZ2dpbmcgZGVlcGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MzEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MjYuODE1Mzc5MjIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3OTExMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjI5LjQzMzI5NTQ3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA2ODA4MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGlzIEJQRi1yZWxhdGVkIGZlYXR1cmUuIFJhdGhlciB0aGFuIGp1c3QgZ3Vlc3Npbmcgb3IgYmxpbmRseSBzZWFyY2hpbmcsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgY29yZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIHRoZXJlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGZpbmQgdGhlIG1haW4gZGVmaW5pdGlvbnMgYW5kIHNlZSBob3cgdGhpbmdzIGJyYW5jaCBvdXQgZnJvbSB0aGVyZS4gSXQgc2hvdWxkIHF1aWNrbHkgZXhwb3NlIGFueSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgcmV2ZWFsaW5nIHRoZSBwcmVyZXF1aXNpdGVzIOKAkyBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGZsYWdzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3Mg4oCTIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGF2b2lkIHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgaXNzdWVzIGxhdGVyIG9uIGR1ZSB0byBtaXNzaW5nIGRlcGVuZGVuY2llcywgb3IgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSByZWxhdGlvbnNoaXBzLiBUaGlzIGluaXRpYWwgaW52ZXN0aWdhdGlvbiB3aWxsIHNhdmUgdGltZSBpbiB0aGUgbG9uZyBydW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozMi4yNDAxMDY1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2MzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozMi4yNDAxNzc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzE0NDE1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEJURiBEZWJ1ZyBJbmZvIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGtmdW5jcy9CVEYgc3VwcG9ydCB3aXRoaW4gQlBGLiBJdCdzIGEga2V5IHF1ZXN0aW9uLCBhbmQgSSBuZWVkIHRvIGVzdGFibGlzaCBhIGNsZWFyIGRlcGVuZGVuY3kgaGVyZS4gSXMgdGhpcyBkZWJ1ZyBpbmZvIHNldHRpbmcgKnJlcXVpcmVkKiBmb3Iga2Z1bmMgZmVhdHVyZXMsIG9yIGlzIGl0IG9wdGlvbmFsPyBEb2VzIGVuYWJsaW5nIEJURiBkZXBlbmQgb24gaXQ/IEkndmUgc2VlbiBzaXR1YXRpb25zIHdoZXJlIGl0IGlzIGNyaXRpY2FsLCBhbmQgb3RoZXJzIHdoZXJlIGl0IGlzIG5vdCwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGtlcm5lbCBidWlsZCBhbmQgdGhlIEJQRiB0b29scy5cblxuTXkgZmlyc3QgbW92ZSBpcyBnb2luZyB0byBiZSBhIHF1aWNrIGBncmVwYCBvcGVyYXRpb24uIEknbGwgc2VhcmNoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIHRyZWVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBpbnN0YW5jZXMgb2YgYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGFueSBjb2RlIHJlbGF0ZWQgdG8ga2Z1bmMgZW5hYmxlbWVudC4gVGhhdCBzaG91bGQgb2ZmZXIgcXVpY2sgaW5zaWdodHMgaW50byBhbnkgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLiBJZiBgZ3JlcGAgZG9lc24ndCB5aWVsZCBhbnl0aGluZyBpbW1lZGlhdGVseSwgSSB3aWxsIGJyb2FkZW4gbXkgc2VhcmNoIGJ5IGxvb2tpbmcgYXQgaG93IGtmdW5jcyB0aGVtc2VsdmVzIGFyZSBlbmFibGVkLCBJIGFtIGNvbmZpZGVudCB0aGF0IEkgY2FuIGZpbmQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IHRyaWdnZXJzIEJURiB0byBiZSBlbmFibGVkLiBCeSBhbmFseXppbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGluZmVyIHRoZSBpbXBvcnRhbmNlIG9mIEJURiBkZWJ1ZyBpbmZvIGZvciBrZnVuYyBmdW5jdGlvbmFsaXR5LiBUaGlzIGRpcmVjdCBleGFtaW5hdGlvbiBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBhdm9pZCBhbnkgbWlzc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozNS41NTQ1OTQ5ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTMzOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFQlVHX0lORk9fQlRGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHN5c2ZzX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NDAwPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NDA1LVxcbmtlcm5lbC9icGYvYnRmLmM6NjQwNjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTY0MDctXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTY0ODY9X191MzIgYnRmX3JlbG9jYXRlX2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgX191MzIgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY0OTItXFxua2VybmVsL2JwZi9idGYuYzo2NDkzOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtNjQ5NC1cXG5rZXJuZWwvYnBmL2J0Zi5jPTY0OTU9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZV9tb2R1bGUoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY1OTAtXFxua2VybmVsL2JwZi9idGYuYzo2NTkxOiNlbmRpZiAvKiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUyAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNjU5Mi1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODUwNz1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODUxMC1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg1MTE6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04NTEyLXN0cnVjdCBidGZfbW9kdWxlIHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODY0OT1mc19pbml0Y2FsbChidGZfbW9kdWxlX2luaXQpO1xcbmtlcm5lbC9icGYvYnRmLmM6ODY1MDojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTEtXFxua2VybmVsL2JwZi9idGYuYz04NjUyPXN0cnVjdCBtb2R1bGUgKmJ0Zl90cnlfZ2V0X21vZHVsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTQtXFx0c3RydWN0IG1vZHVsZSAqcmVzID0gTlVMTDtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2NTU6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04NjU2LVxcdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04NjgyPXN0cnVjdCBidGYgKmJ0Zl9nZXRfbW9kdWxlX2J0Zihjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXFxua2VybmVsL2JwZi9idGYuYy04NjgzLXtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2ODQ6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04Njg1LVxcdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04Njk1LVxcbmtlcm5lbC9icGYvYnRmLmM6ODY5NjojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg2OTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnRmX21vZHVsZV9tdXRleCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg3MTI9c3RhdGljIGludCBjaGVja19idGZfa2NvbmZpZ3MoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCBjaGFyICpmZWF0dXJlKVxcbmtlcm5lbC9icGYvYnRmLmMtODcxMy17XFxua2VybmVsL2JwZi9idGYuYzo4NzE0OlxcdGlmICghbW9kdWxlIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xcbmtlcm5lbC9icGYvYnRmLmMtODcxNS1cXHRcXHRwcl9lcnIoXFxcIm1pc3Npbmcgdm1saW51eCBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcXFxuXFxcIiwgZmVhdHVyZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTctXFx0fVxcbmtlcm5lbC9icGYvYnRmLmM6ODcxODpcXHRpZiAobW9kdWxlIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpKVxcbmtlcm5lbC9icGYvYnRmLmMtODcxOS1cXHRcXHRwcl93YXJuKFxcXCJtaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcXFxuXFxcIiwgZmVhdHVyZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg4NjA9c3RhdGljIGludCBidGZfY2hlY2tfa2Z1bmNfbmFtZShzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgdTMyIGtpbmQpXFxua2VybmVsL2JwZi9idGYuYy04ODYxLXtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg4NjI6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04ODYzLVxcdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04ODc2LVxcbmtlcm5lbC9icGYvYnRmLmM6ODg3NzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4NzgtXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTUyNT1zdGF0aWMgc3RydWN0IGJwZl9jYW5kX2NhY2hlICpwb3B1bGF0ZV9jYW5kX2NhY2hlKHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqY2FuZHMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTk1NTItXFxua2VybmVsL2JwZi9idGYuYzo5NTUzOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtOTU1NC1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yODAyPWludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgxOC1cXHRcXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI4MTk6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgQ09ORklHX0RFQlVHX0lORk9fQlRGXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgyMC1cXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYxNTE9c3RhdGljIGludCBjaGVja19wdHJfdG9fbWFwX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxNjUtXFx0aWYgKCFidGZfdm1saW51eCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTY2OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwibWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxNjctXFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODcxMj1zdGF0aWMgaW50IGNoZWNrX3BzZXVkb19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODcyOC1cXHRcXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NzI5OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwia2VybmVsIGlzIG1pc3NpbmcgQlRGLCBtYWtlIHN1cmUgQ09ORklHX0RFQlVHX0lORk9fQlRGPXkgaXMgc3BlY2lmaWVkIGluIEtjb25maWcuXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3MzAtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA2MjA9c3RydWN0IGJ0ZiAqYnBmX2dldF9idGZfdm1saW51eCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNjI0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDYyNTpcXHRpZiAoIWJ0ZiBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA2MjYtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjM1LjY1MzEzNTQyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODIxODM2MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIGRvd24gd2h5IEknbSBoaXR0aW5nIGEgcm9hZGJsb2NrIHdpdGggdGhlc2Uga2Z1bmMgY2FsbHMgaW4gdGhlIHZlcmlmaWVyLiBJdCdzIGJlY29taW5nIGNsZWFyIHRoYXQgYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBib3RoIGVzc2VudGlhbCB0byBnZXQgdGhpcyByaWdodC4gU3BlY2lmaWNhbGx5LCB0aGF0IGxpbmUgMjgxOSBpbiBgdmVyaWZpZXIuY2AgaXMgdGhlIGN1bHByaXQ6IFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlwiLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBob3cgdGhlc2UgdHdvIGNvbmZpZ3MgYXJlIGludGVyYWN0aW5nLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuXG5cbkkgbmVlZCB0byBob21lIGluIG9uIHNvbWUga2V5IHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJJ2xsIGZvY3VzIG9uIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBgcHJvY2Vzc19pdGVyX25leHRfY2FsbGAg4oCTIGFuZCBiZWNhdXNlIEkndmUgcnVuIGludG8gaXRlcl9uZXh0X2tmdW5jIHJlY2VudGx5LCBpdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHNlZSB3aGV0aGVyIGBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsYCBhcHBlYXJzIGluIGB2ZXJpZmllci5jYC4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozOC40NzQ5NzQ3ODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTgwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfaXRlcl9uZXh0X2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMTExPXN0YXRpYyBib29sIHN0YXRlc19tYXliZV9sb29waW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExMjk6LyogaXNfc3RhdGVfdmlzaXRlZCgpIGhhbmRsZXMgaXRlcl9uZXh0KCkgKHNlZSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgZm9yXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTMwLSAqIHRlcm1pbm9sb2d5KSBjYWxscyBzcGVjaWFsbHk6IGFzIG9wcG9zZWQgdG8gYm91bmRlZCBCUEYgbG9vcHMsIGl0ICpleHBlY3RzKlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTYwLSAqIGxvb3BpbmcgKGFuZCB3b3VsZCBiZSAqdGVjaG5pY2FsbHkqIGNvcnJlY3QsIGlmIG5vdCBmb3IgaXRlcmF0b3Inc1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE2MTogKiBcXFwiZXZlbnR1YWwgc3RpY2t5IE5VTExcXFwiIGNvbnRyYWN0LCBzZWUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpKS4gQnV0IHdlXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMTYyOiAqIGRvbid0IHdhbnQgdGhhdC4gU28gd2hhdCB3ZSBkbyBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgd2hlbiB3ZSBnbyBvblxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE2My0gKiBhbm90aGVyIEFDVElWRSBpdGVyYXRpb24sIHdlIGJ1bXAgc2xvdC1cXHUwMDNlaXRlci5kZXB0aCwgdG8gbWFyayB0aGF0IGl0J3NcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjk2LVxcdFxcdFxcdCAqIGFib3V0IElEIHJlbWFwcGluZywgc28gZG9uJ3QgZXZlbiBwZXJmb3JtIGl0Llxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTI5NzpcXHRcXHRcXHQgKiBTZWUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGFuZCBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyOTgtXFx0XFx0XFx0ICogZm9yIG92ZXJ2aWV3IG9mIHRoZSBsb2dpYy4gV2hlbiBjdXJyZW50IGFuZCBvbmUgb2YgcGFyZW50XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzczND1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4MjY6XFx0XFx0LyogcmVtZW1iZXIgbWV0YS1cXHUwMDNlaXRlciBpbmZvIGZvciBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgyNy1cXHRcXHRtZXRhLVxcdTAwM2VpdGVyLnNwaSA9IHNwaTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03OTIxPXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZ2V0X2l0ZXJfZnJvbV9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXJfc3QsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkyOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzkzMDovKiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgaXMgY2FsbGVkIHdoZW4gdmVyaWZpZXIgZ2V0cyB0byBpdGVyYXRvcidzIG5leHRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkzMS0gKiBcXFwibWV0aG9kXFxcIiAoZS5nLiwgYnBmX2l0ZXJfbnVtX25leHQoKSBmb3IgbnVtYmVycyBpdGVyYXRvcikgY2FsbC4gV2UnbGwgcmVmZXJcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM4LSAqXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5Mzk6ICogV2l0aCB0aGUgYXNzdW1wdGlvbiBvZiBzdWNoIGNvbnRyYWN0LCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc2ltdWxhdGVzXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NDAtICogYSBmb3JrIGluIHRoZSB2ZXJpZmllciBzdGF0ZSB0byB2YWxpZGF0ZSBsb29wIGxvZ2ljIGNvcnJlY3RuZXNzIGFuZCBzYWZldHlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDA3LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDA4OnN0YXRpYyBpbnQgcHJvY2Vzc19pdGVyX25leHRfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMDktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzMzQ9c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE1LVxcdCAqXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDE2OlxcdCAqIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgaW4gcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGZvciBvcGVuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE3LVxcdCAqIGNvZGVkIGl0ZXJhdG9ycy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc1NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU0LVxcdC8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTU1OlxcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU2LVxcdCAqIGl0ZXJhdG9yIHBhdGgncyBkaWFnbm9zdGljIHBvc2l0aW9uLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTYwLVxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDE2MTpcXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNjItXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MzguNTQ2NTYwMDczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODU3OTQxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIHRoZSBCUEYgSXRlcmF0b3IgTmV4dCBGdW5jdGlvbiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AuIEkgdGhpbmsgYSBxdWljayBsb29rIGF0IGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgdmVyaWZpZXIuY2AgaXMgaW4gb3JkZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBleGFjdGx5IGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoaXMgc3BlY2lmaWMgY2hlY2sgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMuIEl0J3MgaW1wb3J0YW50IHRvIGdyYXNwIHRoZSBleGFjdCBsb2dpYy4gVGhpcyBpcyBnb2luZyB0byBoZWxwIG1lIHRoaW5rIHRoaXMgdGhyb3VnaCBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjQwLjIzMjM1NjIzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMDQ1NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19pdGVyX25leHRfa2Z1bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjExPWJvb2wgYnBmX2lzX3N5bmNfY2FsbGJhY2tfY2FsbGluZ19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjEyOnN0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2MTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo0MC40MzM0MTEwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1MjI1MDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgVmVyaWZpZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgaXMgc3RhdGljYWxseSBpbmxpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGNvbmNlcm4gaGVyZSBpcyBjZW50ZXJlZCBvbiBgY2hlY2tfa2Z1bmNfY2FsbGAgYmVjYXVzZSBpdCdzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCBhY2NvcmRpbmcgdG8gd2hhdCBJJ20gc2VlaW5nIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHNpZ25pZmljYW50OyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYyBpcyBhbmQgd2hlcmUgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBzdXJmYWNlLiBUaGUgb3ZlcmFsbCBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGlzIGBicGZfY2hlY2tgLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZGl0aW9ucyBhcmUgbWV0IHRvIHdhcnJhbnQgYSBkZWVwIGRpdmUuIFwiV29ydGhGdXp6aW5nXCIgaXMgc2V0IHRvIHRydWUsIGdvb2Qgc3RhcnQuIFRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBhcmUgaW4gcGxhY2U7IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIHByZXNlbnQuIEZpbmFsbHksIGFuZCBtb3N0IGltcG9ydGFudGx5LCBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBcIkZvY3VzU3ltYm9sc1wiOiBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBicGZfY2hlY2tgLiBQZXJmZWN0LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cblJpZ2h0LCB0aW1lIHRvIGNvbnN0cnVjdCB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLiBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3Mgbm93LCBhbmQgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjQzLjY4NTY2NjA3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDM0MjAyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIGNoZWNrX2tmdW5jX2NhbGwgdG8gc2V0IHRoZSBwYXJlbnRfaWQgb2YgdGhlIHJldHVybiByZWdpc3RlciAoUjApIHdoZW4gdmVyaWZ5aW5nIGFuIGl0ZXJhdG9yJ3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3IncyBuZXh0IGtmdW5jIGNhbGwgKHVubGVzcyBNRU1fUkNVIGlzIHNldCkuIFRoaXMgZW5zdXJlcyByZWZlcmVuY2VzIGRlcml2ZWQgZnJvbSBpdGVyYXRvcnMgcHJvcGVybHkgdHJhY2sgdGhlaXIgcGFyZW50IGl0ZXJhdG9yIGFjcm9zcyBzdGF0ZSBkZXN0cnVjdGlvbi4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSB2ZXJpZmllciBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo0My44MzAwMTYwMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Njk0MTg5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NDMuODMwNDg2NjgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY2OTM3MTMxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJ25leHQnIGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5iZTQ5Nzg2MjlhZTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xNDEwNSw2ICsxNDEwNSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7XG4rXG4rXHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4rXHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19rZnVuY19yZXRfbnVsbChcdTAwMjZtZXRhKSkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5pbmRleCA3NjAxMmRiYmRiNDEzLi5iOGM4YTNiMjQ1ODJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuQEAgLTI4LDYgKzI4LDI3IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcbkBAIC02Niw2ICs4NywyOCBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitcdHJldHVybiAwO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo0My44MzA0ODc1MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxMjcwMTUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmIC0gaXQncyB0b3VjaGluZyBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hpY2ggaXMgYSBrZXkgY29tcG9uZW50LCBvYnZpb3VzbHksIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY2AgLS0gdGhhdCdzIGludGVyZXN0aW5nOyB3ZSBzaG91bGQgZXhwZWN0IHNvbWUgaXRlcmF0b3ItcmVsYXRlZCB0ZXN0cy4gXG5cbk5vdywgZm9jdXNpbmcgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBkaWZmIHNob3dzIGEgbmV3IGBpZmAgc3RhdGVtZW50IHdpdGhpbiBgY2hlY2tfa2Z1bmNfY2FsbGAuIEl0J3MgYXNzaWduaW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkYCBvbmx5IGlmIHRoZSBLRnVuYyBiZWluZyBjYWxsZWQgaXMgYW4gaXRlcmF0b3IgbmV4dCBmdW5jdGlvbiBhbmQgdGhlIHJldHVybiB0eXBlIGRvZXNuJ3QgaGF2ZSB0aGUgYE1FTV9SQ1VgIGZsYWcuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIG9iamVjdCByZWZlcmVuY2VzIGNvcnJlY3RseSBpbiBpdGVyYXRvcnMuIFdlJ3JlIHByb2JhYmx5IHRyYWNraW5nIGEgcGFyZW50IG9iamVjdCBJRCB0byBtYWludGFpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuIElmIGl0IGhhcyBgTUVNX1JDVWAsIHRoZSBvYmplY3QgaGFzIFJDVSBzZW1hbnRpY3Mgd2hpY2ggd2UgY2FuIGFzc3VtZSBoYW5kbGUgdGhlIGxpZmVjeWNsZS4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCB0byBleHBsb3JlIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHN1cnJvdW5kaW5nIHRoZSBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSdsbCBhbHNvIHRyeSB0byBncmVwIGZvciBzaW1pbGFyIGNoYW5nZXMgYXJvdW5kIHRoZSBjb2RlYmFzZS4gVGhpcyBsb29rcyBsaWtlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgY3J1Y2lhbCwgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NDguMzQzMTkxMzEyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc2ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJlbnRfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODY9c3RydWN0IGJwZl92ZXJpZmllcl9zdGFja19lbGVtIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNzpzdGF0aWMgaW50IGFjcXVpcmVfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgaW50IHBhcmVudF9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOC1zdGF0aWMgaW50IF9fcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlLCBpbnQgaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTI0MT1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI0My1cXHRyZWZfb2JqLVxcdTAwM2VpZCA9IHJlZy1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI0NDpcXHRyZWZfb2JqLVxcdTAwM2VwYXJlbnRfaWQgPSByZWctXFx1MDAzZXBhcmVudF9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjQ1LVxcdHJlZl9vYmotXFx1MDAzZWNudCsrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY0Nj1zdGF0aWMgdm9pZCBfX21hcmtfZHlucHRyX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDctXFx0XFx0XFx0ICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ4OlxcdFxcdFxcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NTA9c3RhdGljIHZvaWQgbWFya19keW5wdHJfc3RhY2tfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MzpcXHRcXHRcXHRcXHQgICBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlLCBpbnQgcGFyZW50X2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTQte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU3OlxcdF9fbWFya19keW5wdHJfcmVnKHNyZWcxLCB0eXBlLCB0cnVlLCBpZCwgcGFyZW50X2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU4OlxcdF9fbWFya19keW5wdHJfcmVnKHNyZWcyLCB0eXBlLCBmYWxzZSwgaWQsIHBhcmVudF9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1OS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzUtXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc2OlxcdGludCBzcGksIGksIGVyciwgcGFyZW50X2lkID0gMDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc3LVxcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzEzLVxcdFxcdC8qIFRyYWNrIHBhcmVudCdzIGlkIGlmIHRoZSBwYXJlbnQgaXMgYSByZWZlcmVuY2VkIG9iamVjdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTQ6XFx0XFx0cGFyZW50X2lkID0gcmVmX29iai1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxNS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyNDpcXHRcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIHBhcmVudF9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNS1cXHRcXHRcXHRpZiAoaWQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzI4OlxcdFxcdFxcdHBhcmVudF9pZCA9IGlkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjktXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzAtXFx0fSBlbHNlIHsgLyogYnBmX2R5bnB0cl9jbG9uZSgpICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjczMTpcXHRcXHRwYXJlbnRfaWQgPSBkeW5wdHItXFx1MDAzZXBhcmVudF9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMyLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzQtXFx0bWFya19keW5wdHJfc3RhY2tfcmVncyhlbnYsIFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzM1OlxcdFxcdFxcdCAgICAgICBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaSAtIDFdLnNwaWxsZWRfcHRyLCB0eXBlLCBwYXJlbnRfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzUzPXN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OC1cXHRyZXR1cm4gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKHJlZy1cXHUwMDNlZHlucHRyLnR5cGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc2OTpcXHRcXHRcXHRcXHQgICAgICA/IHJlZy1cXHUwMDNlcGFyZW50X2lkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc3MC1cXHRcXHRcXHRcXHQgICAgICA6IHJlZy1cXHUwMDNlaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc3Nj1zdGF0aWMgdm9pZCBtYXJrX3JlZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODQ6c3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk1LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTY6XFx0XFx0aWYgKHN0YWNrLVxcdTAwM2VzcGlsbGVkX3B0ci5wYXJlbnRfaWQgPT0gdl9wYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5Ny1cXHRcXHRcXHRyZWZfY250Kys7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAzPXN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyNS1cXHRpZiAoZHlucHRyX3R5cGVfcmVmZXJlbmNlZChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5keW5wdHIudHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODI2OlxcdCAgICBkeW5wdHJfcmVmX2NudChlbnYsIHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLnBhcmVudF9pZCkgXFx1MDAzYz0gMSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDI5PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZmVyZW5jZV9zdGF0ZSAqYWNxdWlyZV9yZWZlcmVuY2Vfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NDM6c3RhdGljIGludCBhY3F1aXJlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIGludCBwYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDQte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NTEtXFx0cy1cXHUwMDNlaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDUyOlxcdHMtXFx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ1My1cXHRicGZfZGlhZ19yZWNvcmRfcmVmX2FjcXVpcmUoZW52LCBpbnNuX2lkeCwgcy1cXHUwMDNlaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NjA9c3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjUtXFx0cmVnLVxcdTAwM2VpZCA9IDA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NjY6XFx0cmVnLVxcdTAwM2VwYXJlbnRfaWQgPSAwO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODY3LVxcdF9fX21hcmtfcmVnX2tub3duKHJlZywgaW1tKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTAwPXN0YXRpYyB2b2lkIF9fbWFya19keW5wdHJfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDE6XFx0XFx0XFx0ICAgICAgYm9vbCBmaXJzdF9zbG90LCBpbnQgaWQsIGludCBwYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDIte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTAtXFx0cmVnLVxcdTAwM2VpZCA9IGlkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTExOlxcdHJlZy1cXHUwMDNlcGFyZW50X2lkID0gcGFyZW50X2lkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEyLVxcdHJlZy1cXHUwMDNlZHlucHRyLnR5cGUgPSB0eXBlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1Njg9X19wcmludGYoNiwgNykgc3RhdGljIHZvaWQgYnBmX2RpYWdfY2FsbF9hcmdfZm10KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTc3LSAqIGFuZCBjb25zdW1lZCB3aGVuIHRoZSBhcmd1bWVudCBpcyBleHBlY3RpbmcgdG8gYmUgYW4gaW5pdGlhbGl6ZWQgZHlucHRyLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTc4OiAqIEBwYXJlbnRfaWQgaXMgdXNlZCB0byB0cmFjayB0aGUgcmVmZXJlbmNlZCBwYXJlbnQgb2JqZWN0IChlLmcuLCBmaWxlIG9yIHNrYiBpblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTc5LSAqIHFkaXNjIHByb2dyYW0pIHdoZW4gY29uc3RydWN0aW5nIGEgZHlucHRyLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1OTU9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5OS1cXHRcXHRcXHRkeW5wdHItXFx1MDAzZWlkID0gcmVnLVxcdTAwM2VpZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzcwMDpcXHRcXHRcXHRkeW5wdHItXFx1MDAzZXBhcmVudF9pZCA9IHJlZy1cXHUwMDNlcGFyZW50X2lkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzAxLVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NDYwPXN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0ODctXFx0XFx0XFx0XFx0Y29udGludWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0ODg6XFx0XFx0XFx0aWYgKHZzdGF0ZS1cXHUwMDNlcmVmc1tpXS5wYXJlbnRfaWQgIT0gaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0ODktXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5NS1cXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKHZzdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIG1hc2ssICh7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0OTY6XFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNlaWQgIT0gaWQgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2VwYXJlbnRfaWQgIT0gaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OTctXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5OS1cXHRcXHRcXHQvKiBGcmVlIG9iamVjdHMgZGVyaXZlZCBmcm9tIHRoZSBjdXJyZW50IG9iamVjdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTAwOlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXBhcmVudF9pZCA9PSBpZCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NTAxLVxcdFxcdFxcdFxcdGVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCByZWctXFx1MDAzZWlkKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgxMz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI2Ny1cXHRpZiAoZnVuY19pZCA9PSBCUEZfRlVOQ19keW5wdHJfZGF0YSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyNjg6XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEuZHlucHRyLmlkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI2OS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU4ND1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzQ0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3NDU6XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEtXFx1MDAzZWR5bnB0ci5pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NDYtXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc1NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDY5LVxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDcwOlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDcxLVxcdFxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOS1cXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTEwOlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTExLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NDguNDQyOTY0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTI3NzAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgY2hlY2tfa2Z1bmNfY2FsbGAgaW4gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIGBjaGVja19rZnVuY19jYWxsYC4gTGV0J3MgemVybyBpbiBvbiB0aGF0IHNlY3Rpb24gb2YgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNDA2MCB0aHJvdWdoIDE0MTIwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGtlcm5lbCBmdW5jdGlvbiBjYWxscy4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYmxvY2sgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY2hlY2tzIGl0J3MgcGVyZm9ybWluZyBhdCB0aGF0IGp1bmN0dXJlLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzIGZvciB2YWxpZGF0aW5nIGFyZ3VtZW50cywgY2FsbCBjb250ZXh0LCBhbmQgZW5zdXJpbmcgd2UgYXJlbid0IGludHJvZHVjaW5nIGFueSBzZWN1cml0eSBob2xlcyB0aHJvdWdoIHRoZSBCUEYgcHJvZ3JhbS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBhcmd1bWVudCB0eXBlIGNoZWNraW5nLCBib3VuZHMgdmVyaWZpY2F0aW9uLCBhbnkgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBtaXRpZ2F0aW9ucywgYW5kIGdlbmVyYWxseSwgaG93IHRoaXMgZnVuY3Rpb24gYmFsYW5jZXMgdGhlIG5lZWQgZm9yIEJQRiBwcm9ncmFtIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgbmVlZCBmb3Iga2VybmVsIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHkuIEl0J3MgdGhhdCBkZWxpY2F0ZSBkYW5jZSB0aGF0IEknbSBhbHdheXMgbG9va2luZyBmb3Igd2hlbiByZWFkaW5nIHRoaXMga2luZCBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NTAuNjQ0MjQ0NzA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjcwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDA2MDpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0ubWVtX3NpemUgPSBtZXRhLnJldF9tZW0uc2l6ZTtcXG4xNDA2MTpcXHRcXG4xNDA2MjpcXHRcXHRcXHRcXHRpZiAobWV0YS5yMF9yZG9ubHkpXFxuMTQwNjM6XFx0XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgfD0gTUVNX1JET05MWTtcXG4xNDA2NDpcXHRcXG4xNDA2NTpcXHRcXHRcXHRcXHQvKiBFbnN1cmVzIHdlIGRvbid0IGFjY2VzcyB0aGUgbWVtb3J5IGFmdGVyIGEgcmVsZWFzZV9yZWZlcmVuY2UoKSAqL1xcbjE0MDY2OlxcdFxcdFxcdFxcdGlmIChtZXRhLnJlZl9vYmouaWQpIHtcXG4xNDA2NzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB2YWxpZGF0ZV9yZWZfb2JqKGVudiwgXFx1MDAyNm1ldGEucmVmX29iaik7XFxuMTQwNjg6XFx0XFx0XFx0XFx0XFx0aWYgKGVycilcXG4xNDA2OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MDcwOlxcdFxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxuMTQwNzE6XFx0XFx0XFx0XFx0fVxcbjE0MDcyOlxcdFxcbjE0MDczOlxcdFxcdFxcdFxcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFxcdTAwMjZtZXRhKSlcXG4xNDA3NDpcXHRcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0udHlwZSB8PSBNRU1fUkNVO1xcbjE0MDc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTQwNzY6XFx0XFx0XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZSA9IFBUUl9UT19CVEZfSUQ7XFxuMTQwNzc6XFx0XFxuMTQwNzg6XFx0XFx0XFx0XFx0aWYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2dldF9rbWVtX2NhY2hlXSlcXG4xNDA3OTpcXHRcXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuMTQwODA6XFx0XFx0XFx0XFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcXHUwMDI2bWV0YSkgfHxcXG4xNDA4MTpcXHRcXHRcXHRcXHRcXHQgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpIFxcdTAwMjZcXHUwMDI2XFxuMTQwODI6XFx0XFx0XFx0XFx0XFx0ICAoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgXFx1MDAyNm1ldGEpXFxuMTQwODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1JDVSkpKSB7XFxuMTQwODQ6XFx0XFx0XFx0XFx0XFx0LypcXG4xNDA4NTpcXHRcXHRcXHRcXHRcXHQgKiBJZiB0aGUgaXRlcmF0b3IncyBjb25zdHJ1Y3RvciAodGhlIF9uZXdcXG4xNDA4NjpcXHRcXHRcXHRcXHRcXHQgKiBmdW5jdGlvbiBlLmcuLCBicGZfaXRlcl90YXNrX25ldykgaGFzIGJlZW5cXG4xNDA4NzpcXHRcXHRcXHRcXHRcXHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xcbjE0MDg4OlxcdFxcdFxcdFxcdFxcdCAqIEtGX1JDVV9QUk9URUNURUQgYW5kIHdhcyBjYWxsZWQgd2l0aGluIGEgUkNVXFxuMTQwODk6XFx0XFx0XFx0XFx0XFx0ICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGFsc28gcHJvcGFnYXRlXFxuMTQwOTA6XFx0XFx0XFx0XFx0XFx0ICogdGhlIE1FTV9SQ1UgZmxhZyB0byB0aGUgcG9pbnRlciByZXR1cm5lZCBmcm9tXFxuMTQwOTE6XFx0XFx0XFx0XFx0XFx0ICogdGhlIGl0ZXJhdG9yJ3MgbmV4dCBmdW5jdGlvbiAoZS5nLixcXG4xNDA5MjpcXHRcXHRcXHRcXHRcXHQgKiBicGZfaXRlcl90YXNrX25leHQpLlxcbjE0MDkzOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE0MDk0OlxcdFxcdFxcdFxcdFxcdHR5cGUgfD0gTUVNX1JDVTtcXG4xNDA5NTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE0MDk2OlxcdFxcdFxcdFxcdFxcdC8qXFxuMTQwOTc6XFx0XFx0XFx0XFx0XFx0ICogQW55IFBUUl9UT19CVEZfSUQgdGhhdCBpcyByZXR1cm5lZCBmcm9tIGEgQlBGXFxuMTQwOTg6XFx0XFx0XFx0XFx0XFx0ICoga2Z1bmMgc2hvdWxkIGJ5IGRlZmF1bHQgYmUgdHJlYXRlZCBhc1xcbjE0MDk5OlxcdFxcdFxcdFxcdFxcdCAqIGltcGxpY2l0bHkgdHJ1c3RlZC5cXG4xNDEwMDpcXHRcXHRcXHRcXHRcXHQgKi9cXG4xNDEwMTpcXHRcXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9UUlVTVEVEO1xcbjE0MTAyOlxcdFxcdFxcdFxcdH1cXG4xNDEwMzpcXHRcXG4xNDEwNDpcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG4xNDEwNTpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XFxuMTQxMDY6XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xcbjE0MTA3OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4xNDEwODpcXHRcXG4xNDEwOTpcXHRcXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxuMTQxMTA6XFx0XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4xNDExMTpcXHRcXHRcXHR9XFxuMTQxMTI6XFx0XFxuMTQxMTM6XFx0XFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbjE0MTE0OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IFBUUl9NQVlCRV9OVUxMO1xcbjE0MTE1OlxcdFxcdFxcdFxcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cXG4xNDExNjpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbjE0MTE3OlxcdFxcdFxcdH1cXG4xNDExODpcXHRcXHRcXHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcXHUwMDI2bWV0YSkpIHtcXG4xNDExOTpcXHRcXHRcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo1MC42NDUzMTUyNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwNTMwMDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJdGVyYXRvciBQb2ludGVyIFRyYWNraW5nIEZpeCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvZGUgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiBCUEYgaXRlcmF0b3JzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHBvaW50ZXJzIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvcidzIGBuZXh0YCBrZnVuYy4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB3aGVuIHJldHVybmluZyBhIGBQVFJfVE9fQlRGX0lEYCBmcm9tLCBzYXksIGBicGZfaXRlcl90YXNrX3ZtYV9uZXh0YCwgdGhlIGBwYXJlbnRfaWRgIG9mIHRoZSByZWdpc3RlciBob2xkaW5nIHRoZSBwb2ludGVyICpzaG91bGQqIGJlIHNldCB0byB0aGUgaXRlcmF0b3IncyByZWZlcmVuY2Ugb2JqZWN0IElEIChgbWV0YS5yZWZfb2JqLmlkYCksIGJ1dCBpdCB3YXNuJ3QgZm9yIHRydXN0ZWQgcG9pbnRlcnMuXG5cblRoZSBwcm9ibGVtIGFyaXNlcyBkdXJpbmcgaXRlcmF0b3IgZGVzdHJ1Y3Rpb24uIFdoZW4gYGJwZl9pdGVyXy4uLl9kZXN0cm95YCBpcyBjYWxsZWQsIGByZWxlYXNlX3JlZmVyZW5jZWAgaW52YWxpZGF0ZXMgcmVnaXN0ZXJzIHdob3NlIGBpZGAgb3IgYHBhcmVudF9pZGAgbWF0Y2hlcyB0aGUgaXRlcmF0b3IncyBgcmVmX29iai5pZGAuIFdpdGhvdXQgdGhlIGBwYXJlbnRfaWRgIHNldCwgdGhlIHZlcmlmaWVyIHdvdWxkbid0IGZsYWcgYXR0ZW1wdHMgdG8gZGVyZWZlcmVuY2UgdGhlIHBvaW50ZXIgYWZ0ZXIgdGhlIGl0ZXJhdG9yIHdhcyBkZXN0cm95ZWQsIGFsbG93aW5nIHBvdGVudGlhbGx5IGludmFsaWQgbWVtb3J5IGFjY2Vzcy4gVGhpcyBpcyBjbGFzc2ljIFVBRi5cblxuU28sIHRoaXMgcGF0Y2ggc2V0cyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGAgZm9yIHRydXN0ZWQgcG9pbnRlcnMuIFRoaXMgd2F5LCB3aGVuIHRoZSBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIGByZWxlYXNlX3JlZmVyZW5jZWAgd2lsbCBpbnZhbGlkYXRlIHRoZSBwb2ludGVyIHJldHVybmVkIGZyb20gYGl0ZXJfbmV4dGAsIGNhdXNpbmcgdGhlIHZlcmlmaWVyIHRvIHJlamVjdCBwcm9ncmFtcyB0aGF0IHRyeSB0byB1c2UgdGhlIHBvaW50ZXIgYWZ0ZXIgdGhlIGl0ZXJhdG9yIGlzIGRlc3Ryb3llZCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LiBUaGUgc2VsZnRlc3QgYGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3lgIGNvbmZpcm1zIHRoaXM6IHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgY29tcGxhaW5zIHdpdGggIGBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSB3YXJyYW50IGEgS01TQU4gY2hlY2s/ICBXZSBuZWVkIHRvIHNlZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgcmlza3MgKnNwZWNpZmljKiB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLlxuXG4qICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLCBkb2Vzbid0IHRvdWNoIGFueSBvZiB0aGF0LlxuKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uXG4qICAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90IGhlcmUuXG4qICAgKipCb3VuZHMgY2hlY2tzL2xvZ2ljIHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCB0aGlzIGlzIGFsbCBhYm91dCB2YWxpZGF0aW5nIHRoZSBsaWZlY3ljbGUgb2YgYWxsb2NhdGVkIHBvaW50ZXJzLlxuXG5UaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGxpZmVjeWNsZSBidWcgYW5kIHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBhIHByb2JsZW0gd2UgdHlwaWNhbGx5IGNhdGNoIHdpdGggS0FTQU4uIFdlIGFyZSB0cmFja2luZyBhIGBwYXJlbnRfaWRgIGZvciB1c2Ugd2l0aCBhIG1lbW9yeSBzYWZldHkgY2hlY2sgKFVBRikuIFRoZSBmaXggaXRzZWxmLCBieSBzZXR0aW5nIHRoZSBgcGFyZW50X2lkYCBiZWZvcmUgdGhlIEJQRiB2ZXJpZmllciBtYWtlcyB0aGlzIGFjY2VzcyB1bnNhZmUsICpwcmV2ZW50cyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBpc3N1ZSBpcyBtZW1vcnkgY29ycnVwdGlvbiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBzaG91bGQgZXhwZWN0IHRoZSB2ZXJpZmllciB0byBjYXRjaCB0aGUgVUFGIGNvbmRpdGlvbiBub3csIHJlbmRlcmluZyBLTVNBTiB1bm5lY2Vzc2FyeS5cblxuVGhlIHBhdGNoIHNob3VsZCBiZSBzYWZlLCBidXQgbGV0J3MgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBvbmUgdGhpbmc6IGlzIGBtZXRhLnJlZl9vYmouaWRgIGFsd2F5cyBwcm9wZXJseSBpbml0aWFsaXplZCBieSB0aGUgdGltZSB3ZSBjYWxsIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpYD8gTGV0J3MgdHJhY2UgaG93IHRoZSBgbWV0YS5yZWZfb2JqYCBpcyBzZXQgZHVyaW5nIGtmdW5jIGFyZ3VtZW50IHByb2Nlc3NpbmcgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NTYuMTUwNjE4NDkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzYxNTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXNfaXRlcl9uZXh0X2tmdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2ZnLmM9NDUzPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTIzLVxcdFxcdFxcdHJldCA9IGJwZl9mZXRjaF9rZnVuY19hcmdfbWV0YShlbnYsIGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlb2ZmLCBcXHUwMDI2bWV0YSk7XFxua2VybmVsL2JwZi9jZmcuYzo1MjQ6XFx0XFx0XFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpKSB7XFxua2VybmVsL2JwZi9jZmcuYy01MjUtXFx0XFx0XFx0XFx0bWFya19wcnVuZV9wb2ludChlbnYsIHQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNzU1PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3OTYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzk3OlxcdGluc25fYXV4LVxcdTAwM2Vpc19pdGVyX25leHQgPSBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3OTgtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwODAtXFx0XFx0XFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcXHUwMDI2bWV0YSkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODE6XFx0XFx0XFx0XFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4Mi1cXHRcXHRcXHRcXHQgIChnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBcXHUwMDI2bWV0YSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQxMDk6XFx0XFx0XFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpIFxcdTAwMjZcXHUwMDI2ICEodHlwZSBcXHUwMDI2IE1FTV9SQ1UpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDE2MDpcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNjEtXFx0XFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcXHUwMDI2bWV0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjU2LjI0NDI0NDI1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mjc5OTE5OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLRnVuYyBDYWxsIGFuZCBLTVNBTiBDb25jZXJucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGNoZWNrX2tmdW5jX2NhbGxgLCB0aGF0IGBtZXRhYCBzdHJ1Y3QsIGl0J3MgemVyb2VkIG91dCByaWdodCBhdCB0aGUgc3RhcnQuIFNvLCB3ZSdyZSBndWFyYW50ZWVkIGEgY2xlYW4gc2xhdGUgd2l0aCBgbWVtc2V0KFx1MDAyNm1ldGEsIDAsIHNpemVvZihtZXRhKSlgLiBUaGVuLCBgY2hlY2tfa2Z1bmNfYXJnc2AgZ29lcyBhbmQgZmlsbHMgaW4gYG1ldGEucmVmX29iamAsIHdoaWNoIG1lYW5zIGBtZXRhLnJlZl9vYmouaWRgIGhhcyB0byBiZSBpbml0aWFsaXplZCBieSB0aGF0IHBvaW50LiBHb29kLlxuXG5UaGUgcGF0Y2gncyBsb2dpYyBpcyBzb3VuZDsgaXQncyBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIHBhcmVudCByZWZlcmVuY2UgSUQgZm9yIGl0ZXJhdG9yIHJldHVybiB2YWx1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgd2hlbiBhbiBpdGVyYXRvciBnZXRzIGRlc3Ryb3llZC4gV2UncmUgZWZmZWN0aXZlbHkgaW52YWxpZGF0aW5nIGNoaWxkIHBvaW50ZXJzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudCB0byBkby5cblxuU28sIHRoaW5raW5nIHRoaXMgdGhyb3VnaC4uLlxuXG4qICAgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBzY2VuYXJpby5cbiogICBUaGUgcmVhc29uaW5nIGZvciAqd2h5KiB3ZSdyZSB1c2luZyBLQVNBTiBpbnN0ZWFkIG9mIEtNU0FOIG5lZWRzIHRvIGJlIGNyeXN0YWwgY2xlYXIuIFRoZSByb290IGNhdXNlIGhlcmUgaXNuJ3QgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtzLCBvciBtb2RpZmljYXRpb24gb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLiBJdCdzIGEgbGlmZWN5Y2xlL2xpZmV0aW1lIHRyYWNraW5nIHByb2JsZW0gd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCdzIGxlYWRpbmcgdG8gdXNlLWFmdGVyLWZyZWUgZXJyb3JzLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIEtBU0FOIGZ1enppbmcgc2hvdWxkIGhhbmRsZSB0aG9zZSBtZW1vcnkgc2FmZXR5IHByb2JsZW1zLiBLTVNBTidzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbid0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciB2dWxuZXJhYmlsaXR5LlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCBjb21wbGV0ZSwgdGltZSB0byB0cmlnZ2VyIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTYsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjQwOjAwLjUyNDE2Njc4NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIGZvciBwb2ludGVycyByZXR1cm5lZCBieSBpdGVyYXRvciAnbmV4dCcga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIGZvciBwb2ludGVycyByZXR1cm5lZCBieSBpdGVyYXRvciAnbmV4dCcga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9hz99[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 04:37:47 +0000 UTC FinishedAt: 2026-09-09 04:40:02 +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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "3fa3a687-355f-4f1c-a56a-c10e7f21b42c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_kfunc_call", "bpf_check" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmVmZXJlbmNlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9yICYjMzk7bmV4dCYjMzk7IGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uYmU0OTc4NjI5YWU1OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTQxMDUsNiAmIzQzOzE0MTA1LDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuJiM0MztcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFx1MDAyNm1ldGEpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmI4YzhhM2IyNDU4MmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5AQCAtMjgsNiAmIzQzOzI4LDI3IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICghdm1hX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwmIzM0OylcbiBpbnQgaXRlcl9uZXh0X3RydXN0ZWRfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG5AQCAtNjYsNiAmIzQzOzg3LDI4IEBAIGludCBpdGVyX25leHRfcmN1KGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0O1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfbmV3KFx1MDAyNnRhc2tfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4mIzQzO1x0aWYgKCF0YXNrX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4mIzQzO1x0YnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19kZXN0cm95KFx1MDAyNnRhc2tfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcJiMzNDspXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmJlNDk3ODYyOWFlNTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTE0MTA1LDYgJiM0MzsxNDEwNSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQlyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7CiAJCQlyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7CiAJCQlyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7CiYjNDM7CiYjNDM7CQkJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSAmYW1wOyZhbXA7ICEodHlwZSAmYW1wOyBNRU1fUkNVKSkKJiM0MzsJCQkJcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDsKIAkJfQogCiAJCWlmIChpc19rZnVuY19yZXRfbnVsbCgmYW1wO21ldGEpKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwppbmRleCA3NjAxMmRiYmRiNDEzLi5iOGM4YTNiMjQ1ODJmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKQEAgLTI4LDYgJiM0MzsyOCwyNyBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIHZtYV9wdHItJmd0O3ZtX3N0YXJ0OwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF90cnVzdGVkX29yX251bGwoY29uc3Qgdm9pZCAqY3R4KQpAQCAtNjYsNiAmIzQzOzg3LDI4IEBAIGludCBpdGVyX25leHRfcmN1KGNvbnN0IHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza19uZXcoJmFtcDt0YXNrX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXRhc2tfcHRyID0gYnBmX2l0ZXJfdGFza19uZXh0KCZhbXA7dGFza19pdCk7CiYjNDM7CWlmICghdGFza19wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CWJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX2Rlc3Ryb3koJmFtcDt0YXNrX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxJiMzNDspCiBpbnQgaXRlcl9uZXh0X3JjdV9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjaGVja19rZnVuY19jYWxsYCBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBsb2dpYyByZWxhdGVkIHRvIGl0ZXJhdG9yIGNhbGxzLCBzcGVjaWZpY2FsbHkgd2hlbiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgcmV0dXJucyB0cnVlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkYCB0byBgbWV0YS5yZWZfb2JqLmlkYCBpZiB0aGUgdHlwZSBpc24mIzM5O3QgYE1FTV9SQ1VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFdoeSB0aGlzIHNwZWNpZmljIGNoZWNrIGZvciBgTUVNX1JDVWA/IElzIHRoaXMgcmVsYXRlZCB0byBtZW1vcnkgYmFycmllcnMsIHBlcmhhcHM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGlmIHRoaXMgY29uZGl0aW9uIGlzbiYjMzk7dCBtZXQ/CgpUaGUgb3RoZXIgcGFydCBvZiB0aGlzIHBhdGNoIGlzIHVwZGF0aW5nIHRoZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNgLiBUaGF0JiMzOTtzIGdvb2Q7IGhvcGVmdWxseSwgdGhvc2UgdGVzdHMgY292ZXIgdGhlIG5ldyBsb2dpYy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhvc2UgdGVzdHMgY2xvc2VseSB0byBzZWUgaG93IHRoZXkmIzM5O3JlIHZlcmlmeWluZyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBpdGVyYXRvciBjYWxscyB3aXRoIHRoaXMgY2hhbmdlLgoKUmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBjb2RlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IGFyb3VuZCBga2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTA1YCBhbmQgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgZ2VuZXJhbGx5LCBhbmQgd2hhdCBvdGhlciBjaGVja3MgYXJlIHBlcmZvcm1lZC4gVGhhdCYjMzk7bGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIGNvcnJlY3RuZXNzIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwOTA6XHRcdFx0XHRcdCAqIHRoZSBNRU1fUkNVIGZsYWcgdG8gdGhlIHBvaW50ZXIgcmV0dXJuZWQgZnJvbVxuMTQwOTE6XHRcdFx0XHRcdCAqIHRoZSBpdGVyYXRvciYjMzk7cyBuZXh0IGZ1bmN0aW9uIChlLmcuLFxuMTQwOTI6XHRcdFx0XHRcdCAqIGJwZl9pdGVyX3Rhc2tfbmV4dCkuXG4xNDA5MzpcdFx0XHRcdFx0ICovXG4xNDA5NDpcdFx0XHRcdFx0dHlwZSB8PSBNRU1fUkNVO1xuMTQwOTU6XHRcdFx0XHR9IGVsc2Uge1xuMTQwOTY6XHRcdFx0XHRcdC8qXG4xNDA5NzpcdFx0XHRcdFx0ICogQW55IFBUUl9UT19CVEZfSUQgdGhhdCBpcyByZXR1cm5lZCBmcm9tIGEgQlBGXG4xNDA5ODpcdFx0XHRcdFx0ICoga2Z1bmMgc2hvdWxkIGJ5IGRlZmF1bHQgYmUgdHJlYXRlZCBhc1xuMTQwOTk6XHRcdFx0XHRcdCAqIGltcGxpY2l0bHkgdHJ1c3RlZC5cbjE0MTAwOlx0XHRcdFx0XHQgKi9cbjE0MTAxOlx0XHRcdFx0XHR0eXBlIHw9IFBUUl9UUlVTVEVEO1xuMTQxMDI6XHRcdFx0XHR9XG4xNDEwMzpcdFxuMTQxMDQ6XHRcdFx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbjE0MTA1Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuMTQxMDY6XHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XG4xNDEwNzpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcbjE0MTA4Olx0XG4xNDEwOTpcdFx0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuMTQxMTA6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4xNDExMTpcdFx0XHR9XG4xNDExMjpcdFxuMTQxMTM6XHRcdFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFx1MDAyNm1ldGEpKSB7XG4xNDExNDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IFBUUl9NQVlCRV9OVUxMO1xuMTQxMTU6XHRcdFx0XHQvKiBGb3IgbWFya19wdHJfb3JfbnVsbF9yZWcsIHNlZSA5M2MyMzBlM2Y1YmQ2ICovXG4xNDExNjpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5pZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xuMTQxMTc6XHRcdFx0fVxuMTQxMTg6XHRcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkpIHtcbjE0MTE5Olx0XHRcdFx0aWQgPSBhY3F1aXJlX3JlZmVyZW5jZShlbnYsIGluc25faWR4LCAwKTtcbjE0MTIwOlx0XHRcdFx0aWYgKGlkIFx1MDAzYyAwKVxuMTQxMjE6XHRcdFx0XHRcdHJldHVybiBpZDtcbjE0MTIyOlx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gaWQ7XG4xNDEyMzpcdFx0XHR9IGVsc2UgaWYgKGlzX3JidHJlZV9ub2RlX3R5cGUocHRyX3R5cGUpIHx8IGlzX2xpc3Rfbm9kZV90eXBlKHB0cl90eXBlKSkge1xuMTQxMjQ6XHRcdFx0XHRyZWZfc2V0X25vbl9vd25pbmcoZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuMTQxMjU6XHRcdFx0fVxuMTQxMjY6XHRcbjE0MTI3Olx0XHRcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcdTAwMjZyZWdzW0JQRl9SRUdfMF0pIFx1MDAyNlx1MDAyNiAhcmVnc1tCUEZfUkVHXzBdLmlkKVxuMTQxMjg6XHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0uaWQgPSAmIzQzOyYjNDM7ZW52LVx1MDAzZWlkX2dlbjtcbjE0MTI5Olx0XHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3ZvaWQodCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEJQRiBWZXJpZmllcioqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQ6IGBjaGVja19rZnVuY19jYWxsYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhlIEJQRiB2ZXJpZmllciwgcmlnaHQ/IFRoYXQmIzM5O3MgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgd2l0aCBgQlBGX1BST0dfTE9BRGAuIERlZmluaXRlbHkgd29ydGggZGlnZ2luZyBpbnRvLgoKTGV0JiMzOTtzIHF1aWNrbHkgYW5hbHl6ZTogQ29yZSBzdWJzeXN0ZW0/IFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IEJQRiB2ZXJpZmllciBsb2dpYywgbWVhbmluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGF0IGFyZWEuIFNlY3Rpb24gMyBsaXN0cyB0aGUganVpY3kgYXJlYXMgdG8gZnV6ejsgbW0sIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLCBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuIEJpbmdvISBCUEYgZGVmaW5pdGVseSB0aWNrcyB0aGUgJiMzNDtXb3J0aEZ1enppbmcgPSB0cnVlJiMzNDsgYm94LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZXF1aXJlbWVudHM6IFdoYXQgY29uZmlncyBhbmQgc3ltYm9scyBhcmUgbmVlZGVkIHRvIG1ha2UgdGhpcyBjb2RlIGFjdGl2ZT8gSSBuZWVkIHRvIGNoZWNrIGBLY29uZmlnYCBmb3IgYm90aCBCUEYgYW5kIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O20gYXNzdW1pbmcgYEJQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCwgY292ZXJpbmcgdGhlIEJQRiBzeXNjYWxsIGFuZCB2ZXJpZmllci4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgb3IgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9idGYuYy01OTgwLVxua2VybmVsL2JwZi9idGYuYzo1OTgxOlx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxua2VybmVsL2JwZi9idGYuYy01OTgyLVx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXHUwMDNlb3BzO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVx0Lypcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0mIzM5O3Mgb3BzLiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XHRbX2lkXSA9IFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI3MD1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI4MS0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjgyOiAqIGNsZWFycyByZWctXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODMtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24mIzM5O3QgY2FyZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDU0Mz1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MTctXHRcdFx0XHRlbnYsIFwmIzM0O1RoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFwmIzM0O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzE4Olx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MTktXHRcdFx0XHRwdHJfcmVnbm8sIGRzdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NjY1PWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMC0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzMxOiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzMyLSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTcxMj1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI5LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODMwOlx0ZW52LVx1MDAzZW9wcyA9IHN0X29wcy1cdTAwM2V2ZXJpZmllcl9vcHM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4MzEtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNDYzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUwMi1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1MDM6XHRcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTA0LVx0XHRwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMTM1PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE0NS1cdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE0NjpcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNDctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1Ny1cdGVudi1cdTAwM2Vwcm9nID0gKnByb2c7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNTg6XHRlbnYtXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1OS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNjc6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjgtXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gQlBGIEl0ZXJhdGlvbiBGdW5jdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgZnVuY3Rpb24gYSBiaXQgYmV0dGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGJyb2FkZXIgYGNoZWNrX2tmdW5jX2NhbGxgIG1lY2hhbmlzbSBhbmQgd2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpbmdzLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gRmlyc3QsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRvIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jYCB3aXRoaW4gYHZlcmlmaWVyLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGl0IGRvZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHZlcmlmaWVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19pdGVyX25leHRfa2Z1bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jPTQ1Mz1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01MjMtXHRcdFx0cmV0ID0gYnBmX2ZldGNoX2tmdW5jX2FyZ19tZXRhKGVudiwgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvY2ZnLmM6NTI0Olx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xua2VybmVsL2JwZi9jZmcuYy01MjUtXHRcdFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNzU1PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzk3Olx0aW5zbl9hdXgtXHUwMDNlaXNfaXRlcl9uZXh0ID0gYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5OC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwODAtXHRcdFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcdTAwMjZtZXRhKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDgxOlx0XHRcdFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDgyLVx0XHRcdFx0ICAoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcdFx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjYgISh0eXBlIFx1MDAyNiBNRU1fUkNVKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYwOlx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE2MS1cdFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcdTAwMjZtZXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODMxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVmVyaWZ5aW5nIEtmdW5jIENhbGxzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGZvciBrZnVuYyBjYWxscyB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0uIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgdmVyaWZpZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGNoZWNrX2tmdW5jX2NhbGxgIGZ1bmN0aW9uLiBJIGtub3cgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgdmVyaWZpZXIuY2AsIGJ1dCB0aGF0IHN0aWxsIG1ha2VzIGl0IGEgc3ltYm9sLiBgdmVyaWZpZXIuY2AgaXMgYSBtYXNzaXZlIGZpbGUsIHNvIGl0JiMzOTtzIG1vc3QgY2VydGFpbmx5IG5vdCBpbmxpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgc3ltYm9sIGlzIHByb3Blcmx5IGRlZmluZWQgaW4gdm1saW51eC4KClRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBJIHNob3VsZCBhbHNvIGlkZW50aWZ5IG90aGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzLiBUaGUgcHJpbWFyeSBvbmUsIGFzIEkgcmVjYWxsLCBpcyBgYnBmX2NoZWNrYC4gSXQgbG9va3MgbGlrZSB0aGF0IGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllciwgY2FsbGVkIGZyb20gYGJwZl9wcm9nX2xvYWRgIGluIGBzeXNjYWxsLmNgLgoKTm93LCBjb25zaWRlcmluZyBteSBpbml0aWFsIGZvY3VzIGlzIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBwZXJoYXBzIGBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsYCBzZWVtIGxpa2UgcHJvbWlzaW5nIHN5bWJvbHMgdG8gdHJhY2UgdGhyb3VnaC4KCkJlZm9yZSBkaWdnaW5nIGRlZXBlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBqdXN0IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGLXJlbGF0ZWQgZmVhdHVyZS4gUmF0aGVyIHRoYW4ganVzdCBndWVzc2luZyBvciBibGluZGx5IHNlYXJjaGluZywgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgY29yZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgMjUuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZmluZCB0aGUgbWFpbiBkZWZpbml0aW9ucyBhbmQgc2VlIGhvdyB0aGluZ3MgYnJhbmNoIG91dCBmcm9tIHRoZXJlLiBJdCBzaG91bGQgcXVpY2tseSBleHBvc2UgYW55IHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCByZXZlYWxpbmcgdGhlIHByZXJlcXVpc2l0ZXMg4oCTIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgZmxhZ3MsIG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5ncyDigJMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgYmVjb21lcyBhdmFpbGFibGUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgbGF0ZXIgb24gZHVlIHRvIG1pc3NpbmcgZGVwZW5kZW5jaWVzLCBvciB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIHJlbGF0aW9uc2hpcHMuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgc2F2ZSB0aW1lIGluIHRoZSBsb25nIHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTA6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1MTpcdFx0ICBwcm9ncmFtcy5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU0Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1NTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDU2Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2MzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBCVEYgRGVidWcgSW5mbyBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBhbmQga2Z1bmNzL0JURiBzdXBwb3J0IHdpdGhpbiBCUEYuIEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uLCBhbmQgSSBuZWVkIHRvIGVzdGFibGlzaCBhIGNsZWFyIGRlcGVuZGVuY3kgaGVyZS4gSXMgdGhpcyBkZWJ1ZyBpbmZvIHNldHRpbmcgKnJlcXVpcmVkKiBmb3Iga2Z1bmMgZmVhdHVyZXMsIG9yIGlzIGl0IG9wdGlvbmFsPyBEb2VzIGVuYWJsaW5nIEJURiBkZXBlbmQgb24gaXQ/IEkmIzM5O3ZlIHNlZW4gc2l0dWF0aW9ucyB3aGVyZSBpdCBpcyBjcml0aWNhbCwgYW5kIG90aGVycyB3aGVyZSBpdCBpcyBub3QsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBrZXJuZWwgYnVpbGQgYW5kIHRoZSBCUEYgdG9vbHMuCgpNeSBmaXJzdCBtb3ZlIGlzIGdvaW5nIHRvIGJlIGEgcXVpY2sgYGdyZXBgIG9wZXJhdGlvbi4gSSYjMzk7bGwgc2VhcmNoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIHRyZWVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBpbnN0YW5jZXMgb2YgYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGFueSBjb2RlIHJlbGF0ZWQgdG8ga2Z1bmMgZW5hYmxlbWVudC4gVGhhdCBzaG91bGQgb2ZmZXIgcXVpY2sgaW5zaWdodHMgaW50byBhbnkgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLiBJZiBgZ3JlcGAgZG9lc24mIzM5O3QgeWllbGQgYW55dGhpbmcgaW1tZWRpYXRlbHksIEkgd2lsbCBicm9hZGVuIG15IHNlYXJjaCBieSBsb29raW5nIGF0IGhvdyBrZnVuY3MgdGhlbXNlbHZlcyBhcmUgZW5hYmxlZCwgSSBhbSBjb25maWRlbnQgdGhhdCBJIGNhbiBmaW5kIGEgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCB0cmlnZ2VycyBCVEYgdG8gYmUgZW5hYmxlZC4gQnkgYW5hbHl6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBpbmZlciB0aGUgaW1wb3J0YW5jZSBvZiBCVEYgZGVidWcgaW5mbyBmb3Iga2Z1bmMgZnVuY3Rpb25hbGl0eS4gVGhpcyBkaXJlY3QgZXhhbWluYXRpb24gaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYXZvaWQgYW55IG1pc3N0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQyLWVuZGlmXG4tLVxua2VybmVsL2JwZi9idGYuYz02NDAwPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjQwNS1cbmtlcm5lbC9icGYvYnRmLmM6NjQwNjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKVxua2VybmVsL2JwZi9idGYuYy02NDA3LVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY0ODY9X191MzIgYnRmX3JlbG9jYXRlX2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgX191MzIgaWQpXG4tLVxua2VybmVsL2JwZi9idGYuYy02NDkyLVxua2VybmVsL2JwZi9idGYuYzo2NDkzOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy02NDk0LVxua2VybmVsL2JwZi9idGYuYz02NDk1PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjU5MC1cbmtlcm5lbC9icGYvYnRmLmM6NjU5MTojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtNjU5Mi1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg1MDc9ZW51bSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy04NTEwLVxua2VybmVsL2JwZi9idGYuYzo4NTExOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xua2VybmVsL2JwZi9idGYuYy04NTEyLXN0cnVjdCBidGZfbW9kdWxlIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2NDk9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcbmtlcm5lbC9icGYvYnRmLmM6ODY1MDojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cbmtlcm5lbC9icGYvYnRmLmMtODY1MS1cbmtlcm5lbC9icGYvYnRmLmM9ODY1Mj1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODY1NC1cdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NTU6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTYtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg2ODI9c3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmtlcm5lbC9icGYvYnRmLmMtODY4My17XG5rZXJuZWwvYnBmL2J0Zi5jOjg2ODQ6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2ODUtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg2OTUtXG5rZXJuZWwvYnBmL2J0Zi5jOjg2OTY6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2OTctXHRtdXRleF9sb2NrKFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODcxMj1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTMte1xua2VybmVsL2JwZi9idGYuYzo4NzE0Olx0aWYgKCFtb2R1bGUgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xua2VybmVsL2JwZi9idGYuYy04NzE1LVx0XHRwcl9lcnIoXCYjMzQ7bWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxuXCYjMzQ7LCBmZWF0dXJlKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTctXHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjg3MTg6XHRpZiAobW9kdWxlIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbmtlcm5lbC9icGYvYnRmLmMtODcxOS1cdFx0cHJfd2FybihcJiMzNDttaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcblwmIzM0OywgZmVhdHVyZSk7XG4tLVxua2VybmVsL2JwZi9idGYuYz04ODYwPXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxua2VybmVsL2JwZi9idGYuYy04ODYxLXtcbmtlcm5lbC9icGYvYnRmLmM6ODg2MjojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg2My1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtODg3Ni1cbmtlcm5lbC9icGYvYnRmLmM6ODg3NzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODg3OC1cdGd1YXJkKG11dGV4KShcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTk1MjU9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTU1Mi1cbmtlcm5lbC9icGYvYnRmLmM6OTU1MzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtOTU1NC1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjgwMj1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODE4LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjgxOTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgyMC1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MTUxPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2NS1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTY2Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2Ny1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3MTI9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NzI4LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg3Mjk6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3MzAtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNjIwPXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA2MjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA2MjU6XHRpZiAoIWJ0ZiBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA2MjYtXHRcdG11dGV4X2xvY2soXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzAwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgZG93biB3aHkgSSYjMzk7bSBoaXR0aW5nIGEgcm9hZGJsb2NrIHdpdGggdGhlc2Uga2Z1bmMgY2FsbHMgaW4gdGhlIHZlcmlmaWVyLiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgYm90aCBlc3NlbnRpYWwgdG8gZ2V0IHRoaXMgcmlnaHQuIFNwZWNpZmljYWxseSwgdGhhdCBsaW5lIDI4MTkgaW4gYHZlcmlmaWVyLmNgIGlzIHRoZSBjdWxwcml0OiAmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEYmIzM0Oy4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBob3cgdGhlc2UgdHdvIGNvbmZpZ3MgYXJlIGludGVyYWN0aW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKSSBuZWVkIHRvIGhvbWUgaW4gb24gc29tZSBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEkmIzM5O2xsIGZvY3VzIG9uIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBgcHJvY2Vzc19pdGVyX25leHRfY2FsbGAg4oCTIGFuZCBiZWNhdXNlIEkmIzM5O3ZlIHJ1biBpbnRvIGl0ZXJfbmV4dF9rZnVuYyByZWNlbnRseSwgaXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgd2hldGhlciBgcHJvY2Vzc19pdGVyX25leHRfY2FsbGAgYXBwZWFycyBpbiBgdmVyaWZpZXIuY2AuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3NfaXRlcl9uZXh0X2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTExMTE9c3RhdGljIGJvb2wgc3RhdGVzX21heWJlX2xvb3Bpbmcoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyOC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTEyOTovKiBpc19zdGF0ZV92aXNpdGVkKCkgaGFuZGxlcyBpdGVyX25leHQoKSAoc2VlIHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoKSBmb3Jcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEzMC0gKiB0ZXJtaW5vbG9neSkgY2FsbHMgc3BlY2lhbGx5OiBhcyBvcHBvc2VkIHRvIGJvdW5kZWQgQlBGIGxvb3BzLCBpdCAqZXhwZWN0cypcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExNjAtICogbG9vcGluZyAoYW5kIHdvdWxkIGJlICp0ZWNobmljYWxseSogY29ycmVjdCwgaWYgbm90IGZvciBpdGVyYXRvciYjMzk7c1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMTYxOiAqIFwmIzM0O2V2ZW50dWFsIHN0aWNreSBOVUxMXCYjMzQ7IGNvbnRyYWN0LCBzZWUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpKS4gQnV0IHdlXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExNjI6ICogZG9uJiMzOTt0IHdhbnQgdGhhdC4gU28gd2hhdCB3ZSBkbyBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgd2hlbiB3ZSBnbyBvblxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTYzLSAqIGFub3RoZXIgQUNUSVZFIGl0ZXJhdGlvbiwgd2UgYnVtcCBzbG90LVx1MDAzZWl0ZXIuZGVwdGgsIHRvIG1hcmsgdGhhdCBpdCYjMzk7c1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI5Ni1cdFx0XHQgKiBhYm91dCBJRCByZW1hcHBpbmcsIHNvIGRvbiYjMzk7dCBldmVuIHBlcmZvcm0gaXQuXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyOTc6XHRcdFx0ICogU2VlIHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoKSBhbmQgaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyOTgtXHRcdFx0ICogZm9yIG92ZXJ2aWV3IG9mIHRoZSBsb2dpYy4gV2hlbiBjdXJyZW50IGFuZCBvbmUgb2YgcGFyZW50XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc3MzQ9c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgyNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODI2Olx0XHQvKiByZW1lbWJlciBtZXRhLVx1MDAzZWl0ZXIgaW5mbyBmb3IgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgyNy1cdFx0bWV0YS1cdTAwM2VpdGVyLnNwaSA9IHNwaTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzkyMT1zdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmdldF9pdGVyX2Zyb21fc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyX3N0LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTI5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5MzA6LyogcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGlzIGNhbGxlZCB3aGVuIHZlcmlmaWVyIGdldHMgdG8gaXRlcmF0b3ImIzM5O3MgbmV4dFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5MzEtICogXCYjMzQ7bWV0aG9kXCYjMzQ7IChlLmcuLCBicGZfaXRlcl9udW1fbmV4dCgpIGZvciBudW1iZXJzIGl0ZXJhdG9yKSBjYWxsLiBXZSYjMzk7bGwgcmVmZXJcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkzOC0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5Mzk6ICogV2l0aCB0aGUgYXNzdW1wdGlvbiBvZiBzdWNoIGNvbnRyYWN0LCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc2ltdWxhdGVzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk0MC0gKiBhIGZvcmsgaW4gdGhlIHZlcmlmaWVyIHN0YXRlIHRvIHZhbGlkYXRlIGxvb3AgbG9naWMgY29ycmVjdG5lc3MgYW5kIHNhZmV0eVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDA3LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjgwMDg6c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDA5LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzM0PXN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MTUtXHQgKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDE2Olx0ICogVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgZm9yIG9wZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNy1cdCAqIGNvZGVkIGl0ZXJhdG9ycy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3NTU9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNTQtXHQvKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTU1Olx0ICogUmVjb3JkIFIwIGJlZm9yZSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc25hcHNob3RzIHRoZSBhbHRlcm5hdGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE1Ni1cdCAqIGl0ZXJhdG9yIHBhdGgmIzM5O3MgZGlhZ25vc3RpYyBwb3NpdGlvbi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNjAtXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYxOlx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTYyLVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyB0aGUgQlBGIEl0ZXJhdG9yIE5leHQgRnVuY3Rpb24gVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jYC4gSSB0aGluayBhIHF1aWNrIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gd2l0aGluIGB2ZXJpZmllci5jYCBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBjaGVjayBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGdyYXNwIHRoZSBleGFjdCBsb2dpYy4gVGhpcyBpcyBnb2luZyB0byBoZWxwIG1lIHRoaW5rIHRoaXMgdGhyb3VnaCBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfaXRlcl9uZXh0X2tmdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjExPWJvb2wgYnBmX2lzX3N5bmNfY2FsbGJhY2tfY2FsbGluZ19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjE2MTI6c3RhdGljIGlubGluZSBib29sIGJwZl9pc19pdGVyX25leHRfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNjEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NTAKCQkJCQkJCW91dHB1dDogMTQxCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBWZXJpZmllciBBbmFseXNpcyoqCgpPa2F5LCBzbyBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgaXMgc3RhdGljYWxseSBpbmxpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBjb25jZXJuIGhlcmUgaXMgY2VudGVyZWQgb24gYGNoZWNrX2tmdW5jX2NhbGxgIGJlY2F1c2UgaXQmIzM5O3MgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQsIGFjY29yZGluZyB0byB3aGF0IEkmIzM5O20gc2VlaW5nIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHNpZ25pZmljYW50OyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbG9naWMgaXMgYW5kIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBhcmUgbW9zdCBsaWtlbHkgdG8gc3VyZmFjZS4gVGhlIG92ZXJhbGwgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciBpcyBgYnBmX2NoZWNrYC4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb25kaXRpb25zIGFyZSBtZXQgdG8gd2FycmFudCBhIGRlZXAgZGl2ZS4gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyBzZXQgdG8gdHJ1ZSwgZ29vZCBzdGFydC4gVGhlICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGFyZSBpbiBwbGFjZTsgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgcHJlc2VudC4gRmluYWxseSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBicGZfY2hlY2tgLiBQZXJmZWN0LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKUmlnaHQsIHRpbWUgdG8gY29uc3RydWN0IHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncyBub3csIGFuZCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3ImIzM5O3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJiMzOTtuZXh0JiMzOTsga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjE5MjNhOWMzZGZkNTNjOGFjMzcyZjlkMzUzYTkwNjkxZmRkN2U5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwNDozOToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li5iZTQ5Nzg2MjlhZTU5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xNDEwNSw2ICYjNDM7MTQxMDUsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJcmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmOwogCQkJcmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlOwogCQkJcmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IHB0cl90eXBlX2lkOwomIzQzOwomIzQzOwkJCWlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKCZhbXA7bWV0YSkgJmFtcDsmYW1wOyAhKHR5cGUgJmFtcDsgTUVNX1JDVSkpCiYjNDM7CQkJCXJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7CiAJCX0KIAogCQlpZiAoaXNfa2Z1bmNfcmV0X251bGwoJmFtcDttZXRhKSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKaW5kZXggNzYwMTJkYmJkYjQxMy4uYjhjOGEzYjI0NTgyZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCkBAIC0yOCw2ICYjNDM7MjgsMjcgQEAgaW50IGl0ZXJfbmV4dF90cnVzdGVkKGNvbnN0IHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiB2bWFfcHRyLSZndDt2bV9zdGFydDsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKQEAgLTY2LDYgJiM0Mzs4NywyOCBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGl0ZXJfbmV4dF9yY3VfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfbmV3KCZhbXA7dGFza19pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dCgmYW1wO3Rhc2tfaXQpOwomIzQzOwlpZiAoIXRhc2tfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfZGVzdHJveSgmYW1wO3Rhc2tfaXQpOwomIzQzOwlicGZfa2Z1bmNfcmN1X3Rhc2tfdGVzdCh0YXNrX3B0cik7CiYjNDM7CXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHBhdGNoIGl0c2VsZiAtIGl0JiMzOTtzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aGljaCBpcyBhIGtleSBjb21wb25lbnQsIG9idmlvdXNseSwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jYCAtLSB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyB3ZSBzaG91bGQgZXhwZWN0IHNvbWUgaXRlcmF0b3ItcmVsYXRlZCB0ZXN0cy4gCgpOb3csIGZvY3VzaW5nIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgZGlmZiBzaG93cyBhIG5ldyBgaWZgIHN0YXRlbWVudCB3aXRoaW4gYGNoZWNrX2tmdW5jX2NhbGxgLiBJdCYjMzk7cyBhc3NpZ25pbmcgYHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWRgIG9ubHkgaWYgdGhlIEtGdW5jIGJlaW5nIGNhbGxlZCBpcyBhbiBpdGVyYXRvciBuZXh0IGZ1bmN0aW9uIGFuZCB0aGUgcmV0dXJuIHR5cGUgZG9lc24mIzM5O3QgaGF2ZSB0aGUgYE1FTV9SQ1VgIGZsYWcuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIG9iamVjdCByZWZlcmVuY2VzIGNvcnJlY3RseSBpbiBpdGVyYXRvcnMuIFdlJiMzOTtyZSBwcm9iYWJseSB0cmFja2luZyBhIHBhcmVudCBvYmplY3QgSUQgdG8gbWFpbnRhaW4gdGhlIG9iamVjdCYjMzk7cyBsaWZldGltZS4gSWYgaXQgaGFzIGBNRU1fUkNVYCwgdGhlIG9iamVjdCBoYXMgUkNVIHNlbWFudGljcyB3aGljaCB3ZSBjYW4gYXNzdW1lIGhhbmRsZSB0aGUgbGlmZWN5Y2xlLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIHRvIGV4cGxvcmUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agc3Vycm91bmRpbmcgdGhlIGNoYW5nZSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBhbHNvIHRyeSB0byBncmVwIGZvciBzaW1pbGFyIGNoYW5nZXMgYXJvdW5kIHRoZSBjb2RlYmFzZS4gVGhpcyBsb29rcyBsaWtlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgY3J1Y2lhbCwgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJlbnRfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE4Nj1zdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YWNrX2VsZW0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA3OnN0YXRpYyBpbnQgYWNxdWlyZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBpbnQgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgtc3RhdGljIGludCBfX3JlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZSwgaW50IGlkKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjQxPXN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTI0My1cdHJlZl9vYmotXHUwMDNlaWQgPSByZWctXHUwMDNlaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjQ0Olx0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSByZWctXHUwMDNlcGFyZW50X2lkO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTI0NS1cdHJlZl9vYmotXHUwMDNlY250JiM0MzsmIzQzOztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQ2PXN0YXRpYyB2b2lkIF9fbWFya19keW5wdHJfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ3LVx0XHRcdCAgICAgIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ4Olx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUwPXN0YXRpYyB2b2lkIG1hcmtfZHlucHRyX3N0YWNrX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyLVx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyZWcyLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MzpcdFx0XHRcdCAgIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsIGludCBwYXJlbnRfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1NzpcdF9fbWFya19keW5wdHJfcmVnKHNyZWcxLCB0eXBlLCB0cnVlLCBpZCwgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTg6XHRfX21hcmtfZHlucHRyX3JlZyhzcmVnMiwgdHlwZSwgZmFsc2UsIGlkLCBwYXJlbnRfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1OS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3MT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NS1cdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc2Olx0aW50IHNwaSwgaSwgZXJyLCBwYXJlbnRfaWQgPSAwO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY3Ny1cdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxMy1cdFx0LyogVHJhY2sgcGFyZW50JiMzOTtzIGlkIGlmIHRoZSBwYXJlbnQgaXMgYSByZWZlcmVuY2VkIG9iamVjdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjcxNDpcdFx0cGFyZW50X2lkID0gcmVmX29iai1cdTAwM2VpZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyMy1cdFx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjQ6XHRcdFx0aWQgPSBhY3F1aXJlX3JlZmVyZW5jZShlbnYsIGluc25faWR4LCBwYXJlbnRfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNS1cdFx0XHRpZiAoaWQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3Mjg6XHRcdFx0cGFyZW50X2lkID0gaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMwLVx0fSBlbHNlIHsgLyogYnBmX2R5bnB0cl9jbG9uZSgpICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxOlx0XHRwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTczMi1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzM0LVx0bWFya19keW5wdHJfc3RhY2tfcmVncyhlbnYsIFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzM1Olx0XHRcdCAgICAgICBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSAxXS5zcGlsbGVkX3B0ciwgdHlwZSwgcGFyZW50X2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1Mz1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY4LVx0cmV0dXJuIHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgZHlucHRyX3R5cGVfcmVmZXJlbmNlZChyZWctXHUwMDNlZHlucHRyLnR5cGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY5Olx0XHRcdFx0ICAgICAgPyByZWctXHUwMDNlcGFyZW50X2lkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcwLVx0XHRcdFx0ICAgICAgOiByZWctXHUwMDNlaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzY9c3RhdGljIHZvaWQgbWFya19yZWdfaW52YWxpZChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzg0OnN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NS1cdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTY6XHRcdGlmIChzdGFjay1cdTAwM2VzcGlsbGVkX3B0ci5wYXJlbnRfaWQgPT0gdl9wYXJlbnRfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk3LVx0XHRcdHJlZl9jbnQmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MDM9c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyNS1cdGlmIChkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLnR5cGUpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyNjpcdCAgICBkeW5wdHJfcmVmX2NudChlbnYsIHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIucGFyZW50X2lkKSBcdTAwM2M9IDEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQyOT1zdGF0aWMgc3RydWN0IGJwZl9yZWZlcmVuY2Vfc3RhdGUgKmFjcXVpcmVfcmVmZXJlbmNlX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ0Mi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDQzOnN0YXRpYyBpbnQgYWNxdWlyZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBpbnQgcGFyZW50X2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDUxLVx0cy1cdTAwM2VpZCA9ICYjNDM7JiM0MztlbnYtXHUwMDNlaWRfZ2VuO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NTI6XHRzLVx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDUzLVx0YnBmX2RpYWdfcmVjb3JkX3JlZl9hY3F1aXJlKGVudiwgaW5zbl9pZHgsIHMtXHUwMDNlaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODYwPXN0YXRpYyB2b2lkIF9fbWFya19yZWdfa25vd24oc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgdTY0IGltbSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2NS1cdHJlZy1cdTAwM2VpZCA9IDA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg2NjpcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSAwO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjctXHRfX19tYXJrX3JlZ19rbm93bihyZWcsIGltbSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MDA9c3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTAxOlx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEwLVx0cmVnLVx1MDAzZWlkID0gaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkxMTpcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMi1cdHJlZy1cdTAwM2VkeW5wdHIudHlwZSA9IHR5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1Njg9X19wcmludGYoNiwgNykgc3RhdGljIHZvaWQgYnBmX2RpYWdfY2FsbF9hcmdfZm10KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzU3Ny0gKiBhbmQgY29uc3VtZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgZXhwZWN0aW5nIHRvIGJlIGFuIGluaXRpYWxpemVkIGR5bnB0ci5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTc4OiAqIEBwYXJlbnRfaWQgaXMgdXNlZCB0byB0cmFjayB0aGUgcmVmZXJlbmNlZCBwYXJlbnQgb2JqZWN0IChlLmcuLCBmaWxlIG9yIHNrYiBpblxua2VybmVsL2JwZi92ZXJpZmllci5jLTc1NzktICogcWRpc2MgcHJvZ3JhbSkgd2hlbiBjb25zdHJ1Y3RpbmcgYSBkeW5wdHIuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1OTU9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OTktXHRcdFx0ZHlucHRyLVx1MDAzZWlkID0gcmVnLVx1MDAzZWlkO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjc3MDA6XHRcdFx0ZHlucHRyLVx1MDAzZXBhcmVudF9pZCA9IHJlZy1cdTAwM2VwYXJlbnRfaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzcwMS1cdFx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NDYwPXN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDg3LVx0XHRcdFx0Y29udGludWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTQ4ODpcdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0ucGFyZW50X2lkICE9IGlkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0ODktXHRcdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5NS1cdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoe1xua2VybmVsL2JwZi92ZXJpZmllci5jOjk0OTY6XHRcdFx0aWYgKHJlZy1cdTAwM2VpZCAhPSBpZCBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBpZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDk3LVx0XHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OTktXHRcdFx0LyogRnJlZSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgY3VycmVudCBvYmplY3QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTAwOlx0XHRcdGlmIChyZWctXHUwMDNlcGFyZW50X2lkID09IGlkKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTUwMS1cdFx0XHRcdGVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCByZWctXHUwMDNlaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgxMz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNjctXHRpZiAoZnVuY19pZCA9PSBCUEZfRlVOQ19keW5wdHJfZGF0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI2ODpcdFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEuZHlucHRyLmlkO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjY5LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU4ND1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc0NC1cdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzQ1Olx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS1cdTAwM2VkeW5wdHIuaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NDYtXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc1NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA2OS1cdFx0XHRcdFx0cmV0dXJuIGVycjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA3MDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzEtXHRcdFx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOS1cdFx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjYgISh0eXBlIFx1MDAyNiBNRU1fUkNVKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDExMDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxMTEtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGNoZWNrX2tmdW5jX2NhbGxgIGluIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYGNoZWNrX2tmdW5jX2NhbGxgLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IHNlY3Rpb24gb2YgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNDA2MCB0aHJvdWdoIDE0MTIwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGtlcm5lbCBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGJsb2NrIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGNoZWNrcyBpdCYjMzk7cyBwZXJmb3JtaW5nIGF0IHRoYXQganVuY3R1cmUuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgZm9yIHZhbGlkYXRpbmcgYXJndW1lbnRzLCBjYWxsIGNvbnRleHQsIGFuZCBlbnN1cmluZyB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBzZWN1cml0eSBob2xlcyB0aHJvdWdoIHRoZSBCUEYgcHJvZ3JhbS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYXJndW1lbnQgdHlwZSBjaGVja2luZywgYm91bmRzIHZlcmlmaWNhdGlvbiwgYW55IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgbWl0aWdhdGlvbnMsIGFuZCBnZW5lcmFsbHksIGhvdyB0aGlzIGZ1bmN0aW9uIGJhbGFuY2VzIHRoZSBuZWVkIGZvciBCUEYgcHJvZ3JhbSBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIG5lZWQgZm9yIGtlcm5lbCBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCYjMzk7cyB0aGF0IGRlbGljYXRlIGRhbmNlIHRoYXQgSSYjMzk7bSBhbHdheXMgbG9va2luZyBmb3Igd2hlbiByZWFkaW5nIHRoaXMga2luZCBvZiBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDA2MDpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5tZW1fc2l6ZSA9IG1ldGEucmV0X21lbS5zaXplO1xuMTQwNjE6XHRcbjE0MDYyOlx0XHRcdFx0aWYgKG1ldGEucjBfcmRvbmx5KVxuMTQwNjM6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IE1FTV9SRE9OTFk7XG4xNDA2NDpcdFxuMTQwNjU6XHRcdFx0XHQvKiBFbnN1cmVzIHdlIGRvbiYjMzk7dCBhY2Nlc3MgdGhlIG1lbW9yeSBhZnRlciBhIHJlbGVhc2VfcmVmZXJlbmNlKCkgKi9cbjE0MDY2Olx0XHRcdFx0aWYgKG1ldGEucmVmX29iai5pZCkge1xuMTQwNjc6XHRcdFx0XHRcdGVyciA9IHZhbGlkYXRlX3JlZl9vYmooZW52LCBcdTAwMjZtZXRhLnJlZl9vYmopO1xuMTQwNjg6XHRcdFx0XHRcdGlmIChlcnIpXG4xNDA2OTpcdFx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQwNzA6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4xNDA3MTpcdFx0XHRcdH1cbjE0MDcyOlx0XG4xNDA3MzpcdFx0XHRcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFx1MDAyNm1ldGEpKVxuMTQwNzQ6XHRcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IE1FTV9SQ1U7XG4xNDA3NTpcdFx0XHR9IGVsc2Uge1xuMTQwNzY6XHRcdFx0XHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlID0gUFRSX1RPX0JURl9JRDtcbjE0MDc3Olx0XG4xNDA3ODpcdFx0XHRcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9nZXRfa21lbV9jYWNoZV0pXG4xNDA3OTpcdFx0XHRcdFx0dHlwZSB8PSBQVFJfVU5UUlVTVEVEO1xuMTQwODA6XHRcdFx0XHRlbHNlIGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFx1MDAyNm1ldGEpIHx8XG4xNDA4MTpcdFx0XHRcdFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxuMTQwODI6XHRcdFx0XHRcdCAgKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LVx1MDAzZWN1cl9zdGF0ZSwgXHUwMDI2bWV0YSlcbjE0MDgzOlx0XHRcdFx0XHRcdCAgIC1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSkpIHtcbjE0MDg0Olx0XHRcdFx0XHQvKlxuMTQwODU6XHRcdFx0XHRcdCAqIElmIHRoZSBpdGVyYXRvciYjMzk7cyBjb25zdHJ1Y3RvciAodGhlIF9uZXdcbjE0MDg2Olx0XHRcdFx0XHQgKiBmdW5jdGlvbiBlLmcuLCBicGZfaXRlcl90YXNrX25ldykgaGFzIGJlZW5cbjE0MDg3Olx0XHRcdFx0XHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xuMTQwODg6XHRcdFx0XHRcdCAqIEtGX1JDVV9QUk9URUNURUQgYW5kIHdhcyBjYWxsZWQgd2l0aGluIGEgUkNVXG4xNDA4OTpcdFx0XHRcdFx0ICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGFsc28gcHJvcGFnYXRlXG4xNDA5MDpcdFx0XHRcdFx0ICogdGhlIE1FTV9SQ1UgZmxhZyB0byB0aGUgcG9pbnRlciByZXR1cm5lZCBmcm9tXG4xNDA5MTpcdFx0XHRcdFx0ICogdGhlIGl0ZXJhdG9yJiMzOTtzIG5leHQgZnVuY3Rpb24gKGUuZy4sXG4xNDA5MjpcdFx0XHRcdFx0ICogYnBmX2l0ZXJfdGFza19uZXh0KS5cbjE0MDkzOlx0XHRcdFx0XHQgKi9cbjE0MDk0Olx0XHRcdFx0XHR0eXBlIHw9IE1FTV9SQ1U7XG4xNDA5NTpcdFx0XHRcdH0gZWxzZSB7XG4xNDA5NjpcdFx0XHRcdFx0LypcbjE0MDk3Olx0XHRcdFx0XHQgKiBBbnkgUFRSX1RPX0JURl9JRCB0aGF0IGlzIHJldHVybmVkIGZyb20gYSBCUEZcbjE0MDk4Olx0XHRcdFx0XHQgKiBrZnVuYyBzaG91bGQgYnkgZGVmYXVsdCBiZSB0cmVhdGVkIGFzXG4xNDA5OTpcdFx0XHRcdFx0ICogaW1wbGljaXRseSB0cnVzdGVkLlxuMTQxMDA6XHRcdFx0XHRcdCAqL1xuMTQxMDE6XHRcdFx0XHRcdHR5cGUgfD0gUFRSX1RSVVNURUQ7XG4xNDEwMjpcdFx0XHRcdH1cbjE0MTAzOlx0XG4xNDEwNDpcdFx0XHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuMTQxMDU6XHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XG4xNDEwNjpcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbjE0MTA3Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IHB0cl90eXBlX2lkO1xuMTQxMDg6XHRcbjE0MTA5Olx0XHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4xNDExMDpcdFx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcbjE0MTExOlx0XHRcdH1cbjE0MTEyOlx0XG4xNDExMzpcdFx0XHRpZiAoaXNfa2Z1bmNfcmV0X251bGwoXHUwMDI2bWV0YSkpIHtcbjE0MTE0Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgfD0gUFRSX01BWUJFX05VTEw7XG4xNDExNTpcdFx0XHRcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cbjE0MTE2Olx0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLmlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4xNDExNzpcdFx0XHR9XG4xNDExODpcdFx0XHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcdTAwMjZtZXRhKSkge1xuMTQxMTk6XHRcdFx0XHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEl0ZXJhdG9yIFBvaW50ZXIgVHJhY2tpbmcgRml4KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb2RlIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gQlBGIGl0ZXJhdG9ycywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBwb2ludGVycyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3ImIzM5O3MgYG5leHRgIGtmdW5jLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gcmV0dXJuaW5nIGEgYFBUUl9UT19CVEZfSURgIGZyb20sIHNheSwgYGJwZl9pdGVyX3Rhc2tfdm1hX25leHRgLCB0aGUgYHBhcmVudF9pZGAgb2YgdGhlIHJlZ2lzdGVyIGhvbGRpbmcgdGhlIHBvaW50ZXIgKnNob3VsZCogYmUgc2V0IHRvIHRoZSBpdGVyYXRvciYjMzk7cyByZWZlcmVuY2Ugb2JqZWN0IElEIChgbWV0YS5yZWZfb2JqLmlkYCksIGJ1dCBpdCB3YXNuJiMzOTt0IGZvciB0cnVzdGVkIHBvaW50ZXJzLgoKVGhlIHByb2JsZW0gYXJpc2VzIGR1cmluZyBpdGVyYXRvciBkZXN0cnVjdGlvbi4gV2hlbiBgYnBmX2l0ZXJfLi4uX2Rlc3Ryb3lgIGlzIGNhbGxlZCwgYHJlbGVhc2VfcmVmZXJlbmNlYCBpbnZhbGlkYXRlcyByZWdpc3RlcnMgd2hvc2UgYGlkYCBvciBgcGFyZW50X2lkYCBtYXRjaGVzIHRoZSBpdGVyYXRvciYjMzk7cyBgcmVmX29iai5pZGAuIFdpdGhvdXQgdGhlIGBwYXJlbnRfaWRgIHNldCwgdGhlIHZlcmlmaWVyIHdvdWxkbiYjMzk7dCBmbGFnIGF0dGVtcHRzIHRvIGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyIGFmdGVyIHRoZSBpdGVyYXRvciB3YXMgZGVzdHJveWVkLCBhbGxvd2luZyBwb3RlbnRpYWxseSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgY2xhc3NpYyBVQUYuCgpTbywgdGhpcyBwYXRjaCBzZXRzIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCBmb3IgdHJ1c3RlZCBwb2ludGVycy4gVGhpcyB3YXksIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIGRlc3Ryb3llZCwgYHJlbGVhc2VfcmVmZXJlbmNlYCB3aWxsIGludmFsaWRhdGUgdGhlIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBgaXRlcl9uZXh0YCwgY2F1c2luZyB0aGUgdmVyaWZpZXIgdG8gcmVqZWN0IHByb2dyYW1zIHRoYXQgdHJ5IHRvIHVzZSB0aGUgcG9pbnRlciBhZnRlciB0aGUgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuIFRoZSBzZWxmdGVzdCBgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfZGVzdHJveWAgY29uZmlybXMgdGhpczogdGhlIHZlcmlmaWVyIGNvcnJlY3RseSBjb21wbGFpbnMgd2l0aCAgYF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OylgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBLTVNBTiBjaGVjaz8gIFdlIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyByaXNrcyAqc3BlY2lmaWMqIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLgoKKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZSwgZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoYXQuCiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLgoqICAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90IGhlcmUuCiogICAqKkJvdW5kcyBjaGVja3MvbG9naWMgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogTm8sIHRoaXMgaXMgYWxsIGFib3V0IHZhbGlkYXRpbmcgdGhlIGxpZmVjeWNsZSBvZiBhbGxvY2F0ZWQgcG9pbnRlcnMuCgpUaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGxpZmVjeWNsZSBidWcgYW5kIHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBhIHByb2JsZW0gd2UgdHlwaWNhbGx5IGNhdGNoIHdpdGggS0FTQU4uIFdlIGFyZSB0cmFja2luZyBhIGBwYXJlbnRfaWRgIGZvciB1c2Ugd2l0aCBhIG1lbW9yeSBzYWZldHkgY2hlY2sgKFVBRikuIFRoZSBmaXggaXRzZWxmLCBieSBzZXR0aW5nIHRoZSBgcGFyZW50X2lkYCBiZWZvcmUgdGhlIEJQRiB2ZXJpZmllciBtYWtlcyB0aGlzIGFjY2VzcyB1bnNhZmUsICpwcmV2ZW50cyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBpc3N1ZSBpcyBtZW1vcnkgY29ycnVwdGlvbiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBzaG91bGQgZXhwZWN0IHRoZSB2ZXJpZmllciB0byBjYXRjaCB0aGUgVUFGIGNvbmRpdGlvbiBub3csIHJlbmRlcmluZyBLTVNBTiB1bm5lY2Vzc2FyeS4KClRoZSBwYXRjaCBzaG91bGQgYmUgc2FmZSwgYnV0IGxldCYjMzk7cyBjYXJlZnVsbHkgZG91YmxlLWNoZWNrIG9uZSB0aGluZzogaXMgYG1ldGEucmVmX29iai5pZGAgYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSB0aW1lIHdlIGNhbGwgYGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKWA/IExldCYjMzk7cyB0cmFjZSBob3cgdGhlIGBtZXRhLnJlZl9vYmpgIGlzIHNldCBkdXJpbmcga2Z1bmMgYXJndW1lbnQgcHJvY2Vzc2luZyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pc19pdGVyX25leHRfa2Z1bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NmZy5jPTQ1Mz1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01MjMtXHRcdFx0cmV0ID0gYnBmX2ZldGNoX2tmdW5jX2FyZ19tZXRhKGVudiwgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmLCBcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvY2ZnLmM6NTI0Olx0XHRcdGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xua2VybmVsL2JwZi9jZmcuYy01MjUtXHRcdFx0XHRtYXJrX3BydW5lX3BvaW50KGVudiwgdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNzU1PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzk3Olx0aW5zbl9hdXgtXHUwMDNlaXNfaXRlcl9uZXh0ID0gYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5OC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwODAtXHRcdFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcdTAwMjZtZXRhKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDgxOlx0XHRcdFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDgyLVx0XHRcdFx0ICAoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcdFx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjYgISh0eXBlIFx1MDAyNiBNRU1fUkNVKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYwOlx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE2MS1cdFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcdTAwMjZtZXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTYKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLRnVuYyBDYWxsIGFuZCBLTVNBTiBDb25jZXJucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgY2hlY2tfa2Z1bmNfY2FsbGAsIHRoYXQgYG1ldGFgIHN0cnVjdCwgaXQmIzM5O3MgemVyb2VkIG91dCByaWdodCBhdCB0aGUgc3RhcnQuIFNvLCB3ZSYjMzk7cmUgZ3VhcmFudGVlZCBhIGNsZWFuIHNsYXRlIHdpdGggYG1lbXNldCgmYW1wO21ldGEsIDAsIHNpemVvZihtZXRhKSlgLiBUaGVuLCBgY2hlY2tfa2Z1bmNfYXJnc2AgZ29lcyBhbmQgZmlsbHMgaW4gYG1ldGEucmVmX29iamAsIHdoaWNoIG1lYW5zIGBtZXRhLnJlZl9vYmouaWRgIGhhcyB0byBiZSBpbml0aWFsaXplZCBieSB0aGF0IHBvaW50LiBHb29kLgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIHNvdW5kOyBpdCYjMzk7cyBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIHBhcmVudCByZWZlcmVuY2UgSUQgZm9yIGl0ZXJhdG9yIHJldHVybiB2YWx1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgd2hlbiBhbiBpdGVyYXRvciBnZXRzIGRlc3Ryb3llZC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGludmFsaWRhdGluZyBjaGlsZCBwb2ludGVycywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gZG8uCgpTbywgdGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uCgoqICAgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBzY2VuYXJpby4KKiAgIFRoZSByZWFzb25pbmcgZm9yICp3aHkqIHdlJiMzOTtyZSB1c2luZyBLQVNBTiBpbnN0ZWFkIG9mIEtNU0FOIG5lZWRzIHRvIGJlIGNyeXN0YWwgY2xlYXIuIFRoZSByb290IGNhdXNlIGhlcmUgaXNuJiMzOTt0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFrcywgb3IgbW9kaWZpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcy4gSXQmIzM5O3MgYSBsaWZlY3ljbGUvbGlmZXRpbWUgdHJhY2tpbmcgcHJvYmxlbSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0JiMzOTtzIGxlYWRpbmcgdG8gdXNlLWFmdGVyLWZyZWUgZXJyb3JzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBleGlzdGluZyBLQVNBTiBmdXp6aW5nIHNob3VsZCBoYW5kbGUgdGhvc2UgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcy4gS01TQU4mIzM5O3MgZm9jdXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJiMzOTt0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciB2dWxuZXJhYmlsaXR5LgoKQWxyaWdodCwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIHRpbWUgdG8gdHJpZ2dlciB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJiMzOTtuZXh0JiMzOTsga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmVmZXJlbmNlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgZm9yIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9yICYjMzk7bmV4dCYjMzk7IGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToxMS41Mjk5NTU3NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk5NDI1OTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJ25leHQnIGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBjaGVja19rZnVuY19jYWxsIHRvIHNldCB0aGUgcGFyZW50X2lkIG9mIHRoZSByZXR1cm4gcmVnaXN0ZXIgKFIwKSB3aGVuIHZlcmlmeWluZyBhbiBpdGVyYXRvcidzIG5leHQga2Z1bmMgY2FsbCAodW5sZXNzIE1FTV9SQ1UgaXMgc2V0KS4gVGhpcyBlbnN1cmVzIHJlZmVyZW5jZXMgZGVyaXZlZCBmcm9tIGl0ZXJhdG9ycyBwcm9wZXJseSB0cmFjayB0aGVpciBwYXJlbnQgaXRlcmF0b3IgYWNyb3NzIHN0YXRlIGRlc3RydWN0aW9uLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIHZlcmlmaWVyIGNvZGUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjExLjUyOTk2MDczOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxOTA2NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYxOTIzYTljM2RmZDUzYzhhYzM3MmY5ZDM1M2E5MDY5MWZkZDdlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmJlNDk3ODYyOWFlNTkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTE0MTA1LDYgKzE0MTA1LDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XFxuIFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4rXFxuK1xcdFxcdFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNiAhKHR5cGUgXFx1MDAyNiBNRU1fUkNVKSlcXG4rXFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmI4YzhhM2IyNDU4MmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcXG5AQCAtMjgsNiArMjgsMjcgQEAgaW50IGl0ZXJfbmV4dF90cnVzdGVkKGNvbnN0IHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfbmV3KFxcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIXZtYV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIHZtYV9wdHItXFx1MDAzZXZtX3N0YXJ0O1xcbitvdXQ6XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5AQCAtNjYsNiArODcsMjggQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfbmV3KFxcdTAwMjZ0YXNrX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dChcXHUwMDI2dGFza19pdCk7XFxuK1xcdGlmICghdGFza19wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza19kZXN0cm95KFxcdTAwMjZ0YXNrX2l0KTtcXG4rXFx0YnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpO1xcbitcXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcXFwiKVxcbiBpbnQgaXRlcl9uZXh0X3JjdV9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MTIuMTUyNDQwNDE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTY3NzU3MTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3IncyBuZXh0IGtmdW5jIGNhbGwgKHVubGVzcyBNRU1fUkNVIGlzIHNldCkuIFRoaXMgZW5zdXJlcyByZWZlcmVuY2VzIGRlcml2ZWQgZnJvbSBpdGVyYXRvcnMgcHJvcGVybHkgdHJhY2sgdGhlaXIgcGFyZW50IGl0ZXJhdG9yIGFjcm9zcyBzdGF0ZSBkZXN0cnVjdGlvbi4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSB2ZXJpZmllciBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5iZTQ5Nzg2MjlhZTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xNDEwNSw2ICsxNDEwNSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7XG4rXG4rXHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4rXHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19rZnVuY19yZXRfbnVsbChcdTAwMjZtZXRhKSkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5pbmRleCA3NjAxMmRiYmRiNDEzLi5iOGM4YTNiMjQ1ODJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuQEAgLTI4LDYgKzI4LDI3IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcbkBAIC02Niw2ICs4NywyOCBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitcdHJldHVybiAwO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToxMi4xNTI0NDMyMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTUwMTkyNjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY2hlY2tfa2Z1bmNfY2FsbGAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSBsb2dpYyByZWxhdGVkIHRvIGl0ZXJhdG9yIGNhbGxzLCBzcGVjaWZpY2FsbHkgd2hlbiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgcmV0dXJucyB0cnVlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkYCB0byBgbWV0YS5yZWZfb2JqLmlkYCBpZiB0aGUgdHlwZSBpc24ndCBgTUVNX1JDVWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gV2h5IHRoaXMgc3BlY2lmaWMgY2hlY2sgZm9yIGBNRU1fUkNVYD8gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBiYXJyaWVycywgcGVyaGFwcz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaWYgdGhpcyBjb25kaXRpb24gaXNuJ3QgbWV0P1xuXG5UaGUgb3RoZXIgcGFydCBvZiB0aGlzIHBhdGNoIGlzIHVwZGF0aW5nIHRoZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNgLiBUaGF0J3MgZ29vZDsgaG9wZWZ1bGx5LCB0aG9zZSB0ZXN0cyBjb3ZlciB0aGUgbmV3IGxvZ2ljLiBJIG5lZWQgdG8gZXhhbWluZSB0aG9zZSB0ZXN0cyBjbG9zZWx5IHRvIHNlZSBob3cgdGhleSdyZSB2ZXJpZnlpbmcgdGhlIGJlaGF2aW91ciBvZiB0aGUgaXRlcmF0b3IgY2FsbHMgd2l0aCB0aGlzIGNoYW5nZS5cblxuUmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGNvZGUuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwNWAgYW5kIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIGdlbmVyYWxseSwgYW5kIHdoYXQgb3RoZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIFRoYXQnbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIGNvcnJlY3RuZXNzIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MTkuMTAyNjM4MjIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwOTA6XFx0XFx0XFx0XFx0XFx0ICogdGhlIE1FTV9SQ1UgZmxhZyB0byB0aGUgcG9pbnRlciByZXR1cm5lZCBmcm9tXFxuMTQwOTE6XFx0XFx0XFx0XFx0XFx0ICogdGhlIGl0ZXJhdG9yJ3MgbmV4dCBmdW5jdGlvbiAoZS5nLixcXG4xNDA5MjpcXHRcXHRcXHRcXHRcXHQgKiBicGZfaXRlcl90YXNrX25leHQpLlxcbjE0MDkzOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE0MDk0OlxcdFxcdFxcdFxcdFxcdHR5cGUgfD0gTUVNX1JDVTtcXG4xNDA5NTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE0MDk2OlxcdFxcdFxcdFxcdFxcdC8qXFxuMTQwOTc6XFx0XFx0XFx0XFx0XFx0ICogQW55IFBUUl9UT19CVEZfSUQgdGhhdCBpcyByZXR1cm5lZCBmcm9tIGEgQlBGXFxuMTQwOTg6XFx0XFx0XFx0XFx0XFx0ICoga2Z1bmMgc2hvdWxkIGJ5IGRlZmF1bHQgYmUgdHJlYXRlZCBhc1xcbjE0MDk5OlxcdFxcdFxcdFxcdFxcdCAqIGltcGxpY2l0bHkgdHJ1c3RlZC5cXG4xNDEwMDpcXHRcXHRcXHRcXHRcXHQgKi9cXG4xNDEwMTpcXHRcXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9UUlVTVEVEO1xcbjE0MTAyOlxcdFxcdFxcdFxcdH1cXG4xNDEwMzpcXHRcXG4xNDEwNDpcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG4xNDEwNTpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XFxuMTQxMDY6XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xcbjE0MTA3OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4xNDEwODpcXHRcXG4xNDEwOTpcXHRcXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxuMTQxMTA6XFx0XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4xNDExMTpcXHRcXHRcXHR9XFxuMTQxMTI6XFx0XFxuMTQxMTM6XFx0XFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbjE0MTE0OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IFBUUl9NQVlCRV9OVUxMO1xcbjE0MTE1OlxcdFxcdFxcdFxcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cXG4xNDExNjpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbjE0MTE3OlxcdFxcdFxcdH1cXG4xNDExODpcXHRcXHRcXHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcXHUwMDI2bWV0YSkpIHtcXG4xNDExOTpcXHRcXHRcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xcbjE0MTIwOlxcdFxcdFxcdFxcdGlmIChpZCBcXHUwMDNjIDApXFxuMTQxMjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGlkO1xcbjE0MTIyOlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5pZCA9IGlkO1xcbjE0MTIzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaXNfcmJ0cmVlX25vZGVfdHlwZShwdHJfdHlwZSkgfHwgaXNfbGlzdF9ub2RlX3R5cGUocHRyX3R5cGUpKSB7XFxuMTQxMjQ6XFx0XFx0XFx0XFx0cmVmX3NldF9ub25fb3duaW5nKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XFxuMTQxMjU6XFx0XFx0XFx0fVxcbjE0MTI2OlxcdFxcbjE0MTI3OlxcdFxcdFxcdGlmIChyZWdfbWF5X3BvaW50X3RvX3NwaW5fbG9jayhcXHUwMDI2cmVnc1tCUEZfUkVHXzBdKSBcXHUwMDI2XFx1MDAyNiAhcmVnc1tCUEZfUkVHXzBdLmlkKVxcbjE0MTI4OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5pZCA9ICsrZW52LVxcdTAwM2VpZF9nZW47XFxuMTQxMjk6XFx0XFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc192b2lkKHQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjE5LjEwMzYyMjQ0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjMwMzE3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQlBGIFZlcmlmaWVyKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHRhcmdldDogYGNoZWNrX2tmdW5jX2NhbGxgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgQlBGIHZlcmlmaWVyLCByaWdodD8gVGhhdCdzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IHdpdGggYEJQRl9QUk9HX0xPQURgLiBEZWZpbml0ZWx5IHdvcnRoIGRpZ2dpbmcgaW50by5cblxuTGV0J3MgcXVpY2tseSBhbmFseXplOiBDb3JlIHN1YnN5c3RlbT8gWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtZWFuaW5nIHdlJ3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhhdCBhcmVhLiBTZWN0aW9uIDMgbGlzdHMgdGhlIGp1aWN5IGFyZWFzIHRvIGZ1eno7IG1tLCBsb2NraW5nLCBCUEYsIHNjaGVkdWxlciwgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiBCaW5nbyEgQlBGIGRlZmluaXRlbHkgdGlja3MgdGhlIFwiV29ydGhGdXp6aW5nID0gdHJ1ZVwiIGJveC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlcXVpcmVtZW50czogV2hhdCBjb25maWdzIGFuZCBzeW1ib2xzIGFyZSBuZWVkZWQgdG8gbWFrZSB0aGlzIGNvZGUgYWN0aXZlPyBJIG5lZWQgdG8gY2hlY2sgYEtjb25maWdgIGZvciBib3RoIEJQRiBhbmQgYEJQRl9TWVNDQUxMYC4gSSdtIGFzc3VtaW5nIGBCUEZfU1lTQ0FMTGAgaXMgc3RhbmRhcmQsIGNvdmVyaW5nIHRoZSBCUEYgc3lzY2FsbCBhbmQgdmVyaWZpZXIuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgb3IgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToyMS43NjY2NTY4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDIyMDMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllci5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9NDEzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHNtX3Byb2dfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE1LVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQxNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsc21fdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cXHQuZ2V0X2Z1bmNfcHJvdG8gPSBicGZfbHNtX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcwLX07XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTU5ODAtXFxua2VybmVsL2JwZi9idGYuYzo1OTgxOlxcdC8qIHVzZXIgY291bGQgaGF2ZSByZXF1ZXN0ZWQgdmVyYm9zZSB2ZXJpZmllciBvdXRwdXRcXG5rZXJuZWwvYnBmL2J0Zi5jLTU5ODItXFx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5MjM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBjZ19kZXZfcHJvZ19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MjUtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTI2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX2Rldl92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNDc4PXN0YXRpYyB1MzIgc3lzY3RsX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQxLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU0Mjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zeXNjdGxfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNzU2PXN0YXRpYyBpbnQgY2dfc29ja29wdF9nZXRfcHJvbG9ndWUoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2NC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NjU6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc29ja29wdF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz03NDY9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NDgtXFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2dzID0gZW52LVxcdTAwM2VzdWJwcm9nX2luZm87XFxua2VybmVsL2JwZi9maXh1cHMuYzo3NDk6XFx0Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKm9wcyA9IGVudi1cXHUwMDNlb3BzO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzUwLVxcdGludCBpLCBjbnQsIHNpemUsIGN0eF9maWVsZF9zaXplLCByZXQsIGRlbHRhID0gMCwgZXBpbG9ndWVfY250ID0gMDtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM1LS8qIElmIGtlcm5lbCBzdWJzeXN0ZW0gaXMgYWxsb3dpbmcgZUJQRiBwcm9ncmFtcyB0byBjYWxsIHRoaXMgZnVuY3Rpb24sXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzY6ICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLVxcdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNy0gKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjQ4LVxcdC5nZXRfZnVuY19wcm90byAgPSBzeXNjYWxsX3Byb2dfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9OTkyPV9fYnBmX2tmdW5jIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYnBmX2l0ZXJfdGFza192bWFfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0KVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVxcdC8qXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMDExOlxcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEyLVxcdCAqIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMIGluIHZlcmlmaWVyLmMpLiBUYWtlIGEgcmVmZXJlbmNlXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNy0vKiBkdW1teSBfb3BzLiBUaGUgdmVyaWZpZXIgd2lsbCBvcGVyYXRlIG9uIHRhcmdldCBwcm9ncmFtJ3Mgb3BzLiAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9leHRlbnNpb25fdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE5LX07XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqIGNvbnN0IGJwZl92ZXJpZmllcl9vcHNbXSA9IHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XFx0W19pZF0gPSBcXHUwMDI2IF9uYW1lICMjIF92ZXJpZmllcl9vcHMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjcwPWVudW0ge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODEtICogRm9yIHRyYWRpdGlvbmFsIFBUUl9UT19NQVBfVkFMVUUgb3IgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQywgdGhlIHZlcmlmaWVyXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyODI6ICogY2xlYXJzIHJlZy1cXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cXHUwMDNldmFsdWUgdHJhbnNpdGlvbiwgc2luY2UgdGhlIHZlcmlmaWVyIG9ubHlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI4My0gKiBjYXJlcyBhYm91dCB0aGUgcmFuZ2Ugb2YgYWNjZXNzIHRvIHZhbGlkIG1hcCB2YWx1ZSBwb2ludGVyIGFuZCBkb2Vzbid0IGNhcmVcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDU0Mz1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDcxNy1cXHRcXHRcXHRcXHRlbnYsIFxcXCJUaGlzIG9wZXJhdGlvbiBzdWJ0cmFjdHMgcG9pbnRlciByZWdpc3RlciBSJWQgZnJvbSBzY2FsYXIgcmVnaXN0ZXIgUiVkLiBcXFwiXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzE4OlxcdFxcdFxcdFxcdFxcXCJUaGUgdmVyaWZpZXIgb25seSB0cmFja3MgcG9pbnRlci1taW51cy1zY2FsYXIgYXJpdGhtZXRpYyBmb3IgYWxsb3dlZCBwb2ludGVyIHR5cGVzLlxcXCIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzE5LVxcdFxcdFxcdFxcdHB0cl9yZWdubywgZHN0KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzY2NT1ib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMC0gKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzczMTogKiAtIGlmIHNvLCBhbmQgaWYgdmVyaWZpZXIgb3IgY3VycmVudCBKSVQgaW5saW5lcyB0aGUgY2FsbCB0byB0aGVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3MzItICogICBicGZfZmFzdGNhbGwgZnVuY3Rpb24gKGUuZy4gYSBoZWxwZXIgY2FsbCksIGtlcm5lbCByZW1vdmVzIHVubmVjZXNzYXJ5XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3MTI9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI5LVxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTgzMDpcXHRlbnYtXFx1MDAzZW9wcyA9IHN0X29wcy1cXHUwMDNldmVyaWZpZXJfb3BzO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTgzMS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDQ2Mz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUwMi1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1MDM6XFx0XFx0ZW52LVxcdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVxcdTAwM2V0eXBlXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1MDQtXFx0XFx0cHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPSB0Z3RfcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjExMzU9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNDUtXFx0Lyogbm8gcHJvZ3JhbSBpcyB2YWxpZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE0NjpcXHRpZiAoQVJSQVlfU0laRShicGZfdmVyaWZpZXJfb3BzKSA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE0Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1Ny1cXHRlbnYtXFx1MDAzZXByb2cgPSAqcHJvZztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNTg6XFx0ZW52LVxcdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW2Vudi1cXHUwMDNlcHJvZy1cXHUwMDNldHlwZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTU5LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE2NzpcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY4LVxcdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOToyMS44MzY4ODIxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MjQyMTY5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gQlBGIEl0ZXJhdGlvbiBGdW5jdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jYCBmdW5jdGlvbiBhIGJpdCBiZXR0ZXIsIHNwZWNpZmljYWxseSBob3cgaXQgcmVsYXRlcyB0byB0aGUgYnJvYWRlciBgY2hlY2tfa2Z1bmNfY2FsbGAgbWVjaGFuaXNtIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGluZ3MuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGaXJzdCwgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0byB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2Agd2l0aGluIGB2ZXJpZmllci5jYC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGl0IGRvZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHZlcmlmaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MjMuNDYxMTAxMjU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjU4Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19pdGVyX25leHRfa2Z1bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZmcuYz00NTM9c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy01MjMtXFx0XFx0XFx0cmV0ID0gYnBmX2ZldGNoX2tmdW5jX2FyZ19tZXRhKGVudiwgaW5zbi1cXHUwMDNlaW1tLCBpbnNuLVxcdTAwM2VvZmYsIFxcdTAwMjZtZXRhKTtcXG5rZXJuZWwvYnBmL2NmZy5jOjUyNDpcXHRcXHRcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkpIHtcXG5rZXJuZWwvYnBmL2NmZy5jLTUyNS1cXHRcXHRcXHRcXHRtYXJrX3BydW5lX3BvaW50KGVudiwgdCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3NTU9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3OTc6XFx0aW5zbl9hdXgtXFx1MDAzZWlzX2l0ZXJfbmV4dCA9IGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5OC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4MC1cXHRcXHRcXHRlbHNlIGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFxcdTAwMjZtZXRhKSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA4MTpcXHRcXHRcXHRcXHQgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDgyLVxcdFxcdFxcdFxcdCAgKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIFxcdTAwMjZtZXRhKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTA4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTEwLVxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNTktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTYwOlxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE2MS1cXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MjMuNTQ1MzYzOTIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI3MDAxMzExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFZlcmlmeWluZyBLZnVuYyBDYWxscyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgZm9yIGtmdW5jIGNhbGxzIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS4gSSdtIHN0YXJ0aW5nIHdpdGggYHZlcmlmaWVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBjaGVja19rZnVuY19jYWxsYCBmdW5jdGlvbi4gSSBrbm93IGl0J3Mgc3RhdGljIHdpdGhpbiBgdmVyaWZpZXIuY2AsIGJ1dCB0aGF0IHN0aWxsIG1ha2VzIGl0IGEgc3ltYm9sLiBgdmVyaWZpZXIuY2AgaXMgYSBtYXNzaXZlIGZpbGUsIHNvIGl0J3MgbW9zdCBjZXJ0YWlubHkgbm90IGlubGluZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBzeW1ib2wgaXMgcHJvcGVybHkgZGVmaW5lZCBpbiB2bWxpbnV4LlxuXG5UbyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgSSBzaG91bGQgYWxzbyBpZGVudGlmeSBvdGhlciByZWxhdGVkIGVudHJ5IHBvaW50cy4gVGhlIHByaW1hcnkgb25lLCBhcyBJIHJlY2FsbCwgaXMgYGJwZl9jaGVja2AuIEl0IGxvb2tzIGxpa2UgdGhhdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGNhbGxlZCBmcm9tIGBicGZfcHJvZ19sb2FkYCBpbiBgc3lzY2FsbC5jYC5cblxuTm93LCBjb25zaWRlcmluZyBteSBpbml0aWFsIGZvY3VzIGlzIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBwZXJoYXBzIGBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsYCBzZWVtIGxpa2UgcHJvbWlzaW5nIHN5bWJvbHMgdG8gdHJhY2UgdGhyb3VnaC5cblxuQmVmb3JlIGRpZ2dpbmcgZGVlcGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MzEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MjYuODE1Mzc5MjIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3OTExMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjI5LjQzMzI5NTQ3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA2ODA4MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGlzIEJQRi1yZWxhdGVkIGZlYXR1cmUuIFJhdGhlciB0aGFuIGp1c3QgZ3Vlc3Npbmcgb3IgYmxpbmRseSBzZWFyY2hpbmcsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgY29yZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIHRoZXJlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGZpbmQgdGhlIG1haW4gZGVmaW5pdGlvbnMgYW5kIHNlZSBob3cgdGhpbmdzIGJyYW5jaCBvdXQgZnJvbSB0aGVyZS4gSXQgc2hvdWxkIHF1aWNrbHkgZXhwb3NlIGFueSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgcmV2ZWFsaW5nIHRoZSBwcmVyZXF1aXNpdGVzIOKAkyBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGZsYWdzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3Mg4oCTIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IGJlY29tZXMgYXZhaWxhYmxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGF2b2lkIHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgaXNzdWVzIGxhdGVyIG9uIGR1ZSB0byBtaXNzaW5nIGRlcGVuZGVuY2llcywgb3IgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSByZWxhdGlvbnNoaXBzLiBUaGlzIGluaXRpYWwgaW52ZXN0aWdhdGlvbiB3aWxsIHNhdmUgdGltZSBpbiB0aGUgbG9uZyBydW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozMi4yNDAxMDY1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2MzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozMi4yNDAxNzc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzE0NDE1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEJURiBEZWJ1ZyBJbmZvIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGtmdW5jcy9CVEYgc3VwcG9ydCB3aXRoaW4gQlBGLiBJdCdzIGEga2V5IHF1ZXN0aW9uLCBhbmQgSSBuZWVkIHRvIGVzdGFibGlzaCBhIGNsZWFyIGRlcGVuZGVuY3kgaGVyZS4gSXMgdGhpcyBkZWJ1ZyBpbmZvIHNldHRpbmcgKnJlcXVpcmVkKiBmb3Iga2Z1bmMgZmVhdHVyZXMsIG9yIGlzIGl0IG9wdGlvbmFsPyBEb2VzIGVuYWJsaW5nIEJURiBkZXBlbmQgb24gaXQ/IEkndmUgc2VlbiBzaXR1YXRpb25zIHdoZXJlIGl0IGlzIGNyaXRpY2FsLCBhbmQgb3RoZXJzIHdoZXJlIGl0IGlzIG5vdCwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGtlcm5lbCBidWlsZCBhbmQgdGhlIEJQRiB0b29scy5cblxuTXkgZmlyc3QgbW92ZSBpcyBnb2luZyB0byBiZSBhIHF1aWNrIGBncmVwYCBvcGVyYXRpb24uIEknbGwgc2VhcmNoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIHRyZWVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBpbnN0YW5jZXMgb2YgYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGFueSBjb2RlIHJlbGF0ZWQgdG8ga2Z1bmMgZW5hYmxlbWVudC4gVGhhdCBzaG91bGQgb2ZmZXIgcXVpY2sgaW5zaWdodHMgaW50byBhbnkgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLiBJZiBgZ3JlcGAgZG9lc24ndCB5aWVsZCBhbnl0aGluZyBpbW1lZGlhdGVseSwgSSB3aWxsIGJyb2FkZW4gbXkgc2VhcmNoIGJ5IGxvb2tpbmcgYXQgaG93IGtmdW5jcyB0aGVtc2VsdmVzIGFyZSBlbmFibGVkLCBJIGFtIGNvbmZpZGVudCB0aGF0IEkgY2FuIGZpbmQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IHRyaWdnZXJzIEJURiB0byBiZSBlbmFibGVkLiBCeSBhbmFseXppbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGluZmVyIHRoZSBpbXBvcnRhbmNlIG9mIEJURiBkZWJ1ZyBpbmZvIGZvciBrZnVuYyBmdW5jdGlvbmFsaXR5LiBUaGlzIGRpcmVjdCBleGFtaW5hdGlvbiBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBhdm9pZCBhbnkgbWlzc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozNS41NTQ1OTQ5ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTMzOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFQlVHX0lORk9fQlRGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHN5c2ZzX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NDAwPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NDA1LVxcbmtlcm5lbC9icGYvYnRmLmM6NjQwNjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTY0MDctXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTY0ODY9X191MzIgYnRmX3JlbG9jYXRlX2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgX191MzIgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY0OTItXFxua2VybmVsL2JwZi9idGYuYzo2NDkzOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtNjQ5NC1cXG5rZXJuZWwvYnBmL2J0Zi5jPTY0OTU9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZV9tb2R1bGUoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY1OTAtXFxua2VybmVsL2JwZi9idGYuYzo2NTkxOiNlbmRpZiAvKiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUyAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNjU5Mi1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODUwNz1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODUxMC1cXG5rZXJuZWwvYnBmL2J0Zi5jOjg1MTE6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04NTEyLXN0cnVjdCBidGZfbW9kdWxlIHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODY0OT1mc19pbml0Y2FsbChidGZfbW9kdWxlX2luaXQpO1xcbmtlcm5lbC9icGYvYnRmLmM6ODY1MDojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTEtXFxua2VybmVsL2JwZi9idGYuYz04NjUyPXN0cnVjdCBtb2R1bGUgKmJ0Zl90cnlfZ2V0X21vZHVsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTQtXFx0c3RydWN0IG1vZHVsZSAqcmVzID0gTlVMTDtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2NTU6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04NjU2LVxcdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04NjgyPXN0cnVjdCBidGYgKmJ0Zl9nZXRfbW9kdWxlX2J0Zihjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXFxua2VybmVsL2JwZi9idGYuYy04NjgzLXtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2ODQ6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04Njg1LVxcdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04Njk1LVxcbmtlcm5lbC9icGYvYnRmLmM6ODY5NjojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg2OTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnRmX21vZHVsZV9tdXRleCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg3MTI9c3RhdGljIGludCBjaGVja19idGZfa2NvbmZpZ3MoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCBjaGFyICpmZWF0dXJlKVxcbmtlcm5lbC9icGYvYnRmLmMtODcxMy17XFxua2VybmVsL2JwZi9idGYuYzo4NzE0OlxcdGlmICghbW9kdWxlIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xcbmtlcm5lbC9icGYvYnRmLmMtODcxNS1cXHRcXHRwcl9lcnIoXFxcIm1pc3Npbmcgdm1saW51eCBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcXFxuXFxcIiwgZmVhdHVyZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg3MTctXFx0fVxcbmtlcm5lbC9icGYvYnRmLmM6ODcxODpcXHRpZiAobW9kdWxlIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpKVxcbmtlcm5lbC9icGYvYnRmLmMtODcxOS1cXHRcXHRwcl93YXJuKFxcXCJtaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcXFxuXFxcIiwgZmVhdHVyZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg4NjA9c3RhdGljIGludCBidGZfY2hlY2tfa2Z1bmNfbmFtZShzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgdTMyIGtpbmQpXFxua2VybmVsL2JwZi9idGYuYy04ODYxLXtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg4NjI6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy04ODYzLVxcdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04ODc2LVxcbmtlcm5lbC9icGYvYnRmLmM6ODg3NzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4NzgtXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTUyNT1zdGF0aWMgc3RydWN0IGJwZl9jYW5kX2NhY2hlICpwb3B1bGF0ZV9jYW5kX2NhY2hlKHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqY2FuZHMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTk1NTItXFxua2VybmVsL2JwZi9idGYuYzo5NTUzOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtOTU1NC1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yODAyPWludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgxOC1cXHRcXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI4MTk6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgQ09ORklHX0RFQlVHX0lORk9fQlRGXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgyMC1cXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYxNTE9c3RhdGljIGludCBjaGVja19wdHJfdG9fbWFwX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxNjUtXFx0aWYgKCFidGZfdm1saW51eCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTY2OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwibWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxNjctXFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODcxMj1zdGF0aWMgaW50IGNoZWNrX3BzZXVkb19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODcyOC1cXHRcXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NzI5OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwia2VybmVsIGlzIG1pc3NpbmcgQlRGLCBtYWtlIHN1cmUgQ09ORklHX0RFQlVHX0lORk9fQlRGPXkgaXMgc3BlY2lmaWVkIGluIEtjb25maWcuXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3MzAtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA2MjA9c3RydWN0IGJ0ZiAqYnBmX2dldF9idGZfdm1saW51eCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNjI0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDYyNTpcXHRpZiAoIWJ0ZiBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA2MjYtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjM1LjY1MzEzNTQyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODIxODM2MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZlcmlmaWNhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIGRvd24gd2h5IEknbSBoaXR0aW5nIGEgcm9hZGJsb2NrIHdpdGggdGhlc2Uga2Z1bmMgY2FsbHMgaW4gdGhlIHZlcmlmaWVyLiBJdCdzIGJlY29taW5nIGNsZWFyIHRoYXQgYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBib3RoIGVzc2VudGlhbCB0byBnZXQgdGhpcyByaWdodC4gU3BlY2lmaWNhbGx5LCB0aGF0IGxpbmUgMjgxOSBpbiBgdmVyaWZpZXIuY2AgaXMgdGhlIGN1bHByaXQ6IFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlwiLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBob3cgdGhlc2UgdHdvIGNvbmZpZ3MgYXJlIGludGVyYWN0aW5nLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuXG5cbkkgbmVlZCB0byBob21lIGluIG9uIHNvbWUga2V5IHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJJ2xsIGZvY3VzIG9uIGBjaGVja19rZnVuY19jYWxsYCwgYGJwZl9jaGVja2AsIGFuZCBgcHJvY2Vzc19pdGVyX25leHRfY2FsbGAg4oCTIGFuZCBiZWNhdXNlIEkndmUgcnVuIGludG8gaXRlcl9uZXh0X2tmdW5jIHJlY2VudGx5LCBpdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHNlZSB3aGV0aGVyIGBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsYCBhcHBlYXJzIGluIGB2ZXJpZmllci5jYC4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTozOC40NzQ5NzQ3ODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTgwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3NfaXRlcl9uZXh0X2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMTExPXN0YXRpYyBib29sIHN0YXRlc19tYXliZV9sb29waW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTEyOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExMjk6LyogaXNfc3RhdGVfdmlzaXRlZCgpIGhhbmRsZXMgaXRlcl9uZXh0KCkgKHNlZSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgZm9yXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTMwLSAqIHRlcm1pbm9sb2d5KSBjYWxscyBzcGVjaWFsbHk6IGFzIG9wcG9zZWQgdG8gYm91bmRlZCBCUEYgbG9vcHMsIGl0ICpleHBlY3RzKlxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMTYwLSAqIGxvb3BpbmcgKGFuZCB3b3VsZCBiZSAqdGVjaG5pY2FsbHkqIGNvcnJlY3QsIGlmIG5vdCBmb3IgaXRlcmF0b3Inc1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE2MTogKiBcXFwiZXZlbnR1YWwgc3RpY2t5IE5VTExcXFwiIGNvbnRyYWN0LCBzZWUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpKS4gQnV0IHdlXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMTYyOiAqIGRvbid0IHdhbnQgdGhhdC4gU28gd2hhdCB3ZSBkbyBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgd2hlbiB3ZSBnbyBvblxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE2My0gKiBhbm90aGVyIEFDVElWRSBpdGVyYXRpb24sIHdlIGJ1bXAgc2xvdC1cXHUwMDNlaXRlci5kZXB0aCwgdG8gbWFyayB0aGF0IGl0J3NcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjk2LVxcdFxcdFxcdCAqIGFib3V0IElEIHJlbWFwcGluZywgc28gZG9uJ3QgZXZlbiBwZXJmb3JtIGl0Llxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTI5NzpcXHRcXHRcXHQgKiBTZWUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGFuZCBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyOTgtXFx0XFx0XFx0ICogZm9yIG92ZXJ2aWV3IG9mIHRoZSBsb2dpYy4gV2hlbiBjdXJyZW50IGFuZCBvbmUgb2YgcGFyZW50XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzczND1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4MjY6XFx0XFx0LyogcmVtZW1iZXIgbWV0YS1cXHUwMDNlaXRlciBpbmZvIGZvciBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgyNy1cXHRcXHRtZXRhLVxcdTAwM2VpdGVyLnNwaSA9IHNwaTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03OTIxPXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZ2V0X2l0ZXJfZnJvbV9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXJfc3QsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkyOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzkzMDovKiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgaXMgY2FsbGVkIHdoZW4gdmVyaWZpZXIgZ2V0cyB0byBpdGVyYXRvcidzIG5leHRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzkzMS0gKiBcXFwibWV0aG9kXFxcIiAoZS5nLiwgYnBmX2l0ZXJfbnVtX25leHQoKSBmb3IgbnVtYmVycyBpdGVyYXRvcikgY2FsbC4gV2UnbGwgcmVmZXJcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03OTM4LSAqXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5Mzk6ICogV2l0aCB0aGUgYXNzdW1wdGlvbiBvZiBzdWNoIGNvbnRyYWN0LCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc2ltdWxhdGVzXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5NDAtICogYSBmb3JrIGluIHRoZSB2ZXJpZmllciBzdGF0ZSB0byB2YWxpZGF0ZSBsb29wIGxvZ2ljIGNvcnJlY3RuZXNzIGFuZCBzYWZldHlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDA3LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDA4OnN0YXRpYyBpbnQgcHJvY2Vzc19pdGVyX25leHRfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMDktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzMzQ9c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE1LVxcdCAqXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDE2OlxcdCAqIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgaW4gcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGZvciBvcGVuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE3LVxcdCAqIGNvZGVkIGl0ZXJhdG9ycy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc1NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU0LVxcdC8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTU1OlxcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU2LVxcdCAqIGl0ZXJhdG9yIHBhdGgncyBkaWFnbm9zdGljIHBvc2l0aW9uLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTYwLVxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDE2MTpcXHRcXHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFxcdTAwMjZtZXRhKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNjItXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6MzguNTQ2NTYwMDczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODU3OTQxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIHRoZSBCUEYgSXRlcmF0b3IgTmV4dCBGdW5jdGlvbiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AuIEkgdGhpbmsgYSBxdWljayBsb29rIGF0IGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgdmVyaWZpZXIuY2AgaXMgaW4gb3JkZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBleGFjdGx5IGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoaXMgc3BlY2lmaWMgY2hlY2sgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMuIEl0J3MgaW1wb3J0YW50IHRvIGdyYXNwIHRoZSBleGFjdCBsb2dpYy4gVGhpcyBpcyBnb2luZyB0byBoZWxwIG1lIHRoaW5rIHRoaXMgdGhyb3VnaCBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjQwLjIzMjM1NjIzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMDQ1NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19pdGVyX25leHRfa2Z1bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjExPWJvb2wgYnBmX2lzX3N5bmNfY2FsbGJhY2tfY2FsbGluZ19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjEyOnN0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2MTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo0MC40MzM0MTEwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1MjI1MDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgVmVyaWZpZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgYnBmX2lzX2l0ZXJfbmV4dF9rZnVuY2AgaXMgc3RhdGljYWxseSBpbmxpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGNvbmNlcm4gaGVyZSBpcyBjZW50ZXJlZCBvbiBgY2hlY2tfa2Z1bmNfY2FsbGAgYmVjYXVzZSBpdCdzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCBhY2NvcmRpbmcgdG8gd2hhdCBJJ20gc2VlaW5nIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHNpZ25pZmljYW50OyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYyBpcyBhbmQgd2hlcmUgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBzdXJmYWNlLiBUaGUgb3ZlcmFsbCBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGlzIGBicGZfY2hlY2tgLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgY29uZGl0aW9ucyBhcmUgbWV0IHRvIHdhcnJhbnQgYSBkZWVwIGRpdmUuIFwiV29ydGhGdXp6aW5nXCIgaXMgc2V0IHRvIHRydWUsIGdvb2Qgc3RhcnQuIFRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBhcmUgaW4gcGxhY2U7IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIHByZXNlbnQuIEZpbmFsbHksIGFuZCBtb3N0IGltcG9ydGFudGx5LCBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBcIkZvY3VzU3ltYm9sc1wiOiBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBicGZfY2hlY2tgLiBQZXJmZWN0LiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cblJpZ2h0LCB0aW1lIHRvIGNvbnN0cnVjdCB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLiBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGluZ3Mgbm93LCBhbmQgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggY29uZmlkZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjQzLjY4NTY2NjA3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDM0MjAyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIGNoZWNrX2tmdW5jX2NhbGwgdG8gc2V0IHRoZSBwYXJlbnRfaWQgb2YgdGhlIHJldHVybiByZWdpc3RlciAoUjApIHdoZW4gdmVyaWZ5aW5nIGFuIGl0ZXJhdG9yJ3MgbmV4dCBrZnVuYyBjYWxsICh1bmxlc3MgTUVNX1JDVSBpcyBzZXQpLiBUaGlzIGVuc3VyZXMgcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gaXRlcmF0b3JzIHByb3Blcmx5IHRyYWNrIHRoZWlyIHBhcmVudCBpdGVyYXRvciBhY3Jvc3Mgc3RhdGUgZGVzdHJ1Y3Rpb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmVyaWZpZXIgY29kZSByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4gY2hlY2tfa2Z1bmNfY2FsbCB0byBzZXQgdGhlIHBhcmVudF9pZCBvZiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChSMCkgd2hlbiB2ZXJpZnlpbmcgYW4gaXRlcmF0b3IncyBuZXh0IGtmdW5jIGNhbGwgKHVubGVzcyBNRU1fUkNVIGlzIHNldCkuIFRoaXMgZW5zdXJlcyByZWZlcmVuY2VzIGRlcml2ZWQgZnJvbSBpdGVyYXRvcnMgcHJvcGVybHkgdHJhY2sgdGhlaXIgcGFyZW50IGl0ZXJhdG9yIGFjcm9zcyBzdGF0ZSBkZXN0cnVjdGlvbi4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSB2ZXJpZmllciBjb2RlIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo0My44MzAwMTYwMDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Njk0MTg5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NDMuODMwNDg2NjgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY2OTM3MTMxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciBmb3IgcG9pbnRlcnMgcmV0dXJuZWQgYnkgaXRlcmF0b3IgJ25leHQnIGtmdW5jcyAoc2V0dGluZyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGApLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwYXJlbnQgaXRlcmF0b3IgaXMgZGVzdHJveWVkLCBwb2ludGVycyBkZXJpdmVkIGZyb20gaXQgYXJlIHByb3Blcmx5IGludmFsaWRhdGVkIGJ5IHRoZSB2ZXJpZmllciwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZy9maWVsZHMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiBNZW1vcnkgc2FmZXR5IHJpc2tzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGxpZmVjeWNsZXMgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCB2ZXJpZmllciBjaGVja3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MTkyM2E5YzNkZmQ1M2M4YWMzNzJmOWQzNTNhOTA2OTFmZGQ3ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM5OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5iZTQ5Nzg2MjlhZTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xNDEwNSw2ICsxNDEwNSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7XG4rXG4rXHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4rXHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19rZnVuY19yZXRfbnVsbChcdTAwMjZtZXRhKSkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5pbmRleCA3NjAxMmRiYmRiNDEzLi5iOGM4YTNiMjQ1ODJmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuQEAgLTI4LDYgKzI4LDI3IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcbkBAIC02Niw2ICs4NywyOCBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitcdHJldHVybiAwO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo0My44MzA0ODc1MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxMjcwMTUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmIC0gaXQncyB0b3VjaGluZyBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hpY2ggaXMgYSBrZXkgY29tcG9uZW50LCBvYnZpb3VzbHksIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY2AgLS0gdGhhdCdzIGludGVyZXN0aW5nOyB3ZSBzaG91bGQgZXhwZWN0IHNvbWUgaXRlcmF0b3ItcmVsYXRlZCB0ZXN0cy4gXG5cbk5vdywgZm9jdXNpbmcgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBkaWZmIHNob3dzIGEgbmV3IGBpZmAgc3RhdGVtZW50IHdpdGhpbiBgY2hlY2tfa2Z1bmNfY2FsbGAuIEl0J3MgYXNzaWduaW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkYCBvbmx5IGlmIHRoZSBLRnVuYyBiZWluZyBjYWxsZWQgaXMgYW4gaXRlcmF0b3IgbmV4dCBmdW5jdGlvbiBhbmQgdGhlIHJldHVybiB0eXBlIGRvZXNuJ3QgaGF2ZSB0aGUgYE1FTV9SQ1VgIGZsYWcuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIG9iamVjdCByZWZlcmVuY2VzIGNvcnJlY3RseSBpbiBpdGVyYXRvcnMuIFdlJ3JlIHByb2JhYmx5IHRyYWNraW5nIGEgcGFyZW50IG9iamVjdCBJRCB0byBtYWludGFpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuIElmIGl0IGhhcyBgTUVNX1JDVWAsIHRoZSBvYmplY3QgaGFzIFJDVSBzZW1hbnRpY3Mgd2hpY2ggd2UgY2FuIGFzc3VtZSBoYW5kbGUgdGhlIGxpZmVjeWNsZS4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCB0byBleHBsb3JlIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHN1cnJvdW5kaW5nIHRoZSBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSdsbCBhbHNvIHRyeSB0byBncmVwIGZvciBzaW1pbGFyIGNoYW5nZXMgYXJvdW5kIHRoZSBjb2RlYmFzZS4gVGhpcyBsb29rcyBsaWtlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgY3J1Y2lhbCwgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NDguMzQzMTkxMzEyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc2ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJlbnRfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODY9c3RydWN0IGJwZl92ZXJpZmllcl9zdGFja19lbGVtIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNzpzdGF0aWMgaW50IGFjcXVpcmVfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgaW50IHBhcmVudF9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOC1zdGF0aWMgaW50IF9fcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlLCBpbnQgaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTI0MT1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI0My1cXHRyZWZfb2JqLVxcdTAwM2VpZCA9IHJlZy1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI0NDpcXHRyZWZfb2JqLVxcdTAwM2VwYXJlbnRfaWQgPSByZWctXFx1MDAzZXBhcmVudF9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjQ1LVxcdHJlZl9vYmotXFx1MDAzZWNudCsrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY0Nj1zdGF0aWMgdm9pZCBfX21hcmtfZHlucHRyX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDctXFx0XFx0XFx0ICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ4OlxcdFxcdFxcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NTA9c3RhdGljIHZvaWQgbWFya19keW5wdHJfc3RhY2tfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MzpcXHRcXHRcXHRcXHQgICBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlLCBpbnQgcGFyZW50X2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTQte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU3OlxcdF9fbWFya19keW5wdHJfcmVnKHNyZWcxLCB0eXBlLCB0cnVlLCBpZCwgcGFyZW50X2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU4OlxcdF9fbWFya19keW5wdHJfcmVnKHNyZWcyLCB0eXBlLCBmYWxzZSwgaWQsIHBhcmVudF9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1OS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzUtXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc2OlxcdGludCBzcGksIGksIGVyciwgcGFyZW50X2lkID0gMDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc3LVxcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzEzLVxcdFxcdC8qIFRyYWNrIHBhcmVudCdzIGlkIGlmIHRoZSBwYXJlbnQgaXMgYSByZWZlcmVuY2VkIG9iamVjdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTQ6XFx0XFx0cGFyZW50X2lkID0gcmVmX29iai1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxNS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyNDpcXHRcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIHBhcmVudF9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNS1cXHRcXHRcXHRpZiAoaWQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzI4OlxcdFxcdFxcdHBhcmVudF9pZCA9IGlkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjktXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzAtXFx0fSBlbHNlIHsgLyogYnBmX2R5bnB0cl9jbG9uZSgpICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjczMTpcXHRcXHRwYXJlbnRfaWQgPSBkeW5wdHItXFx1MDAzZXBhcmVudF9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMyLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzQtXFx0bWFya19keW5wdHJfc3RhY2tfcmVncyhlbnYsIFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzM1OlxcdFxcdFxcdCAgICAgICBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaSAtIDFdLnNwaWxsZWRfcHRyLCB0eXBlLCBwYXJlbnRfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzUzPXN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OC1cXHRyZXR1cm4gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKHJlZy1cXHUwMDNlZHlucHRyLnR5cGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc2OTpcXHRcXHRcXHRcXHQgICAgICA/IHJlZy1cXHUwMDNlcGFyZW50X2lkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc3MC1cXHRcXHRcXHRcXHQgICAgICA6IHJlZy1cXHUwMDNlaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc3Nj1zdGF0aWMgdm9pZCBtYXJrX3JlZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODQ6c3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk1LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3OTY6XFx0XFx0aWYgKHN0YWNrLVxcdTAwM2VzcGlsbGVkX3B0ci5wYXJlbnRfaWQgPT0gdl9wYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5Ny1cXHRcXHRcXHRyZWZfY250Kys7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAzPXN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyNS1cXHRpZiAoZHlucHRyX3R5cGVfcmVmZXJlbmNlZChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5keW5wdHIudHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODI2OlxcdCAgICBkeW5wdHJfcmVmX2NudChlbnYsIHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLnBhcmVudF9pZCkgXFx1MDAzYz0gMSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDI5PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZmVyZW5jZV9zdGF0ZSAqYWNxdWlyZV9yZWZlcmVuY2Vfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NDM6c3RhdGljIGludCBhY3F1aXJlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIGludCBwYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDQte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NTEtXFx0cy1cXHUwMDNlaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDUyOlxcdHMtXFx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ1My1cXHRicGZfZGlhZ19yZWNvcmRfcmVmX2FjcXVpcmUoZW52LCBpbnNuX2lkeCwgcy1cXHUwMDNlaWQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NjA9c3RhdGljIHZvaWQgX19tYXJrX3JlZ19rbm93bihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCB1NjQgaW1tKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NjUtXFx0cmVnLVxcdTAwM2VpZCA9IDA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NjY6XFx0cmVnLVxcdTAwM2VwYXJlbnRfaWQgPSAwO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODY3LVxcdF9fX21hcmtfcmVnX2tub3duKHJlZywgaW1tKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTAwPXN0YXRpYyB2b2lkIF9fbWFya19keW5wdHJfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDE6XFx0XFx0XFx0ICAgICAgYm9vbCBmaXJzdF9zbG90LCBpbnQgaWQsIGludCBwYXJlbnRfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDIte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTAtXFx0cmVnLVxcdTAwM2VpZCA9IGlkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTExOlxcdHJlZy1cXHUwMDNlcGFyZW50X2lkID0gcGFyZW50X2lkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEyLVxcdHJlZy1cXHUwMDNlZHlucHRyLnR5cGUgPSB0eXBlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1Njg9X19wcmludGYoNiwgNykgc3RhdGljIHZvaWQgYnBmX2RpYWdfY2FsbF9hcmdfZm10KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpbnNuX2lkeCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTc3LSAqIGFuZCBjb25zdW1lZCB3aGVuIHRoZSBhcmd1bWVudCBpcyBleHBlY3RpbmcgdG8gYmUgYW4gaW5pdGlhbGl6ZWQgZHlucHRyLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTc4OiAqIEBwYXJlbnRfaWQgaXMgdXNlZCB0byB0cmFjayB0aGUgcmVmZXJlbmNlZCBwYXJlbnQgb2JqZWN0IChlLmcuLCBmaWxlIG9yIHNrYiBpblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTc5LSAqIHFkaXNjIHByb2dyYW0pIHdoZW4gY29uc3RydWN0aW5nIGEgZHlucHRyLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc1OTU9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5OS1cXHRcXHRcXHRkeW5wdHItXFx1MDAzZWlkID0gcmVnLVxcdTAwM2VpZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzcwMDpcXHRcXHRcXHRkeW5wdHItXFx1MDAzZXBhcmVudF9pZCA9IHJlZy1cXHUwMDNlcGFyZW50X2lkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzAxLVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NDYwPXN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0ODctXFx0XFx0XFx0XFx0Y29udGludWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0ODg6XFx0XFx0XFx0aWYgKHZzdGF0ZS1cXHUwMDNlcmVmc1tpXS5wYXJlbnRfaWQgIT0gaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0ODktXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5NS1cXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKHZzdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIG1hc2ssICh7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk0OTY6XFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNlaWQgIT0gaWQgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2VwYXJlbnRfaWQgIT0gaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OTctXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQ5OS1cXHRcXHRcXHQvKiBGcmVlIG9iamVjdHMgZGVyaXZlZCBmcm9tIHRoZSBjdXJyZW50IG9iamVjdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTAwOlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXBhcmVudF9pZCA9PSBpZCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NTAxLVxcdFxcdFxcdFxcdGVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCByZWctXFx1MDAzZWlkKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgxMz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI2Ny1cXHRpZiAoZnVuY19pZCA9PSBCUEZfRlVOQ19keW5wdHJfZGF0YSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyNjg6XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEuZHlucHRyLmlkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI2OS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU4ND1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzQ0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3NDU6XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEtXFx1MDAzZWR5bnB0ci5pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NDYtXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc1NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDY5LVxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDcwOlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDcxLVxcdFxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOS1cXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTEwOlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTExLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NDguNDQyOTY0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTI3NzAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgY2hlY2tfa2Z1bmNfY2FsbGAgaW4gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIGBjaGVja19rZnVuY19jYWxsYC4gTGV0J3MgemVybyBpbiBvbiB0aGF0IHNlY3Rpb24gb2YgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSBsaW5lcyAxNDA2MCB0aHJvdWdoIDE0MTIwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGtlcm5lbCBmdW5jdGlvbiBjYWxscy4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYmxvY2sgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY2hlY2tzIGl0J3MgcGVyZm9ybWluZyBhdCB0aGF0IGp1bmN0dXJlLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzIGZvciB2YWxpZGF0aW5nIGFyZ3VtZW50cywgY2FsbCBjb250ZXh0LCBhbmQgZW5zdXJpbmcgd2UgYXJlbid0IGludHJvZHVjaW5nIGFueSBzZWN1cml0eSBob2xlcyB0aHJvdWdoIHRoZSBCUEYgcHJvZ3JhbS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBhcmd1bWVudCB0eXBlIGNoZWNraW5nLCBib3VuZHMgdmVyaWZpY2F0aW9uLCBhbnkgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBtaXRpZ2F0aW9ucywgYW5kIGdlbmVyYWxseSwgaG93IHRoaXMgZnVuY3Rpb24gYmFsYW5jZXMgdGhlIG5lZWQgZm9yIEJQRiBwcm9ncmFtIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgbmVlZCBmb3Iga2VybmVsIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHkuIEl0J3MgdGhhdCBkZWxpY2F0ZSBkYW5jZSB0aGF0IEknbSBhbHdheXMgbG9va2luZyBmb3Igd2hlbiByZWFkaW5nIHRoaXMga2luZCBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NTAuNjQ0MjQ0NzA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjcwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDA2MDpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0ubWVtX3NpemUgPSBtZXRhLnJldF9tZW0uc2l6ZTtcXG4xNDA2MTpcXHRcXG4xNDA2MjpcXHRcXHRcXHRcXHRpZiAobWV0YS5yMF9yZG9ubHkpXFxuMTQwNjM6XFx0XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgfD0gTUVNX1JET05MWTtcXG4xNDA2NDpcXHRcXG4xNDA2NTpcXHRcXHRcXHRcXHQvKiBFbnN1cmVzIHdlIGRvbid0IGFjY2VzcyB0aGUgbWVtb3J5IGFmdGVyIGEgcmVsZWFzZV9yZWZlcmVuY2UoKSAqL1xcbjE0MDY2OlxcdFxcdFxcdFxcdGlmIChtZXRhLnJlZl9vYmouaWQpIHtcXG4xNDA2NzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB2YWxpZGF0ZV9yZWZfb2JqKGVudiwgXFx1MDAyNm1ldGEucmVmX29iaik7XFxuMTQwNjg6XFx0XFx0XFx0XFx0XFx0aWYgKGVycilcXG4xNDA2OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MDcwOlxcdFxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XFxuMTQwNzE6XFx0XFx0XFx0XFx0fVxcbjE0MDcyOlxcdFxcbjE0MDczOlxcdFxcdFxcdFxcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKFxcdTAwMjZtZXRhKSlcXG4xNDA3NDpcXHRcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0udHlwZSB8PSBNRU1fUkNVO1xcbjE0MDc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTQwNzY6XFx0XFx0XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZSA9IFBUUl9UT19CVEZfSUQ7XFxuMTQwNzc6XFx0XFxuMTQwNzg6XFx0XFx0XFx0XFx0aWYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2dldF9rbWVtX2NhY2hlXSlcXG4xNDA3OTpcXHRcXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuMTQwODA6XFx0XFx0XFx0XFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcXHUwMDI2bWV0YSkgfHxcXG4xNDA4MTpcXHRcXHRcXHRcXHRcXHQgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpIFxcdTAwMjZcXHUwMDI2XFxuMTQwODI6XFx0XFx0XFx0XFx0XFx0ICAoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgXFx1MDAyNm1ldGEpXFxuMTQwODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1JDVSkpKSB7XFxuMTQwODQ6XFx0XFx0XFx0XFx0XFx0LypcXG4xNDA4NTpcXHRcXHRcXHRcXHRcXHQgKiBJZiB0aGUgaXRlcmF0b3IncyBjb25zdHJ1Y3RvciAodGhlIF9uZXdcXG4xNDA4NjpcXHRcXHRcXHRcXHRcXHQgKiBmdW5jdGlvbiBlLmcuLCBicGZfaXRlcl90YXNrX25ldykgaGFzIGJlZW5cXG4xNDA4NzpcXHRcXHRcXHRcXHRcXHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xcbjE0MDg4OlxcdFxcdFxcdFxcdFxcdCAqIEtGX1JDVV9QUk9URUNURUQgYW5kIHdhcyBjYWxsZWQgd2l0aGluIGEgUkNVXFxuMTQwODk6XFx0XFx0XFx0XFx0XFx0ICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGFsc28gcHJvcGFnYXRlXFxuMTQwOTA6XFx0XFx0XFx0XFx0XFx0ICogdGhlIE1FTV9SQ1UgZmxhZyB0byB0aGUgcG9pbnRlciByZXR1cm5lZCBmcm9tXFxuMTQwOTE6XFx0XFx0XFx0XFx0XFx0ICogdGhlIGl0ZXJhdG9yJ3MgbmV4dCBmdW5jdGlvbiAoZS5nLixcXG4xNDA5MjpcXHRcXHRcXHRcXHRcXHQgKiBicGZfaXRlcl90YXNrX25leHQpLlxcbjE0MDkzOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE0MDk0OlxcdFxcdFxcdFxcdFxcdHR5cGUgfD0gTUVNX1JDVTtcXG4xNDA5NTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE0MDk2OlxcdFxcdFxcdFxcdFxcdC8qXFxuMTQwOTc6XFx0XFx0XFx0XFx0XFx0ICogQW55IFBUUl9UT19CVEZfSUQgdGhhdCBpcyByZXR1cm5lZCBmcm9tIGEgQlBGXFxuMTQwOTg6XFx0XFx0XFx0XFx0XFx0ICoga2Z1bmMgc2hvdWxkIGJ5IGRlZmF1bHQgYmUgdHJlYXRlZCBhc1xcbjE0MDk5OlxcdFxcdFxcdFxcdFxcdCAqIGltcGxpY2l0bHkgdHJ1c3RlZC5cXG4xNDEwMDpcXHRcXHRcXHRcXHRcXHQgKi9cXG4xNDEwMTpcXHRcXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9UUlVTVEVEO1xcbjE0MTAyOlxcdFxcdFxcdFxcdH1cXG4xNDEwMzpcXHRcXG4xNDEwNDpcXHRcXHRcXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG4xNDEwNTpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XFxuMTQxMDY6XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xcbjE0MTA3OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4xNDEwODpcXHRcXG4xNDEwOTpcXHRcXHRcXHRcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkgXFx1MDAyNlxcdTAwMjYgISh0eXBlIFxcdTAwMjYgTUVNX1JDVSkpXFxuMTQxMTA6XFx0XFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4xNDExMTpcXHRcXHRcXHR9XFxuMTQxMTI6XFx0XFxuMTQxMTM6XFx0XFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbjE0MTE0OlxcdFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IFBUUl9NQVlCRV9OVUxMO1xcbjE0MTE1OlxcdFxcdFxcdFxcdC8qIEZvciBtYXJrX3B0cl9vcl9udWxsX3JlZywgc2VlIDkzYzIzMGUzZjViZDYgKi9cXG4xNDExNjpcXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0uaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbjE0MTE3OlxcdFxcdFxcdH1cXG4xNDExODpcXHRcXHRcXHRpZiAoaXNfa2Z1bmNfYWNxdWlyZShcXHUwMDI2bWV0YSkpIHtcXG4xNDExOTpcXHRcXHRcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozOTo1MC42NDUzMTUyNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwNTMwMDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJdGVyYXRvciBQb2ludGVyIFRyYWNraW5nIEZpeCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvZGUgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiBCUEYgaXRlcmF0b3JzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHBvaW50ZXJzIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvcidzIGBuZXh0YCBrZnVuYy4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB3aGVuIHJldHVybmluZyBhIGBQVFJfVE9fQlRGX0lEYCBmcm9tLCBzYXksIGBicGZfaXRlcl90YXNrX3ZtYV9uZXh0YCwgdGhlIGBwYXJlbnRfaWRgIG9mIHRoZSByZWdpc3RlciBob2xkaW5nIHRoZSBwb2ludGVyICpzaG91bGQqIGJlIHNldCB0byB0aGUgaXRlcmF0b3IncyByZWZlcmVuY2Ugb2JqZWN0IElEIChgbWV0YS5yZWZfb2JqLmlkYCksIGJ1dCBpdCB3YXNuJ3QgZm9yIHRydXN0ZWQgcG9pbnRlcnMuXG5cblRoZSBwcm9ibGVtIGFyaXNlcyBkdXJpbmcgaXRlcmF0b3IgZGVzdHJ1Y3Rpb24uIFdoZW4gYGJwZl9pdGVyXy4uLl9kZXN0cm95YCBpcyBjYWxsZWQsIGByZWxlYXNlX3JlZmVyZW5jZWAgaW52YWxpZGF0ZXMgcmVnaXN0ZXJzIHdob3NlIGBpZGAgb3IgYHBhcmVudF9pZGAgbWF0Y2hlcyB0aGUgaXRlcmF0b3IncyBgcmVmX29iai5pZGAuIFdpdGhvdXQgdGhlIGBwYXJlbnRfaWRgIHNldCwgdGhlIHZlcmlmaWVyIHdvdWxkbid0IGZsYWcgYXR0ZW1wdHMgdG8gZGVyZWZlcmVuY2UgdGhlIHBvaW50ZXIgYWZ0ZXIgdGhlIGl0ZXJhdG9yIHdhcyBkZXN0cm95ZWQsIGFsbG93aW5nIHBvdGVudGlhbGx5IGludmFsaWQgbWVtb3J5IGFjY2Vzcy4gVGhpcyBpcyBjbGFzc2ljIFVBRi5cblxuU28sIHRoaXMgcGF0Y2ggc2V0cyBgcmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZGAgZm9yIHRydXN0ZWQgcG9pbnRlcnMuIFRoaXMgd2F5LCB3aGVuIHRoZSBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIGByZWxlYXNlX3JlZmVyZW5jZWAgd2lsbCBpbnZhbGlkYXRlIHRoZSBwb2ludGVyIHJldHVybmVkIGZyb20gYGl0ZXJfbmV4dGAsIGNhdXNpbmcgdGhlIHZlcmlmaWVyIHRvIHJlamVjdCBwcm9ncmFtcyB0aGF0IHRyeSB0byB1c2UgdGhlIHBvaW50ZXIgYWZ0ZXIgdGhlIGl0ZXJhdG9yIGlzIGRlc3Ryb3llZCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LiBUaGUgc2VsZnRlc3QgYGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3lgIGNvbmZpcm1zIHRoaXM6IHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgY29tcGxhaW5zIHdpdGggIGBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSB3YXJyYW50IGEgS01TQU4gY2hlY2s/ICBXZSBuZWVkIHRvIHNlZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgcmlza3MgKnNwZWNpZmljKiB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLlxuXG4qICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLCBkb2Vzbid0IHRvdWNoIGFueSBvZiB0aGF0LlxuKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uXG4qICAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90IGhlcmUuXG4qICAgKipCb3VuZHMgY2hlY2tzL2xvZ2ljIHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCB0aGlzIGlzIGFsbCBhYm91dCB2YWxpZGF0aW5nIHRoZSBsaWZlY3ljbGUgb2YgYWxsb2NhdGVkIHBvaW50ZXJzLlxuXG5UaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGxpZmVjeWNsZSBidWcgYW5kIHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBhIHByb2JsZW0gd2UgdHlwaWNhbGx5IGNhdGNoIHdpdGggS0FTQU4uIFdlIGFyZSB0cmFja2luZyBhIGBwYXJlbnRfaWRgIGZvciB1c2Ugd2l0aCBhIG1lbW9yeSBzYWZldHkgY2hlY2sgKFVBRikuIFRoZSBmaXggaXRzZWxmLCBieSBzZXR0aW5nIHRoZSBgcGFyZW50X2lkYCBiZWZvcmUgdGhlIEJQRiB2ZXJpZmllciBtYWtlcyB0aGlzIGFjY2VzcyB1bnNhZmUsICpwcmV2ZW50cyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBpc3N1ZSBpcyBtZW1vcnkgY29ycnVwdGlvbiwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBzaG91bGQgZXhwZWN0IHRoZSB2ZXJpZmllciB0byBjYXRjaCB0aGUgVUFGIGNvbmRpdGlvbiBub3csIHJlbmRlcmluZyBLTVNBTiB1bm5lY2Vzc2FyeS5cblxuVGhlIHBhdGNoIHNob3VsZCBiZSBzYWZlLCBidXQgbGV0J3MgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBvbmUgdGhpbmc6IGlzIGBtZXRhLnJlZl9vYmouaWRgIGFsd2F5cyBwcm9wZXJseSBpbml0aWFsaXplZCBieSB0aGUgdGltZSB3ZSBjYWxsIGBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpYD8gTGV0J3MgdHJhY2UgaG93IHRoZSBgbWV0YS5yZWZfb2JqYCBpcyBzZXQgZHVyaW5nIGtmdW5jIGFyZ3VtZW50IHByb2Nlc3NpbmcgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6Mzk6NTYuMTUwNjE4NDkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzYxNTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXNfaXRlcl9uZXh0X2tmdW5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2ZnLmM9NDUzPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTIzLVxcdFxcdFxcdHJldCA9IGJwZl9mZXRjaF9rZnVuY19hcmdfbWV0YShlbnYsIGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlb2ZmLCBcXHUwMDI2bWV0YSk7XFxua2VybmVsL2JwZi9jZmcuYzo1MjQ6XFx0XFx0XFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpKSB7XFxua2VybmVsL2JwZi9jZmcuYy01MjUtXFx0XFx0XFx0XFx0bWFya19wcnVuZV9wb2ludChlbnYsIHQpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNzU1PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3OTYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzk3OlxcdGluc25fYXV4LVxcdTAwM2Vpc19pdGVyX25leHQgPSBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3OTgtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwODAtXFx0XFx0XFx0ZWxzZSBpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChcXHUwMDI2bWV0YSkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODE6XFx0XFx0XFx0XFx0IChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4Mi1cXHRcXHRcXHRcXHQgIChnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBcXHUwMDI2bWV0YSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQxMDk6XFx0XFx0XFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpIFxcdTAwMjZcXHUwMDI2ICEodHlwZSBcXHUwMDI2IE1FTV9SQ1UpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cXHRcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDE2MDpcXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNjEtXFx0XFx0ZXJyID0gcHJvY2Vzc19pdGVyX25leHRfY2FsbChlbnYsIGluc25faWR4LCBcXHUwMDI2bWV0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM5OjU2LjI0NDI0NDI1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mjc5OTE5OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLRnVuYyBDYWxsIGFuZCBLTVNBTiBDb25jZXJucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGNoZWNrX2tmdW5jX2NhbGxgLCB0aGF0IGBtZXRhYCBzdHJ1Y3QsIGl0J3MgemVyb2VkIG91dCByaWdodCBhdCB0aGUgc3RhcnQuIFNvLCB3ZSdyZSBndWFyYW50ZWVkIGEgY2xlYW4gc2xhdGUgd2l0aCBgbWVtc2V0KFx1MDAyNm1ldGEsIDAsIHNpemVvZihtZXRhKSlgLiBUaGVuLCBgY2hlY2tfa2Z1bmNfYXJnc2AgZ29lcyBhbmQgZmlsbHMgaW4gYG1ldGEucmVmX29iamAsIHdoaWNoIG1lYW5zIGBtZXRhLnJlZl9vYmouaWRgIGhhcyB0byBiZSBpbml0aWFsaXplZCBieSB0aGF0IHBvaW50LiBHb29kLlxuXG5UaGUgcGF0Y2gncyBsb2dpYyBpcyBzb3VuZDsgaXQncyBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIHBhcmVudCByZWZlcmVuY2UgSUQgZm9yIGl0ZXJhdG9yIHJldHVybiB2YWx1ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgd2hlbiBhbiBpdGVyYXRvciBnZXRzIGRlc3Ryb3llZC4gV2UncmUgZWZmZWN0aXZlbHkgaW52YWxpZGF0aW5nIGNoaWxkIHBvaW50ZXJzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudCB0byBkby5cblxuU28sIHRoaW5raW5nIHRoaXMgdGhyb3VnaC4uLlxuXG4qICAgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBzY2VuYXJpby5cbiogICBUaGUgcmVhc29uaW5nIGZvciAqd2h5KiB3ZSdyZSB1c2luZyBLQVNBTiBpbnN0ZWFkIG9mIEtNU0FOIG5lZWRzIHRvIGJlIGNyeXN0YWwgY2xlYXIuIFRoZSByb290IGNhdXNlIGhlcmUgaXNuJ3QgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtzLCBvciBtb2RpZmljYXRpb24gb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLiBJdCdzIGEgbGlmZWN5Y2xlL2xpZmV0aW1lIHRyYWNraW5nIHByb2JsZW0gd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCdzIGxlYWRpbmcgdG8gdXNlLWFmdGVyLWZyZWUgZXJyb3JzLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIEtBU0FOIGZ1enppbmcgc2hvdWxkIGhhbmRsZSB0aG9zZSBtZW1vcnkgc2FmZXR5IHByb2JsZW1zLiBLTVNBTidzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbid0IHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciB2dWxuZXJhYmlsaXR5LlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCBjb21wbGV0ZSwgdGltZSB0byB0cmlnZ2VyIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTYsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjQwOjAwLjUyNDE2Njc4NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIGZvciBwb2ludGVycyByZXR1cm5lZCBieSBpdGVyYXRvciAnbmV4dCcga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIGZvciBwb2ludGVycyByZXR1cm5lZCBieSBpdGVyYXRvciAnbmV4dCcga2Z1bmNzIChzZXR0aW5nIGByZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkYCkuIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIHBhcmVudCBpdGVyYXRvciBpcyBkZXN0cm95ZWQsIHBvaW50ZXJzIGRlcml2ZWQgZnJvbSBpdCBhcmUgcHJvcGVybHkgaW52YWxpZGF0ZWQgYnkgdGhlIHZlcmlmaWVyLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgaW4gQlBGIHByb2dyYW1zLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nL2ZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIE1lbW9yeSBzYWZldHkgcmlza3MgcmVsYXRlZCB0byByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHZlcmlmaWVyIGNoZWNrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9hz99[1] Phase: Succeeded StartedAt: 2026-09-09 04:40:12 +0000 UTC FinishedAt: 2026-09-09 04:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 04:40:12 +0000 UTC FinishedAt: 2026-09-09 04:40:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2] Phase: Succeeded StartedAt: 2026-09-09 04:40:12 +0000 UTC FinishedAt: 2026-09-09 08:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:40:12 +0000 UTC FinishedAt: 2026-09-09 08:24:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:40:12 +0000 UTC FinishedAt: 2026-09-09 04:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:40:12 +0000 UTC FinishedAt: 2026-09-09 04:40:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9hz99/series-workflow9hz99-convert-artifact-2411298509/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:40:22 +0000 UTC FinishedAt: 2026-09-09 04:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:40:22 +0000 UTC FinishedAt: 2026-09-09 04:57:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e8bf5695-fa87-4b9d-a785-bb86d212330e,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-workflow9hz99/series-workflow9hz99-convert-artifact-2411298509/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": "4f4c3a1b-1725-496a-9a22-427c62c6163b", "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-workflow9hz99/series-workflow9hz99-build-action-296599363/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:40:22 +0000 UTC FinishedAt: 2026-09-09 04:57:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e8bf5695-fa87-4b9d-a785-bb86d212330e,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-workflow9hz99/series-workflow9hz99-convert-artifact-2411298509/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": "4f4c3a1b-1725-496a-9a22-427c62c6163b", "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-workflow9hz99/series-workflow9hz99-build-action-296599363/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:57:35 +0000 UTC FinishedAt: 2026-09-09 04:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:57:35 +0000 UTC FinishedAt: 2026-09-09 04:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:57:35 +0000 UTC FinishedAt: 2026-09-09 04:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:57:35 +0000 UTC FinishedAt: 2026-09-09 04:57:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-workflow9hz99/series-workflow9hz99-convert-artifact-2645945640/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:57:45 +0000 UTC FinishedAt: 2026-09-09 04:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:57:45 +0000 UTC FinishedAt: 2026-09-09 04:59:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4f4c3a1b-1725-496a-9a22-427c62c6163b,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-workflow9hz99/series-workflow9hz99-build-action-296599363/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-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:59:53 +0000 UTC FinishedAt: 2026-09-09 04:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:59:53 +0000 UTC FinishedAt: 2026-09-09 04:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:59:53 +0000 UTC FinishedAt: 2026-09-09 05:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:59:53 +0000 UTC FinishedAt: 2026-09-09 05:19:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e8bf5695-fa87-4b9d-a785-bb86d212330e,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-workflow9hz99/series-workflow9hz99-convert-artifact-2645945640/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": "e7eeac74-851a-4a20-bc45-19f3fc9bc4b0", "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-workflow9hz99/series-workflow9hz99-build-action-1291774676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 04:59:53 +0000 UTC FinishedAt: 2026-09-09 05:19:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e8bf5695-fa87-4b9d-a785-bb86d212330e,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-workflow9hz99/series-workflow9hz99-convert-artifact-2645945640/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": "e7eeac74-851a-4a20-bc45-19f3fc9bc4b0", "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-workflow9hz99/series-workflow9hz99-build-action-1291774676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:19:37 +0000 UTC FinishedAt: 2026-09-09 05:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:19:37 +0000 UTC FinishedAt: 2026-09-09 05:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:19:37 +0000 UTC FinishedAt: 2026-09-09 05:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:19:37 +0000 UTC FinishedAt: 2026-09-09 05:21:32 +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:*e7eeac74-851a-4a20-bc45-19f3fc9bc4b0,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-workflow9hz99/series-workflow9hz99-build-action-1291774676/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-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:42 +0000 UTC FinishedAt: 2026-09-09 08:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:42 +0000 UTC FinishedAt: 2026-09-09 08:24:25 +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":["check_kfunc_call","bpf_check"],"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:*4f4c3a1b-1725-496a-9a22-427c62c6163b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7eeac74-851a-4a20-bc45-19f3fc9bc4b0,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-workflow9hz99/series-workflow9hz99-build-action-296599363/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-workflow9hz99/series-workflow9hz99-build-action-1291774676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:42 +0000 UTC FinishedAt: 2026-09-09 05:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:42 +0000 UTC FinishedAt: 2026-09-09 05:21:45 +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":["check_kfunc_call","bpf_check"],"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-workflow9hz99/series-workflow9hz99-convert-artifact-3266296161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:42 +0000 UTC FinishedAt: 2026-09-09 05:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:42 +0000 UTC FinishedAt: 2026-09-09 05:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:42 +0000 UTC FinishedAt: 2026-09-09 05:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:52 +0000 UTC FinishedAt: 2026-09-09 08:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hz99[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_kfunc_call","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"3fa3a687-355f-4f1c-a56a-c10e7f21b42c","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-09 05:21:52 +0000 UTC FinishedAt: 2026-09-09 08:24:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4f4c3a1b-1725-496a-9a22-427c62c6163b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7eeac74-851a-4a20-bc45-19f3fc9bc4b0,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-workflow9hz99/series-workflow9hz99-build-action-296599363/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-workflow9hz99/series-workflow9hz99-build-action-1291774676/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-workflow9hz99/series-workflow9hz99-convert-artifact-3266296161/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,}