Name: series-workflow62ps2 Phase: Succeeded StartedAt: 2026-07-20 05:55:17 +0000 UTC FinishedAt: 2026-07-20 08:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[0] Phase: Succeeded StartedAt: 2026-07-20 05:55:17 +0000 UTC FinishedAt: 2026-07-20 06:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 05:55:17 +0000 UTC FinishedAt: 2026-07-20 06:15:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "cb9360ae6549120975f20887840fb33d47c13898", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "cb9360ae6549120975f20887840fb33d47c13898", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "1632846b-448e-4fb6-bf91-13fd6ba99eae" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_pmu_handle_mdcr", "kvm_vcpu_load_pmu", "kvm_pmu_create_perf_event_with_pmu", "kvm_arm_pmu_v3_set_pmu_fixed_counters_only", "kvm_arm_pmu_v3_set_nr_counters", "kvm_pmu_probe_armpmu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaGFuZGxlX21kY3ImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfcHJvYmVfYXJtcG11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gZmVhdHVyZSAoS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKSBhbmQgbW9kaWZpZXMgUE1VIGV2ZW50IGNyZWF0aW9uLCBsb2FkaW5nLCBhbmQgcmVsb2FkaW5nIGxvZ2ljLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbW9kaWZpZXMgY29yZSBLVk0gUE1VIGVtdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzYThjNzA3NGI1MGIxNjVhNTUxOTBmZTI5YmFjNjA0ZmFmMjZkZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwNjoxNDo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xZDU5MmU3MGJkZWEzZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5AQCAtNzQsNyAmIzQzOzc0LDggQEAgaXJxY2hpcC5cbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5YSU8gICBQTVV2MyBub3QgcHJvcGVybHkgY29uZmlndXJlZCBvciBpbi1rZXJuZWwgaXJxY2hpcCBub3RcbiBcdCBcdCAgY29uZmlndXJlZCBhcyByZXF1aXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgYXR0cmlidXRlXG4tXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXG4mIzQzO1x0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3JcbiYjNDM7XHRcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FSU5WQUwgIEludmFsaWQgZmlsdGVyIHJhbmdlXG4gXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMTE2LDE0ICYjNDM7MTE3LDE0IEBAIHVzaW5nIGV2ZW50IDB4MTEgKENQVV9DWUNMRVMpLlxuIFxuIDpSZXR1cm5zOlxuIFxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4tICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4mIzQzOyAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBvciBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxuIFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXG4gZm9yIHRoZSBwdXJwb3NlIG9mIFBNVSBlbXVsYXRpb24uIFRoZSBQTVUgaWRlbnRpZmllciBjYW4gYmUgcmVhZCBmcm9tIHRoZSBcJiMzNDt0eXBlXCYjMzQ7XG5AQCAtMTY1LDYgJiM0MzsxNjYsMjcgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxuIHNlbGVjdGVkIFBNVS4gU2VsZWN0aW5nIGEgbmV3IFBNVSBjYW5jZWxzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGlzXG4gYXR0cmlidXRlLlxuIFxuJiM0MzsxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0Mzs6UGFyYW1ldGVyczogbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4ga3ZtX2RldmljZV9hdHRyLmFkZHJcbiYjNDM7XG4mIzQzOzpSZXR1cm5zOlxuJiM0MztcbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1bixcbiYjNDM7XHRcdCAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yXG4mIzQzO1x0XHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXG4mIzQzO1x0IC1FTlhJTyAgIEF0dGVtcHRlZCB0byBnZXQgYmVmb3JlIHNldHRpbmdcbiYjNDM7XHQgLUVOT0RFViAgQXR0ZW1wdGVkIHRvIHNldCB3aGlsZSBQTVV2MyBub3Qgc3VwcG9ydGVkXG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztJZiBzZXQsIEtWTSBlbXVsYXRlcyBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy5cbiYjNDM7XG4mIzQzO1doZW4gdGhpcyBhdHRyaWJ1dGUgaXMgZW5hYmxlZCwgdGhlIHZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVXG4mIzQzO3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzXG4mIzQzO2F0dHJpYnV0ZSBpcyBWTS1zY29wZWQuXG4mIzQzO1xuIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYmFlMmM0ZjkyZWY1YzAuLjM5OThlNjZjNjU3MTUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0zNjcsNiAmIzQzOzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19XUklUQUJMRV9JTVBfSURfUkVHU1x0XHQxMFxuIFx0LyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqL1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQVx0XHRcdFx0MTFcbiYjNDM7XHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqL1xuJiM0MzsjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lUXHRcdFx0MTJcbiYjNDM7XHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDEzXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0LyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzNyw2ICYjNDM7NDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVx0NVxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcdFx0MVxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlx0XHQwXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXHRcdDFcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbmluZGV4IDE5OTVlMTE5ODY0OGU4Li5hNWFlNjI4MjA0YTEyMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXG5AQCAtMTAwNSw3ICYjNDM7MTAwNSw3IEBAIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VycmF0YVtdID0ge1xuIFx0e1xuIFx0XHQuZGVzYyA9IFwmIzM0O0FwcGxlIElNUERFRiBQTVV2MyBUcmFwc1wmIzM0OyxcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX1BNVVYzX0lNUERFRl9UUkFQUyxcbi1cdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfTE9DQUxfQ1BVX0VSUkFUVU0sXG4mIzQzO1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9FQVJMWV9MT0NBTF9DUFVfRkVBVFVSRSxcbiBcdFx0Lm1hdGNoZXMgPSBoYXNfaW1wZGVmX3BtdXYzLFxuIFx0XHQuY3B1X2VuYWJsZSA9IGNwdV9lbmFibGVfaW1wZGVmX3BtdXYzX3RyYXBzLFxuIFx0fSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uYTg2NmJlYjhkODczZDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC02NTEsNiAmIzQzOzY1MSw3IEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xuJiM0MztcdGludCBsYXN0X2NwdSA9IHZjcHUtXHUwMDNlY3B1O1xuIFx0aW50ICpsYXN0X3JhbjtcbiBcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbkBAIC03MDAsNiAmIzQzOzcwMSw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdGlmIChoYXNfdmhlKCkpXG4gXHRcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xuIFx0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUsIGxhc3RfY3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuIFx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG5AQCAtNzQ5LDcgJiM0Mzs3NTEsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcbiBcbiBcdHZjcHVfY2xlYXJfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuLVx0dmNwdS1cdTAwM2VjcHUgPSAtMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xNjUyLDI5ICYjNDM7MTY1MywyNiBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGluaXQtXHUwMDNlZmVhdHVyZXNbMF07XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV92Y3B1X2luaXRfY2hhbmdlZCh2Y3B1LCBpbml0KSlcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRiaXRtYXBfY29weShrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLCBcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcbiBcbiBcdHJldCA9IGt2bV9zZXR1cF92Y3B1KHZjcHUpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE5vdyB3ZSBrbm93IHdoYXQgaXQgaXMsIHdlIGNhbiByZXNldCBpdC4gKi9cbiBcdGt2bV9yZXNldF92Y3B1KHZjcHUpO1xuIFxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuIFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBWQ1BVX0lOSVRJQUxJWkVEKTtcbi1cdHJldCA9IDA7XG4tb3V0X3VubG9jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE2OTAsNiAmIzQzOzE2ODgsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1xuIFx0aWYgKCFrdm1fdmNwdV9pbml0aWFsaXplZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIF9fa3ZtX3ZjcHVfc2V0X3RhcmdldCh2Y3B1LCBpbml0KTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuaW5kZXggOTgzMDViYmZjMDk1YWIuLmZmNWQ1ZjY2YTljMDlmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuQEAgLTcsOSAmIzQzOzcsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZi9hcm1fcG11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiAmIzQzOzE3LDEzIEBAXG4gXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXHRCSVQoMClcbiBcbiYjNDM7I2RlZmluZSBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTS1x0KE1EQ1JfRUwyX0hQTU4gfCBNRENSX0VMMl9IUE1EIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBNRENSX0VMMl9ITFApXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBhcm1fcG11cyBpcyBhcHBlbmQtb25seS4ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkgZmVlZHMgcGVyc2lzdGVudFxuJiM0MzsgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suXG4mIzQzOyAqL1xuIHN0YXRpYyBMSVNUX0hFQUQoYXJtX3BtdXMpO1xuIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7XG4gXG5AQCAtMjYsNyAmIzQzOzMzLDYgQEAgc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gXG4gYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiB7XG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2YXJtX3BtdXMpO1xuIH1cbiBcbkBAIC04MCw2ICYjNDM7ODYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBtYXNrO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XG4gICogQHBtYzogY291bnRlciBjb250ZXh0XG5AQCAtMzE3LDE3ICYjNDM7MzI4LDIyIEBAIHU2NCBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTtcbiYjNDM7XHR1NjQgbiA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xuIFxuLVx0aWYgKHZhbCA9PSAwKVxuJiM0MztcdGlmIChuID09IDApXG4gXHRcdHJldHVybiBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBHRU5NQVNLKHZhbCAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuJiM0MztcdFx0cmV0dXJuIEdFTk1BU0sobiAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1fcG1jX2VuYWJsZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4ge1xuLVx0aWYgKCFwbWMtXHUwMDNlcGVyZl9ldmVudCkge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtYy1cdTAwM2VwZXJmX2V2ZW50IHx8XG4mIzQzO1x0ICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSxcbiYjNDM7XHRcdFx0ICAgICAgIFx1MDAyNnRvX2FybV9wbXUocG1jLVx1MDAzZXBlcmZfZXZlbnQtXHUwMDNlcG11KS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpKSB7XG4gXHRcdGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQocG1jKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTYwNiw2ICYjNDM7NjIyLDIxIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSFBNTiBkZXRlcm1pbmVzIHdoaWNoIGNvdW50ZXJzIEhQTUQgYW5kIEhMUCBhcHBseSB0by4gQ2hhbmdlcyB0b1xuJiM0MztcdCAqIHRoZXNlIGZpZWxkcyByZXF1aXJlIG5ldyBwZXJmIGV2ZW50IGZpbHRlcnMgYW5kIHNhbXBsZSBwZXJpb2RzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjaGFuZ2VkIFx1MDAyNiBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSylcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5wbXUuZXZlbnRzX25lZWRfcmVjcmVhdGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hhbmdlZCBcdTAwMjYgKE1EQ1JfRUwyX0hQTUUgfCBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSykpXG4mIzQzO1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbkBAIC02NDksMTAgJiM0Mzs2ODAsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiYjNDM7c3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3QgYXJtX3BtdSAqcG11LCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4ge1xuLVx0c3RydWN0IGFybV9wbXUgKnBtdSA9IGt2bS1cdTAwM2VhcmNoLmFybV9wbXU7XG4tXG4gXHQvKlxuIFx0ICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmdcbiBcdCAqIGZvciB0aGUgZ3Vlc3QmIzM5O3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDE0ICYjNDM7NjkyLDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4gXHRyZXR1cm4gZXZlbnRzZWw7XG4gfVxuIFxuLS8qKlxuLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcbi0gKiBAcG1jOiBDb3VudGVyIGNvbnRleHRcbi0gKi9cbi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUoaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuJiM0MztcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiYjNDM7XHRcdHBtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuJiM0MztcdFx0XHRyZXR1cm4gcG11O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUoc3RydWN0IGt2bV9wbWMgKnBtYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbi1cdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuIFx0c3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyO1xuIFx0aW50IGV2ZW50c2VsO1xuQEAgLTcwNCw3ICYjNDM7NzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0ICogRG9uJiMzOTt0IGNyZWF0ZSBhbiBldmVudCBpZiB3ZSYjMzk7cmUgcnVubmluZyBvbiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzXG4gXHQgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxuIFx0ICovXG4tXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KHZjcHUtXHUwMDNla3ZtLCBldmVudHNlbCk7XG4mIzQzO1x0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudChhcm1fcG11LCBldmVudHNlbCk7XG4gXHRpZiAoZXZlbnRzZWwgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbkBAIC03NDksNiAmIzQzOzc5MSwzMiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHRwbWMtXHUwMDNlcGVyZl9ldmVudCA9IGV2ZW50O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcbiYjNDM7ICogQHBtYzogQ291bnRlciBjb250ZXh0XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0YXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KFJFQURfT05DRSh2Y3B1LVx1MDAzZWNwdSkpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFhcm1fcG11KSB7XG4mIzQzO1x0XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O2t2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xuJiM0MztcdFx0fSB3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSwgXHUwMDI2YXJtX3BtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNzg5LDQzICYjNDM7ODU3LDcgQEAgdm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRlbnRyeS1cdTAwM2Vhcm1fcG11ID0gcG11O1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2YXJtX3BtdXMpO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KHZvaWQpXG4te1xuLVx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuLVx0c3RydWN0IGFybV9wbXUgKnBtdTtcbi1cdGludCBjcHU7XG4tXG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcbi1cdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4tXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuLVx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxuLVx0ICpcbi1cdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuLVx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXG4tXHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuLVx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2Vcbi1cdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxuLVx0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuLVx0ICpcbi1cdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxuLVx0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHkuIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZ1xuLVx0ICogY2FycmllZCBoZXJlLlxuLVx0ICovXG4tXHRjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4tXHRcdHBtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4tXG4tXHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXHUwMDI2cG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbi1cdFx0XHRyZXR1cm4gcG11O1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcbkBAIC04NzAsNiAmIzQzOzkwMiwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0dTY0IHZhbCwgbWFzayA9IDA7XG4gXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSGlkZSB0aGUgaGFyZHdhcmUgUE1VJiMzOTtzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXG4mIzQzO1x0ICogcGh5c2ljYWwgQ1BVIG1pZ3JhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGlmICghcG1jZWlkMSkge1xuIFx0XHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XG4gXHRcdGJhc2UgPSAwO1xuQEAgLTg5Nyw5ICYjNDM7OTM2LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHRyZXR1cm4gdmFsIFx1MDAyNiBtYXNrO1xuIH1cbiBcbiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSlcbiYjNDM7e1xuJiM0MztcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fCB2Y3B1LVx1MDAzZWNwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXG4mIzQzO1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bV9wbXUgKnBtdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wbXU7XG4gXHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGt2bV9wbXVfc3RvcF9jb3VudGVyKGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgaSkpO1xuJiM0MztcbiYjNDM7XHRcdHBtdS1cdTAwM2VldmVudHNfbmVlZF9yZWNyZWF0ZSA9IGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTU9WU1NFVF9FTDAsIFx1MDAyNj0sIG1hc2spO1xuIFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNSU5URU5TRVRfRUwxLCBcdTAwMjY9LCBtYXNrKTtcbkBAIC0xMDA4LDYgJiM0MzsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFxuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcbiBcdCAqIGV2ZW50LCB0aG91Z2ggdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9mIG5vbi1QTVV2MyBoYXJkd2FyZS5cbkBAIC0xMDIyLDMwICYjNDM7MTA4MiwxMiBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXHUwMDNlY250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucilcbi17XG4tXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcbi1cbi1cdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cyYjMzk7IGJhY2suLi4gKi9cbi1cdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcykpIHtcbi1cdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0XHR1bnNpZ25lZCBsb25nIGk7XG4tXG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuLVx0XHRcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4tXHRcdFx0dmFsIFx1MDAyNj0gfk1EQ1JfRUwyX0hQTU47XG4tXHRcdFx0dmFsIHw9IEZJRUxEX1BSRVAoTURDUl9FTDJfSFBNTiwga3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzKTtcbi1cdFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXHRcdH1cbi1cdH1cbi19XG4tXG4gc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRrdm0tXHUwMDNlYXJjaC5hcm1fcG11ID0gYXJtX3BtdTtcbi1cdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEwNjIsNyAmIzQzOzExMDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4gICovXG4gaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuJiM0MztcdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4mIzQzO1x0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbiYjNDM7XHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbiYjNDM7XHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbiYjNDM7XHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuJiM0MztcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4mIzQzO1x0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4mIzQzO1x0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4mIzQzO1x0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seVxuJiM0MztcdCAqIGVtdWxhdGlvbi4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nIGNhcnJpZWQgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFxuIFx0aWYgKCFhcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbkBAIC0xMDc5LDE3ICYjNDM7MTEzOCwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0aW50IHJldCA9IC1FTlhJTztcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4gXHRcdGFybV9wbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuIFx0XHRpZiAoYXJtX3BtdS1cdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcbiBcdFx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XG4mIzQzO1x0XHRcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxuIFx0XHRcdCAgICAoa3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xuIFx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHRcdFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XG4gXHRcdFx0Y3B1bWFza19jb3B5KGt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcbiBcdFx0XHRyZXQgPSAwO1xuQEAgLTEwOTcsMjEgJiM0MzsxMTU4LDM5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbiYjNDM7XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKG4gXHUwMDNlIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIG4pO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTE3NSw3ICYjNDM7MTI1NCw3IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdCAgICAgZmlsdGVyLmFjdGlvbiAhPSBLVk1fUE1VX0VWRU5UX0RFTlkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxuJiM0MztcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIpIHtcbkBAIC0xMjIwLDYgJiM0MzsxMjk5LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbiYjNDM7XHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDpcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7XG4gXHR9XG5AQCAtMTI0Niw2ICYjNDM7MTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdGlycSA9IHZjcHUtXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcbiBcdFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xuIFx0fVxuJiM0MztcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuJiM0MztcdFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xMjU5LDYgJiM0MzsxMzQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVI6XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVTpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6XG4mIzQzO1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4gXHRcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uNmJmYjIxZjAwNDQ0MjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5AQCAtMTkwLDcgJiM0MzsxOTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xuLVx0Ym9vbCBsb2FkZWQ7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nO1xuJiM0MztcdGJvb2wgbG9hZGVkID0gZmFsc2U7XG4gXHR1MzIgcHN0YXRlO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbkBAIC0xOTgsMTAgJiM0MzsxOTksMTYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2Y3B1LVx1MDAzZWFyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHByZWVtcHRfZGlzYWJsZSgpO1xuLVx0bG9hZGVkID0gKHZjcHUtXHUwMDNlY3B1ICE9IC0xKTtcbi1cdGlmIChsb2FkZWQpXG4mIzQzO1x0Z3VhcmQocHJlZW1wdCkoKTtcbiYjNDM7XG4mIzQzO1x0cnVubmluZyA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdGlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0bG9hZGVkID0gdHJ1ZTtcbiBcdFx0a3ZtX2FyY2hfdmNwdV9wdXQodmNwdSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkge1xuIFx0XHRpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSlcbkBAIC0yNjksNyAmIzQzOzI3Niw2IEBAIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0aWYgKGxvYWRlZClcbiBcdFx0a3ZtX2FyY2hfdmNwdV9sb2FkKHZjcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4tXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiBcbiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjllOTA1ZDliZTlmNjdlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTMwMjAsMTcgJiM0MzszMDIwLDIyIEBAIHN0YXRpYyBib29sIGFjY2Vzc19tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcbi1cbi1cdC8qXG4tXHQgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzXG4tXHQgKiBhZmZlY3RlZCBieSBIUE1FLlxuLVx0ICovXG4tXHRpZiAoKG9sZCBeIHZhbCkgXHUwMDI2IE1EQ1JfRUwyX0hQTUUpXG4tXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7XHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxuJiM0MztcdFx0ICAgIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xuJiM0MztcbiYjNDM7XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4mIzQzO1x0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbkBAIC0zMTc3LDggJiM0MzszMTgyLDEzIEBAIHN0YXRpYyBpbnQgc2V0X2ltcF9pZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLFxuIFxuIHN0YXRpYyB1NjQgcmVzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG4ge1xuLVx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4mIzQzO1x0dTY0IG9sZCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnKTtcbiYjNDM7XHR1NjQgdmFsID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4mIzQzO1xuJiM0MztcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZywgdmFsKTtcbiYjNDM7XHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gLypcbkBAIC0zNzQxLDcgJiM0MzszNzUxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXG4gXHRcdFx0IHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcbi1cdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcbiYjNDM7XHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcbiYjNDM7XHRcdFx0ICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSxcbiBcdEVMMl9SRUdfVk5DUihIU1RSX0VMMiwgcmVzZXRfdmFsLCAwKSxcbiBcdEVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbmluZGV4IGI1ZTU5NDIyMDRmYzY5Li4wYzMxYjcyZTM0MzVhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RydWN0IGt2bV9wbXUge1xuIFx0c3RydWN0IGt2bV9wbWMgcG1jW0tWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTXTtcbiBcdGludCBpcnFfbnVtO1xuIFx0Ym9vbCBjcmVhdGVkO1xuJiM0MztcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTYsOCAmIzQzOzU3LDEwIEBAIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiYjNDM7dm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSxcbiBcdFx0XHRcdCAgICB1NjQgc2VsZWN0X2lkeCk7XG4mIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpO1xuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuQEAgLTEzMyw2ICYjNDM7MTM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgdTY0IGRhdGEsIHU2NCBzZWxlY3RfaWR4KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbkBAIC0xNjMsNiAmIzQzOzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV91cGRhdGVfdmNwdV9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDFjMTNiZmEyZDM4YWFkLi4zOWExYTFlNDEyZTY2ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcdFx0MlxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcdFx0M1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuJiM0MzsjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuaW5kZXggZGRmODFmMjQ5NTZiYTAuLjFjNjMzMzQzZDU3NjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmhcbkBAIC0xNDIsMzIgJiM0MzsxNDIsMzIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgZmllbGRfbWFzayh1NjQgZmllbGQpXG4gXHRyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcbiB9XG4gI2RlZmluZSBmaWVsZF9tYXgoZmllbGQpXHQoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpXG4tI2RlZmluZSBfX19fTUFLRV9PUCh0eXBlLGJhc2UsdG8sZnJvbSlcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXHRcXFxuJiM0MzsjZGVmaW5lIF9fX19NQUtFX09QKG5hbWUsdHlwZSxiYXNlLHRvLGZyb20pXHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXHUwMDI2XHUwMDI2ICh2IFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVx0XFxcbiBcdFx0X19maWVsZF9vdmVyZmxvdygpO1x0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIHRvKCh2IFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XHRcXFxuIH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsXHRcXFxuLVx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsXHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHJldHVybiAob2xkIFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4mIzQzO1x0cmV0dXJuIChvbGQgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXHRcdFxcXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBuYW1lIyNwX3JlcGxhY2VfYml0cyh0eXBlICpwLFx0XHRcXFxuIFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4mIzQzO1x0KnAgPSAoKnAgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgdHlwZSMjX2dldF9iaXRzKF9fIyN0eXBlIHYsIGJhc2UgZmllbGQpXHRcXFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRyZXR1cm4gKGZyb20odikgXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcdFx0XFxcbiB9XG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcbi1fX19fTUFLRV9PUCh1OCx1OCwsKVxuJiM0MzsjZGVmaW5lIF9fTUFLRV9PUChzaXplKVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19fX01BS0VfT1AobGUjI3NpemUsX19sZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4mIzQzO1x0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4mIzQzO1x0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLHUjI3NpemUsLClcbiYjNDM7X19fX01BS0VfT1AodTgsdTgsdTgsLClcbiBfX01BS0VfT1AoMTYpXG4gX19NQUtFX09QKDMyKVxuIF9fTUFLRV9PUCg2NClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuaW5kZXggMjIyMjMzOTU5NjllMGYuLmI1ZjhjZThkMzQ1MWYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuQEAgLTI1LDYgJiM0MzsyNSwxNCBAQFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0JiMzOTtzIGNvbW1vbiBhbW9uZyB0aGUgUE1VIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFx0XHQzMVxuIFxuJiM0MzsjaWZuZGVmIE1EQ1JfRUwyX0hQTU5cbiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1OXHRcdFx0R0VOTUFTS19VTEwoNCwgMClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcbiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1FXHRcdFx0QklUX1VMTCg3KVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RydWN0IHZwbXVfdm0ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtNDAzLDEyICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuIFx0dTggcG11dmVyLCBlYztcbi1cdHU2NCBkZnIwLCBpcnEgPSAyMztcbi1cdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgaXJxX2F0dHIgPSB7XG4tXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbi1cdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSxcbi1cdFx0LmFkZHIgPSAodTY0KVx1MDAyNmlycSxcbi1cdH07XG4mIzQzO1x0dTY0IGRmcjA7XG4gXG4gXHQvKiBUaGUgdGVzdCBjcmVhdGVzIHRoZSB2cG11X3ZtIG11bHRpcGxlIHRpbWVzLiBFbnN1cmUgYSBjbGVhbiBzdGF0ZSAqL1xuIFx0bWVtc2V0KFx1MDAyNnZwbXVfdm0sIDAsIHNpemVvZih2cG11X3ZtKSk7XG5AQCAtNDM0LDggJiM0Mzs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIFx0VEVTVF9BU1NFUlQocG11dmVyICE9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBtdXZlciBcdTAwM2U9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLFxuIFx0XHQgICAgXCYjMzQ7VW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcJiMzNDssIHBtdXZlcik7XG4tXG4tXHR2Y3B1X2lvY3RsKHZwbXVfdm0udmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXHUwMDI2aXJxX2F0dHIpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZClcbkBAIC00NjEsMTUgJiM0Mzs0NjIsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZClcbiYjNDM7e1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1bnNpZ25lZCBpbnQgcHJldjtcbiBcdGludCByZXQ7XG4gXG4tXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbi1cdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4tXG4gXHRwcmV2ID0gZ2V0X3BtY3Jfbih2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX1BNQ1JfRUwwKSkpO1xuIFxuIFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG5AQCAtNDgxLDYgJiM0Mzs0ODQsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuIFx0XHRcdCAgICBucl9jb3VudGVycywgcHJldik7XG4gXHRlbHNlXG4gXHRcdFRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZXhwZWN0X2ZhaWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbiYjNDM7XHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XG4mIzQzO1x0c2V0X25yX2NvdW50ZXJzKHZjcHUsIG5yX2NvdW50ZXJzLCBleHBlY3RfZmFpbCk7XG4gXG4gXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4gfVxuQEAgLTQ4OSwxNSAmIzQzOzUxMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1XFxuXCYjMzQ7LCBwbWNyX24pO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG5AQCAtNTMxLDE0ICYjNDM7NTU0LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0ge1xuICAqIENyZWF0ZSBhIFZNLCBhbmQgY2hlY2sgaWYgS1ZNIGhhbmRsZXMgdGhlIHVzZXJzcGFjZSBhY2Nlc3NlcyBvZlxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbiYjNDM7XHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XG4gXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuIFxuIFx0dmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7XG5AQCAtNTgzLDE2ICYjNDM7NjA2LDk0IEBAIHN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuIFx0ZGVzdHJveV92cG11X3ZtKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4mIzQzO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O01EQ1JfRUwyIHRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0IHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7XG4mIzQzO1xuJiM0MztcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuJiM0MztcdGlmICghdm1fc3VwcG9ydHNfZWwyKHZwbXVfdm0udm0pKSB7XG4mIzQzO1x0XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxuJiM0MztcdFx0XHRcdFx0IE1EQ1JfRUwyX0hQTU4pO1xuJiM0MztcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxuJiM0MztcdFx0ICAgICBleHBlY3RlZF9tZGNyKTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4mIzQzO1x0XHQgICAgXCYjMzQ7TURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTU4gd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuJiM0MztcbiYjNDM7XHRpZiAoZml4ZWRfY291bnRlcnNfb25seSkge1xuJiM0MztcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuJiM0MztcdFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNldF9ucl9jb3VudGVycyh2Y3B1LCBwbWNyX24sIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4mIzQzO1x0XHQgICAgXCYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwmIzM0OyxcbiYjNDM7XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4mIzQzO1x0XHQgICAgXCYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfSU5JVCAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1xuJiM0MztcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcbiYjNDM7XHR2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSxcbiYjNDM7XHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1FIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwmIzM0OyxcbiYjNDM7XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFx1MDAyNmluaXQpO1xuJiM0MztcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuJiM0MztcdGFhcmNoNjRfdmNwdV9zZXR1cCh2Y3B1LCBcdTAwMjZpbml0KTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikgPT0gcG1jcl9uLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyLkhQTU4gaXMgbm90IHJlc2V0IGFmdGVyIElOSVQgKGV4cGVjdGVkICVsdSwgZ290ICVsdSlcJiMzNDssXG4mIzQzO1x0XHQgICAgcG1jcl9uLCBGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikpO1xuJiM0MztcbiYjNDM7XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIGFuZCBhdHRlbXB0IHRvIHNldCB0aGUgUE1DUl9FTDAuTiBmb3JcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cbiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxuJiM0MztzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0cHJfZGVidWcoXCYjMzQ7RXJyb3IgdGVzdCB3aXRoIHBtY3JfbiAlbHUgKGxhcmdlciB0aGFuIHRoZSBob3N0KVxcblwmIzM0OywgcG1jcl9uKTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIHRydWUpO1xuIFx0ZGVzdHJveV92cG11X3ZtKCk7XG4gfVxuIFxuQEAgLTYyMiwyMiAmIzQzOzcyMywxNDcgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcbiBcdHJldHVybiBzdXBwb3J0ZWQ7XG4gfVxuIFxuLWludCBtYWluKHZvaWQpXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKHZvaWQpXG4ge1xuLVx0dTY0IGksIHBtY3JfbjtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdSwgKnN0b3BwZWRfdmNwdTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMgPSAwO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlKDIpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFx1MDAyNmluaXQpO1xuJiM0MztcdGluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuJiM0MztcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1x0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2bnJfY291bnRlcnMpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbi1cdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcbi1cdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGk7XG4gXG4tXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gcG1jcl9uOyBpJiM0MzsmIzQzOykge1xuLVx0XHRydW5fYWNjZXNzX3Rlc3QoaSk7XG4tXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTtcbiYjNDM7XHRcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7XHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7XHRcdHJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gcG1jcl9uICYjNDM7IDE7IGkgXHUwMDNjIEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkmIzQzOyYjNDM7KVxuLVx0XHRydW5fZXJyb3JfdGVzdChpKTtcbiYjNDM7XHRcdHJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4mIzQzO1xuJiM0MztcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuJiM0MztcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4mIzQzO1x0XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0hBU19ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1x0XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSBzdWNjZWVkcy4gKi9cbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHNldC4gKi9cbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuJiM0MztcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcdTAwMjZmaWx0ZXIpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYW4gZXZlbnQgZmlsdGVyIGhhc1xuJiM0MztcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdGRlc3Ryb3lfdnBtdV92bSgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbiYjNDM7XHQgKiByZXN1bHRzIGluIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHZtID0gdm1fY3JlYXRlKDIpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFx1MDAyNmluaXQpO1xuJiM0MztcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuJiM0MztcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiYjNDM7XHR2Y3B1X3J1bihydW5uaW5nX3ZjcHUpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2NvbmZpZygwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bigpO1xuJiM0MztcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xuJiM0MztcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaGFuZGxlX21kY3ImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfcHJvYmVfYXJtcG11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gZmVhdHVyZSAoS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKSBhbmQgbW9kaWZpZXMgUE1VIGV2ZW50IGNyZWF0aW9uLCBsb2FkaW5nLCBhbmQgcmVsb2FkaW5nIGxvZ2ljLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbW9kaWZpZXMgY29yZSBLVk0gUE1VIGVtdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTNhOGM3MDc0YjUwYjE2NWE1NTE5MGZlMjliYWM2MDRmYWYyNmRlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDA2OjE0OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xZDU5MmU3MGJkZWEzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdApAQCAtNzQsNyAmIzQzOzc0LDggQEAgaXJxY2hpcC4KIAkgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkCiAJIC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdAogCSAJICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGUKLQkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yCiYjNDM7CQkgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2UKIAkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTExNiwxNCAmIzQzOzExNywxNCBAQCB1c2luZyBldmVudCAweDExIChDUFVfQ1lDTEVTKS4KIAogOlJldHVybnM6CiAKLQkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvcgotICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllcgogCSAtRU5YSU8gICBQTVUgbm90IGZvdW5kCiAJIC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZAogCSAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Ci0JID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzCiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlICYjMzQ7dHlwZSYjMzQ7CkBAIC0xNjUsNiAmIzQzOzE2NiwyNyBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlCiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpcwogYXR0cmlidXRlLgogCiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyCiYjNDM7CiYjNDM7OlJldHVybnM6CiYjNDM7CiYjNDM7CSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biwKJiM0MzsJCSAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yCiYjNDM7CQkgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkCiYjNDM7CSAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nCiYjNDM7CSAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWQKJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuCiYjNDM7CiYjNDM7V2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBlbmFibGVkLCB0aGUgdkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUKJiM0Mzt0aGF0IGhhcyBhIFBNVSwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gVGhpcwomIzQzO2F0dHJpYnV0ZSBpcyBWTS1zY29wZWQuCiYjNDM7CiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYmFlMmM0ZjkyZWY1YzAuLjM5OThlNjZjNjU3MTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0zNjcsNiAmIzQzOzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTCQkxMAogCS8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQQkJCQkxMQomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQJCQkxMgomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQkxMwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBWTS13aWRlIHZDUFUgZmVhdHVyZSBzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDcgQEAgZW51bSB7CiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIJCTIKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVUJCTMKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUwk0CiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQk1CiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMCQkxCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVIJCTAKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUgkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCmluZGV4IDE5OTVlMTE5ODY0OGU4Li5hNWFlNjI4MjA0YTEyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYwpAQCAtMTAwNSw3ICYjNDM7MTAwNSw3IEBAIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VycmF0YVtdID0gewogCXsKIAkJLmRlc2MgPSAmIzM0O0FwcGxlIElNUERFRiBQTVV2MyBUcmFwcyYjMzQ7LAogCQkuY2FwYWJpbGl0eSA9IEFSTTY0X1dPUktBUk9VTkRfUE1VVjNfSU1QREVGX1RSQVBTLAotCQkudHlwZSA9IEFSTTY0X0NQVUNBUF9MT0NBTF9DUFVfRVJSQVRVTSwKJiM0MzsJCS50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLAogCQkubWF0Y2hlcyA9IGhhc19pbXBkZWZfcG11djMsCiAJCS5jcHVfZW5hYmxlID0gY3B1X2VuYWJsZV9pbXBkZWZfcG11djNfdHJhcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKaW5kZXggNTBhZGZmZjc1YmU4MmUuLmE4NjZiZWI4ZDg3M2QzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwpAQCAtNjUxLDYgJiM0Mzs2NTEsNyBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11OwomIzQzOwlpbnQgbGFzdF9jcHUgPSB2Y3B1LSZndDtjcHU7CiAJaW50ICpsYXN0X3JhbjsKIAogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKQEAgLTcwMCw2ICYjNDM7NzAxLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCWlmIChoYXNfdmhlKCkpCiAJCWt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpOwogCWt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpOwogCWt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpOwogCWlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwpAQCAtNzQ5LDcgJiM0Mzs3NTEsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7CiAKIAl2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKLQl2Y3B1LSZndDtjcHUgPSAtMTsKIH0KIAogc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE2NTIsMjkgJiM0MzsxNjUzLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIHsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC0mZ3Q7ZmVhdHVyZXNbMF07CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwotCWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJaWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncykgJmFtcDsmYW1wOwogCSAgICBrdm1fdmNwdV9pbml0X2NoYW5nZWQodmNwdSwgaW5pdCkpCi0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCiAJYml0bWFwX2NvcHkoa3ZtLSZndDthcmNoLnZjcHVfZmVhdHVyZXMsICZhbXA7ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7CiAKIAlyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqLwogCWt2bV9yZXNldF92Y3B1KHZjcHUpOwogCiAJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCXZjcHVfc2V0X2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7Ci0JcmV0ID0gMDsKLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE2OTAsNiAmIzQzOzE2ODgsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKQogCQlyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYwppbmRleCA5ODMwNWJiZmMwOTVhYi4uZmY1ZDVmNjZhOWMwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYwpAQCAtNyw5ICYjNDM7Nyw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmYvYXJtX3BtdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fZW11bGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2t2bS9hcm1fcG11LmgmZ3Q7CkBAIC0xNyw2ICYjNDM7MTcsMTMgQEAKIAogI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUCUJJVCgwKQogCiYjNDM7I2RlZmluZSBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSwkoTURDUl9FTDJfSFBNTiB8IE1EQ1JfRUwyX0hQTUQgfCBcCiYjNDM7CQkJCQkgTURDUl9FTDJfSExQKQomIzQzOwomIzQzOy8qCiYjNDM7ICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnQKJiM0MzsgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suCiYjNDM7ICovCiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7CiAKQEAgLTI2LDcgJiM0MzszMyw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpOwogCiBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQogewotCWd1YXJkKG11dGV4KSgmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiAhbGlzdF9lbXB0eSgmYW1wO2FybV9wbXVzKTsKIH0KIApAQCAtODAsNiAmIzQzOzg2LDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pCiAJcmV0dXJuIG1hc2s7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdAogICogQHBtYzogY291bnRlciBjb250ZXh0CkBAIC0zMTcsMTcgJiM0MzszMjgsMjIgQEAgdTY0IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTsKJiM0MzsJdTY0IG4gPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzOwogCi0JaWYgKHZhbCA9PSAwKQomIzQzOwlpZiAobiA9PSAwKQogCQlyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpOwogCWVsc2UKLQkJcmV0dXJuIEdFTk1BU0sodmFsIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiYjNDM7CQlyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKLQlpZiAoIXBtYy0mZ3Q7cGVyZl9ldmVudCkgewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKJiM0MzsKJiM0MzsJaWYgKCFwbWMtJmd0O3BlcmZfZXZlbnQgfHwKJiM0MzsJICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtJmd0O2NwdSksCiYjNDM7CQkJICAgICAgICZhbXA7dG9fYXJtX3BtdShwbWMtJmd0O3BlcmZfZXZlbnQtJmd0O3BtdSktJmd0O3N1cHBvcnRlZF9jcHVzKSkpIHsKIAkJa3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpOwogCQlyZXR1cm47CiAJfQpAQCAtNjA2LDYgJiM0Mzs2MjIsMjEgQEAgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkKIAl9CiB9CiAKJiM0Mzt2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJdTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG8KJiM0MzsJICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSykKJiM0MzsJCXZjcHUtJmd0O2FyY2gucG11LmV2ZW50c19uZWVkX3JlY3JlYXRlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGNoYW5nZWQgJmFtcDsgKE1EQ1JfRUwyX0hQTUUgfCBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSykpCiYjNDM7CQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKQEAgLTY0OSwxMCAmIzQzOzY4MCw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgJmFtcDsgQVJNVjhfUE1VX0lOQ0xVREVfRUwyOwogfQogCi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQomIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQogewotCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKLQogCS8qCiAJICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmcKIAkgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELgpAQCAtNjYzLDE0ICYjNDM7NjkyLDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpCiAJcmV0dXJuIGV2ZW50c2VsOwogfQogCi0vKioKLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXIKLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dAotICovCi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpCiYjNDM7c3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdShpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqcG11OwomIzQzOwomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewomIzQzOwkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7CiYjNDM7CiYjNDM7CQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZhbXA7cG11LSZndDtzdXBwb3J0ZWRfY3B1cykpCiYjNDM7CQkJcmV0dXJuIHBtdTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwotCXN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmFybV9wbXU7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAlpbnQgZXZlbnRzZWw7CkBAIC03MDQsNyAmIzQzOzc0Niw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIAkgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMKIAkgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLgogCSAqLwotCWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS0mZ3Q7a3ZtLCBldmVudHNlbCk7CiYjNDM7CWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpOwogCWlmIChldmVudHNlbCAmbHQ7IDApCiAJCXJldHVybjsKIApAQCAtNzQ5LDYgJiM0Mzs3OTEsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXBtYy0mZ3Q7cGVyZl9ldmVudCA9IGV2ZW50OwogfQogCiYjNDM7LyoqCiYjNDM7ICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlcgomIzQzOyAqIEBwbWM6IENvdW50ZXIgY29udGV4dAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11OwomIzQzOwomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCWRvIHsKJiM0MzsJCQlhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtJmd0O2NwdSkpOwomIzQzOwomIzQzOwkJCWlmICghYXJtX3BtdSkgewomIzQzOwkJCQlwcl93YXJuX29uY2UoJiMzNDtrdm06IFVuc3VwcG9ydGVkIFBNVSB2YXJpYXRpb24gZGV0ZWN0ZWQuXG4mIzM0Oyk7CiYjNDM7CQkJCWFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTsKJiM0MzsJCX0gd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KFJFQURfT05DRSh2Y3B1LSZndDtjcHUpLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudAogICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXIKQEAgLTc4OSw0MyAmIzQzOzg1Nyw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSkKIAkJcmV0dXJuOwogCiAJZW50cnktJmd0O2FybV9wbXUgPSBwbXU7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO2VudHJ5LSZndDtlbnRyeSwgJmFtcDthcm1fcG11cyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZCkKLXsKLQlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGFybV9wbXUgKnBtdTsKLQlpbnQgY3B1OwotCi0JZ3VhcmQobXV0ZXgpKCZhbXA7YXJtX3BtdXNfbG9jayk7Ci0KLQkvKgotCSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCi0JICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmQKLQkgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZAotCSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KLQkgKgotCSAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZQotCSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQotCSAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlCi0JICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2UKLQkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKLQkgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuCi0JICoKLQkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKLQkgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nCi0JICogY2FycmllZCBoZXJlLgotCSAqLwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKLQkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7Ci0KLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmYW1wO3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQotCQkJcmV0dXJuIHBtdTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKJiM0MzsJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtlbnRyeS0mZ3Q7ZW50cnksICZhbXA7YXJtX3BtdXMpOwogfQogCiBzdGF0aWMgdTY0IF9fY29tcHV0ZV9wbWNlaWQoc3RydWN0IGFybV9wbXUgKnBtdSwgYm9vbCBwbWNlaWQxKQpAQCAtODcwLDYgJiM0Mzs5MDIsMTMgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSkKIAl1NjQgdmFsLCBtYXNrID0gMDsKIAlpbnQgYmFzZSwgaSwgbnJfZXZlbnRzOwogCiYjNDM7CS8qCiYjNDM7CSAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSYjMzk7cyBldmVudCBzZXQgdG8ga2VlcCBQTUNFSUQgc3RhYmxlIGFjcm9zcwomIzQzOwkgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwbWNlaWQxKSB7CiAJCXZhbCA9IGNvbXB1dGVfcG1jZWlkMChjcHVfcG11KTsKIAkJYmFzZSA9IDA7CkBAIC04OTcsOSAmIzQzOzkzNiwyNyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogCXJldHVybiB2YWwgJmFtcDsgbWFzazsKIH0KIAomIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpCiYjNDM7ewomIzQzOwlpZiAoIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pIHx8IHZjcHUtJmd0O2NwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtJmd0O2NwdSkgIT0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUobGFzdF9jcHUpKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fcG11ICpwbXUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gucG11OwogCXU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAocG11LSZndDtldmVudHNfbmVlZF9yZWNyZWF0ZSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTsKJiM0MzsKJiM0MzsJCXBtdS0mZ3Q7ZXZlbnRzX25lZWRfcmVjcmVhdGUgPSBmYWxzZTsKJiM0MzsJfQogCiAJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgJmFtcDs9LCBtYXNrKTsKIAlfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsICZhbXA7PSwgbWFzayk7CkBAIC0xMDA4LDYgJiM0MzsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKIAomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAkvKgogCSAqIFBNVXYzIHJlcXVpcmVzIHRoYXQgYWxsIGV2ZW50IGNvdW50ZXJzIGFyZSBjYXBhYmxlIG9mIGNvdW50aW5nIGFueQogCSAqIGV2ZW50LCB0aG91Z2ggdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9mIG5vbi1QTVV2MyBoYXJkd2FyZS4KQEAgLTEwMjIsMzAgJiM0MzsxMDgyLDEyIEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKQogCXJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtJmd0O2NudHJfbWFzaywgQVJNVjhfUE1VX01BWF9HRU5FUkFMX0NPVU5URVJTKTsKIH0KIAotc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnIpCi17Ci0Ja3ZtLSZndDthcmNoLm5yX3BtdV9jb3VudGVycyA9IG5yOwotCi0JLyogUmVzZXQgTURDUl9FTDIuSFBNTiBiZWhpbmQgdGhlIHZjcHVzJiMzOTsgYmFjay4uLiAqLwotCWlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLSZndDthcmNoLnZjcHVfZmVhdHVyZXMpKSB7Ci0JCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQkJdW5zaWduZWQgbG9uZyBpOwotCi0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewotCQkJdTY0IHZhbCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyKTsKLQkJCXZhbCAmYW1wOz0gfk1EQ1JfRUwyX0hQTU47Ci0JCQl2YWwgfD0gRklFTERfUFJFUChNRENSX0VMMl9IUE1OLCBrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzKTsKLQkJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTsKLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpCiB7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlrdm0tJmd0O2FyY2guYXJtX3BtdSA9IGFybV9wbXU7Ci0Ja3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpOwomIzQzOwlrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzID0ga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pOwogfQogCiAvKioKQEAgLTEwNjIsNyAmIzQzOzExMDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpCiAgKi8KIGludCBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdShzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0Jc3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSgpOwomIzQzOwkvKgomIzQzOwkgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhcwomIzQzOwkgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZAomIzQzOwkgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZAomIzQzOwkgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uCiYjNDM7CSAqCiYjNDM7CSAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZQomIzQzOwkgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVUKJiM0MzsJICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGUKJiM0MzsJICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2UKJiM0MzsJICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0CiYjNDM7CSAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy4KJiM0MzsJICoKJiM0MzsJICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJCiYjNDM7CSAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LCBvciByZXF1ZXN0IGZpeGVkLWNvdW50ZXJzLW9ubHkKJiM0MzsJICogZW11bGF0aW9uLiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcgY2FycmllZCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWlmICghYXJtX3BtdSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDc5LDE3ICYjNDM7MTEzOCwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKQogCWludCByZXQgPSAtRU5YSU87CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQltdXRleF9sb2NrKCZhbXA7YXJtX3BtdXNfbG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewogCQlhcm1fcG11ID0gZW50cnktJmd0O2FybV9wbXU7CiAJCWlmIChhcm1fcG11LSZndDtwbXUudHlwZSA9PSBwbXVfaWQpIHsKIAkJCWlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwKJiM0MzsJCQkgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHwKIAkJCSAgICAoa3ZtLSZndDthcmNoLnBtdV9maWx0ZXIgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkgewogCQkJCXJldCA9IC1FQlVTWTsKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCXNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKIAkJCWt2bV9hcm1fc2V0X3BtdShrdm0sIGFybV9wbXUpOwogCQkJY3B1bWFza19jb3B5KGt2bS0mZ3Q7YXJjaC5zdXBwb3J0ZWRfY3B1cywgJmFtcDthcm1fcG11LSZndDtzdXBwb3J0ZWRfY3B1cyk7CiAJCQlyZXQgPSAwOwpAQCAtMTA5NywyMSAmIzQzOzExNTgsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZCkKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS0mZ3Q7YXJjaC5wbXVfZmlsdGVyIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncyk7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoIWt2bS0mZ3Q7YXJjaC5hcm1fcG11KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuICZndDsga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgbik7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSBuOwogCXJldHVybiAwOwogfQogCkBAIC0xMTc1LDcgJiM0MzsxMjU0LDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAkJICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJaWYgKCFrdm0tJmd0O2FyY2gucG11X2ZpbHRlcikgewpAQCAtMTIyMCw2ICYjNDM7MTI5OSw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTsKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDoKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7CiAJfQpAQCAtMTI0Niw2ICYjNDM7MTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAJCWlycSA9IHZjcHUtJmd0O2FyY2gucG11LmlycV9udW07CiAJCXJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU5YSU87CkBAIC0xMjU5LDYgJiM0MzsxMzQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgogCQlpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSkKIAkJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jCmluZGV4IGI5NjNmZDk3NWFhY2FmLi42YmZiMjFmMDA0NDQyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jCkBAIC0xOTAsNyAmIzQzOzE5MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3Jlc2V0X3N2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSByZXNldF9zdGF0ZTsKLQlib29sIGxvYWRlZDsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpydW5uaW5nOwomIzQzOwlib29sIGxvYWRlZCA9IGZhbHNlOwogCXUzMiBwc3RhdGU7CiAKIAlzcGluX2xvY2soJmFtcDt2Y3B1LSZndDthcmNoLm1wX3N0YXRlX2xvY2spOwpAQCAtMTk4LDEwICYjNDM7MTk5LDE2IEBAIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXZjcHUtJmd0O2FyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTsKIAlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2gubXBfc3RhdGVfbG9jayk7CiAKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlsb2FkZWQgPSAodmNwdS0mZ3Q7Y3B1ICE9IC0xKTsKLQlpZiAobG9hZGVkKQomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlydW5uaW5nID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCWlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQlsb2FkZWQgPSB0cnVlOwogCQlrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTsKJiM0MzsJfQogCiAJaWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkgewogCQlpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSkKQEAgLTI2OSw3ICYjNDM7Mjc2LDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlpZiAobG9hZGVkKQogCQlrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCmluZGV4IDVkNWM1NzlkNDU3OTAyLi45ZTkwNWQ5YmU5ZjY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCkBAIC0zMDIwLDE3ICYjNDM7MzAyMCwyMiBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogCiAJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpOwotCi0JLyoKLQkgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzCi0JICogYWZmZWN0ZWQgYnkgSFBNRS4KLQkgKi8KLQlpZiAoKG9sZCBeIHZhbCkgJmFtcDsgTURDUl9FTDJfSFBNRSkKLQkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzOwlrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTsKIAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAomIzQzOwkJICAgIHU2NCB2YWwpCiYjNDM7ewomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpOwomIzQzOwomIzQzOwlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7CiYjNDM7CWt2bV9wbXVfaGFuZGxlX21kY3IodmNwdSwgb2xkLCB2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBhY2Nlc3NfcmFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJICAgICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCkBAIC0zMTc3LDggJiM0MzszMTgyLDEzIEBAIHN0YXRpYyBpbnQgc2V0X2ltcF9pZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLAogCiBzdGF0aWMgdTY0IHJlc2V0X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewotCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMpOwotCXJldHVybiB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzOwomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci0mZ3Q7cmVnKTsKJiM0MzsJdTY0IHZhbCA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnM7CiYjNDM7CiYjNDM7CV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCk7CiYjNDM7CWt2bV9wbXVfaGFuZGxlX21kY3IodmNwdSwgb2xkLCB2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwogfQogCiAvKgpAQCAtMzc0MSw3ICYjNDM7Mzc1MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHsKIAlFTDJfUkVHX0ZJTFRFUkVEKFNDVExSMl9FTDIsIGFjY2Vzc192bV9yZWcsIHJlc2V0X3ZhbCwgMCwKIAkJCSBzY3RscjJfZWwyX3Zpc2liaWxpdHkpLAogCUVMMl9SRUdfVk5DUihIQ1JfRUwyLCByZXNldF9oY3IsIDApLAotCUVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSwKJiM0MzsJU1lTX1JFR19VU0VSX0ZJTFRFUihNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDAsCiYjNDM7CQkJICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksCiAJRUwyX1JFRyhDUFRSX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIENQVFJfTlZIRV9FTDJfUkVTMSksCiAJRUwyX1JFR19WTkNSKEhTVFJfRUwyLCByZXNldF92YWwsIDApLAogCUVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaAppbmRleCBiNWU1OTQyMjA0ZmM2OS4uMGMzMWI3MmUzNDM1YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHsKIAlzdHJ1Y3Qga3ZtX3BtYyBwbWNbS1ZNX0FSTVY4X1BNVV9NQVhfQ09VTlRFUlNdOwogCWludCBpcnFfbnVtOwogCWJvb2wgY3JlYXRlZDsKJiM0MzsJYm9vbCBldmVudHNfbmVlZF9yZWNyZWF0ZTsKIH07CiAKIHN0cnVjdCBhcm1fcG11X2VudHJ5IHsKQEAgLTU2LDggJiM0Mzs1NywxMCBAQCBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpOwogdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7CiYjNDM7dm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7CiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLAogCQkJCSAgICB1NjQgc2VsZWN0X2lkeCk7CiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSk7CiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7CkBAIC0xMzMsNiAmIzQzOzEzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcG11X3Nob3VsZF9ub3RpZnlfdXNlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCQkgIHU2NCBkYXRhLCB1NjQgc2VsZWN0X2lkeCkge30KIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE2Myw2ICYjNDM7MTY3LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KSB7fQogc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQogc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NAotLS0gYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzcsNiAmIzQzOzQzNyw3IEBAIGVudW0gewogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCQkyCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VCQkzCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMJNAomIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJNQogI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAkJMQogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSCQkwCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVIJCTEKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaAppbmRleCBkZGY4MWYyNDk1NmJhMC4uMWM2MzMzNDNkNTc2NjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmgKQEAgLTE0MiwzMiAmIzQzOzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZCkKIAlyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTsKIH0KICNkZWZpbmUgZmllbGRfbWF4KGZpZWxkKQkoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpCi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKQkJCQkJXAotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKQlcCiYjNDM7I2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKQkJCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHYpICZhbXA7JmFtcDsgKHYgJmFtcDsgfmZpZWxkX21hc2soZmllbGQpKSkJXAogCQlfX2ZpZWxkX292ZXJmbG93KCk7CQkJCQlcCiAJcmV0dXJuIHRvKCh2ICZhbXA7IGZpZWxkX21hc2soZmllbGQpKSAqIGZpZWxkX211bHRpcGxpZXIoZmllbGQpKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsCVwKLQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsCQlcCiYjNDM7CQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKJiM0MzsJcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKIH0JCQkJCQkJCQlcCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsCQlcCiAJCQkJCWJhc2UgdmFsLCBiYXNlIGZpZWxkKQkJXAogewkJCQkJCQkJCVwKLQkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAomIzQzOwkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSB0eXBlIyNfZ2V0X2JpdHMoX18jI3R5cGUgdiwgYmFzZSBmaWVsZCkJXAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSBuYW1lIyNfZ2V0X2JpdHModHlwZSB2LCBiYXNlIGZpZWxkKQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiAoZnJvbSh2KSAmYW1wOyBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7CQlcCiB9Ci0jZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQlcCi0JX19fX01BS0VfT1AobGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpCVwKLQlfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSkJXAotCV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSwsKQotX19fX01BS0VfT1AodTgsdTgsLCkKJiM0MzsjZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQkJCVwKJiM0MzsJX19fX01BS0VfT1AobGUjI3NpemUsX19sZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSkJXAomIzQzOwlfX19fTUFLRV9PUChiZSMjc2l6ZSxfX2JlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KQlcCiYjNDM7CV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpCiYjNDM7X19fX01BS0VfT1AodTgsdTgsdTgsLCkKIF9fTUFLRV9PUCgxNikKIF9fTUFLRV9PUCgzMikKIF9fTUFLRV9PUCg2NCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCmluZGV4IDIyMjIzMzk1OTY5ZTBmLi5iNWY4Y2U4ZDM0NTFmMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCkBAIC0yNSw2ICYjNDM7MjUsMTQgQEAKIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0JiMzOTtzIGNvbW1vbiBhbW9uZyB0aGUgUE1VIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBUk1WOF9QTVVfQ1lDTEVfSURYCQkzMQogCiYjNDM7I2lmbmRlZiBNRENSX0VMMl9IUE1OCiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1OCQkJR0VOTUFTS19VTEwoNCwgMCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIE1EQ1JfRUwyX0hQTUUKJiM0MzsjZGVmaW5lIE1EQ1JfRUwyX0hQTUUJCQlCSVRfVUxMKDcpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgdnBtdV92bSB7CiAJc3RydWN0IGt2bV92bSAqdm07CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwpAQCAtNDAzLDEyICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwogCXU4IHBtdXZlciwgZWM7Ci0JdTY0IGRmcjAsIGlycSA9IDIzOwotCXN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgaXJxX2F0dHIgPSB7Ci0JCS5ncm91cCA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKLQkJLmF0dHIgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwKLQkJLmFkZHIgPSAodTY0KSZhbXA7aXJxLAotCX07CiYjNDM7CXU2NCBkZnIwOwogCiAJLyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi8KIAltZW1zZXQoJmFtcDt2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpOwpAQCAtNDM0LDggJiM0Mzs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKQogCVRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgJmFtcDsmYW1wOwogCQkgICAgcG11dmVyICZndDs9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLAogCQkgICAgJiMzNDtVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2MyYjMzQ7LCBwbXV2ZXIpOwotCi0JdmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsICZhbXA7aXJxX2F0dHIpOwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZCkKQEAgLTQ2MSwxNSAmIzQzOzQ2MiwxNyBAQCBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pCiAJfQogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKQomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKQomIzQzO3sKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wgZXhwZWN0X2ZhaWwpCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXVuc2lnbmVkIGludCBwcmV2OwogCWludCByZXQ7CiAKLQljcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTsKLQl2Y3B1ID0gdnBtdV92bS52Y3B1OwotCiAJcHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTsKIAogCXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLApAQCAtNDgxLDYgJiM0Mzs0ODQsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbAogCQkJICAgIG5yX2NvdW50ZXJzLCBwcmV2KTsKIAllbHNlCiAJCVRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywKJiM0MzsJCQkJCQkgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LAomIzQzOwkJCQkJCSBib29sIGV4cGVjdF9mYWlsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwl2Y3B1ID0gdnBtdV92bS52Y3B1OwomIzQzOwomIzQzOwlpZiAoZml4ZWRfY291bnRlcnNfb25seSkKJiM0MzsJCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwlzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTsKIAogCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTsKIH0KQEAgLTQ4OSwxNSAmIzQzOzUxMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sCiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yIHRoZSB2Q1BVIHRvIEBwbWNyX24sCiAgKiBhbmQgcnVuIHRoZSB0ZXN0LgogICovCi1zdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCXU2NCBzcDsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAotCXByX2RlYnVnKCYjMzQ7VGVzdCB3aXRoIHBtY3JfbiAlbHVcbiYjMzQ7LCBwbWNyX24pOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXG4mIzM0OywgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpOwogCXZjcHUgPSB2cG11X3ZtLnZjcHU7CiAKIAkvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovCkBAIC01MzEsMTQgJiM0Mzs1NTQsMTQgQEAgc3RhdGljIHN0cnVjdCBwbXJlZ19zZXRzIHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gPSB7CiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2YKICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuCiAgKi8KLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKQomIzQzO3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiB7CiAJaW50IGk7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXU2NCBzZXRfcmVnX2lkLCBjbHJfcmVnX2lkLCByZWdfdmFsOwogCXU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzazsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpOwogCXZjcHUgPSB2cG11X3ZtLnZjcHU7CiAKIAl2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTsKQEAgLTU4MywxNiAmIzQzOzYwNiw5NCBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbikKIAlkZXN0cm95X3ZwbXVfdm0oKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJdTY0IGV4cGVjdGVkX21kY3IsIG1kY3I7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJcHJfZGVidWcoJiMzNDtNRENSX0VMMiB0ZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxuJiMzNDssCiYjNDM7CQkgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CWlmICghdm1fc3VwcG9ydHNfZWwyKHZwbXVfdm0udm0pKSB7CiYjNDM7CQlkZXN0cm95X3ZwbXVfdm0oKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl2Y3B1ID0gdnBtdV92bS52Y3B1OwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlleHBlY3RlZF9tZGNyID0gdTY0X3JlcGxhY2VfYml0cyhtZGNyLCBGSUVMRF9NQVgoTURDUl9FTDJfSFBNTiksCiYjNDM7CQkJCQkgTURDUl9FTDJfSFBNTik7CiYjNDM7CXZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLAomIzQzOwkJICAgICBleHBlY3RlZF9tZGNyKTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTU4gd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CWlmIChmaXhlZF9jb3VudGVyc19vbmx5KSB7CiYjNDM7CQl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJCW1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7CiYjNDM7CQlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkJICAgICYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseCkmIzM0OywKJiM0MzsJCQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X25yX2NvdW50ZXJzKHZjcHUsIHBtY3JfbiwgZmFsc2UpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkgICAgJiMzNDtNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19TRVRfTlJfQ09VTlRFUlMgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCAmYW1wO2lycSk7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CiYjNDM7CW1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7CiYjNDM7CVRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjciwKJiM0MzsJCSAgICAmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0lOSVQgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CWV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTsKJiM0MzsJdmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksCiYjNDM7CQkgICAgIGV4cGVjdGVkX21kY3IpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkgICAgJiMzNDtNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNRSB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseCkmIzM0OywKJiM0MzsJCSAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTsKJiM0MzsKJiM0MzsJa3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sICZhbXA7aW5pdCk7CiYjNDM7CWluaXQuZmVhdHVyZXNbMF0gfD0gKDEgJmx0OyZsdDsgS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7CiYjNDM7CWFhcmNoNjRfdmNwdV9zZXR1cCh2Y3B1LCAmYW1wO2luaXQpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikgPT0gcG1jcl9uLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KSYjMzQ7LAomIzQzOwkJICAgIHBtY3JfbiwgRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7fQomIzQzOwogLyoKICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIGFuZCBhdHRlbXB0IHRvIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IKICAqIHRoZSB2Q1BVIHRvIEBwbWNyX24sIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0IHZhbHVlLgogICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuCiAgKi8KLXN0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24pCiYjNDM7c3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCXByX2RlYnVnKCYjMzQ7RXJyb3IgdGVzdCB3aXRoIHBtY3JfbiAlbHUgKGxhcmdlciB0aGFuIHRoZSBob3N0KVxuJiMzNDssIHBtY3Jfbik7CiAKLQl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7CiAJZGVzdHJveV92cG11X3ZtKCk7CiB9CiAKQEAgLTYyMiwyMiAmIzQzOzcyMywxNDcgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZCkKIAlyZXR1cm4gc3VwcG9ydGVkOwogfQogCi1pbnQgbWFpbih2b2lkKQomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKHZvaWQpCiB7Ci0JdTY0IGksIHBtY3JfbjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHUsICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXVuc2lnbmVkIGludCBucl9jb3VudGVycyA9IDA7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlKDIpOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCAmYW1wO2luaXQpOwomIzQzOwlpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsCiYjNDM7CQkJCSAgICAgJmFtcDtucl9jb3VudGVycyk7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KIAotCVRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTsKLQlURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7Ci0JVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKJiM0Mzt7CiYjNDM7CXU2NCBpOwogCi0JcG1jcl9uID0gZ2V0X3BtY3Jfbl9saW1pdCgpOwogCWZvciAoaSA9IDA7IGkgJmx0Oz0gcG1jcl9uOyBpJiM0MzsmIzQzOykgewotCQlydW5fYWNjZXNzX3Rlc3QoaSk7Ci0JCXJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTsKJiM0MzsJCXJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKJiM0MzsJCXJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKJiM0MzsJCXJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwogCX0KIAogCWZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpICZsdDsgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSYjNDM7JiM0MzspCi0JCXJ1bl9lcnJvcl90ZXN0KGkpOwomIzQzOwkJcnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CXJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsJCWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovCiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCAmYW1wO2ZpbHRlcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsICZhbXA7ZmlsdGVyKTsKJiM0MzsKJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSAoMSAmbHQ7Jmx0OyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRUJVU1ksCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXRlc3RfY29uZmlnKDAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MzsKJiM0MzsJdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTsKJiM0MzsJdGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7CiYjNDM7CXRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBBUk02NCBQTVUgRW11bGF0aW9uIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIHJldmlld2luZyB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5pbmcgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdHdlYWtzIHRoZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbi4gSSBzZWUgaXQgaW50cm9kdWNlcyBhIG5ldyBhdHRyaWJ1dGUsIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgLCBhbmQgYWx0ZXJzIGhvdyBQTVUgZXZlbnRzIGFyZSByZWNyZWF0ZWQgYW5kIHRoZSBvdmVyYWxsIFBNVSBsb2FkaW5nL3JlbG9hZGluZyBwcm9jZXNzLgoKTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMg4oCTIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYCwgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYGFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3Jlc2V0LmNgIOKAkyB0aGlzIGlzIHVuZG91YnRlZGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gS1ZNIG9uIEFSTTY0LiBBbmQsIGltcG9ydGFudGx5LCBzaW5jZSB0aGlzIGlzIEtWTSwgdGhpcyBjYW4gZGVmaW5pdGVseSBiZSBhY2Nlc3NlZCBhbmQgaW5mbHVlbmNlZCBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3Rscy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgY2FsbHMgd2l0aCB0aGUgbmV3IGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCwgYW5kIGFsc28gYEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTYCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiBgYXJjaC9hcm02NC9rdm0vYCwgc28gYENPTkZJR19LVk1gIGlzIG9idmlvdXNseSBhIHByZXJlcXVpc2l0ZS4gSXQmIzM5O3MgYWxzbyBBUk02NC1zcGVjaWZpYywgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhbiBBUk02NCBzeXN0ZW0uCgpUbyBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgYWZmZWN0ZWQuIExldCYjMzk7cyBsaXN0IHRoZXNlIG91dDogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3ZjcHVfcmVsb2FkX3BtdWAsIGBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlgLCBga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzYCwgYGt2bV9hcm1fcG11X3YzX3NldF9hdHRyYCwgYGt2bV9hcm1fcG11X3YzX2dldF9hdHRyYCwgYGt2bV9hcm1fcG11X3YzX2hhc19hdHRyYCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRgLCBga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdWAsIGFuZCBga3ZtX3BtdV9wcm9iZV9hcm1wbXVgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgd2hpY2ggYXJlIGhhbmRsaW5nIHRoZSBjb3JlIGNoYW5nZXMuCgpGaW5hbGx5LCBJJiMzOTtsbCBkbyBhIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBgYXJjaC9hcm02NC9rdm0vYCBkaXJlY3RvcnkgdG8gZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTY2FubmluZyBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2Agc2hvd3MgYENPTkZJR19LVk1gIGlzIGluZGVlZCB0aGUgbWFpbiByZXF1aXJlbWVudC4gSSBzdXNwZWN0IGBDT05GSUdfSFdfUEVSRl9FVkVOVFNgIG1pZ2h0IGFsc28gYmUgbmVlZGVkLCBzaW5jZSBQTVUgZW11bGF0aW9uIG9mdGVuIHJlbGllcyBvbiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGluZnJhc3RydWN0dXJlLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IV19QRVJGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI4LVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6Mjk6a3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgJiM0Mzs9IHBtdS1lbXVsLm8gcG11Lm9cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTMwLWt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICYjNDM7PSBwYXV0aC5vXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM9MTI5PXN0YXRpYyB2b2lkIF9faHlwX3ZnaWNfcmVzdG9yZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ1LSAqL1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MTQ2OiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jLTE0Ny1zdGF0aWMgYm9vbCBfX3BtdV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzMwCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipLVk0gUE1VIEVtdWxhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgcG11LWVtdWwub2AgbmVjZXNzaXRhdGVzIGBDT05GSUdfSFdfUEVSRl9FVkVOVFNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBuZWVkIGJvdGggYEtWTWAgYW5kIGBIV19QRVJGX0VWRU5UU2AsIGJ1dCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYENPTkZJR19LVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50LiBZZXMsIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgIGFyZSBib3RoIG5lY2Vzc2FyeS4KCk5vdywgbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gY2FsbHMgdGhpcyBpbnRyb2R1Y2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3OiBga3ZtX3BtdV9oYW5kbGVfbWRjcmAsIGBrdm1fdmNwdV9sb2FkX3BtdWAsIGBrdm1fdmNwdV9yZWxvYWRfcG11YCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXVgLCBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YCwgYW5kIGBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNgLgoKRmluYWxseSwgdG8gZ2V0IGEgdHJ1bHkgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgY2hlY2sgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgIGRpcmVjdGx5IHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgYW5kIGFsc28gdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGt2bV9wbXVfaGFuZGxlX21kY3J8XnZvaWQga3ZtX3ZjcHVfbG9hZF9wbXV8XnN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTU5NT12b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNjI0LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo2MjU6dm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbClcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNjI2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTg5OD11NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtOTM4LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo5Mzk6dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSlcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtOTQwLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTExMzM9c3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExNjMtXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjExNjQ6c3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMTY1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc2OQoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEtWTSBQTVUgRW11bGF0aW9uIG9uIEFSTTY0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgUE1VIGVtdWxhdGlvbiBmb3IgQVJNNjQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3ZjcHVfcmVsb2FkX3BtdWAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11YCwgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAsIGBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNgLCBga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJgLCBhbmQgYGt2bV9wbXVfcHJvYmVfYXJtcG11YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgYXJlYXMgdGhhdCBuZWVkIHRob3JvdWdoIHRlc3RpbmcuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0IGZvciB0aGlzLiBJIG5lZWQgYEtWTWAgYW5kIGBIV19QRVJGX0VWRU5UU2AuIEp1c3QgcXVpY2tseSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgbmFtZXMuIFllcCwgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgYW5kIGBDT05GSUdfS1ZNYCBhcmUgdGhlIHJpZ2h0IG9uZXMuCgpBbmQgbm93IEkgd2lsbCBxdWlja2x5IGNoZWNrIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAgYW5kIGBrdm1fYXJtX3BtdV92M19nZXRfYXR0cmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJ8XmludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMTgwPXN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMTk2LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMTk3OmludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExOTgte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTMxMC1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTMxMTppbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzEyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcxMAoJCQkJCQkJb3V0cHV0OiAyMTcKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEFSTTY0IFBNVSBFbXVsYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgY2FwYWJpbGl0eSBmb3IgdGhlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uOiBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGhvdyB0aGlzIGltcGFjdHMgZXhpc3RpbmcgdXNlcnNwYWNlIGludGVyYWN0aW9uIGFuZCBLVk0mIzM5O3MgY29yZSBQTVUgZW11bGF0aW9uIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCB0aGUgYGt2bV9hcm1fcG11X3YzX3NldF9hdHRyYCwgYGt2bV9hcm1fcG11X3YzX2dldF9hdHRyYCwgYW5kIGBrdm1fYXJtX3BtdV92M19oYXNfYXR0cmAgZnVuY3Rpb25zLCB3aGljaCBpcyB3aGVyZSB0aGUgbmV3IGZsYWcgaXMgYmVpbmcgaW50ZWdyYXRlZC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyBhZmZlY3RlZCBieSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZTogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdWAsIGBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlgLCBga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzYCwgYW5kIGBrdm1fcG11X3Byb2JlX2FybXBtdWAuIEkgbmVlZCB0byByZXZpZXcgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGNhcmVmdWxseTsgdGhlIFBNVSBldmVudCBjcmVhdGlvbiwgbG9hZGluZywgYW5kIHJlbG9hZGluZyBhcmUga2V5IHBvaW50cyBoZXJlIGJlY2F1c2UgdGhleSYjMzk7cmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlc2UgcHJvYmFibHkgbmVlZCBzb21lIGV4dHJhIHNjcnV0aW55LCBhcyB0aGV5IGFyZSBsaWtlbHkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IGNhcGFiaWxpdHkuCgpGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgZmVhdHVyZSByZWxhdGVkIHRvIFBNVSBlbXVsYXRpb24sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLiBUaGF0IG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgdGhlIHVzZXItdmlzaWJsZSBiZWhhdmlvciBhbmQgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgd2l0aCB0aGF0IGluIG1pbmQuIFRoZSBtZW50aW9uIG9mIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgIGluIHRoZSBjb25maWdzIGlzIGltcG9ydGFudC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoZSAmIzM0O3NldC1yZXN1bHRzJiMzNDsgYXJlLCB0byBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiB3aWxsIGFjdHVhbGx5IHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0hXX1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3BtdV9oYW5kbGVfbWRjciYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9wcm9iZV9hcm1wbXUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEhXX1BFUkZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY4OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFSTTY0IEhhcmR3YXJlIFBlcmZvcm1hbmNlIEV2ZW50cyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgSFdfUEVSRl9FVkVOVFNgLi4uIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgQVJNNjQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZlYXR1cmUgaXMgY29udHJvbGxlZCBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBlaXRoZXIgZ29pbmcgdG8gYmUgdHVja2VkIGF3YXkgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2Ag4oCTIG1ha2VzIHRoZSBtb3N0IHNlbnNlIOKAkyBvciBwZXJoYXBzIGxpbmtlZCBpbiBgaW5pdC9LY29uZmlnYCBpZiBpdCYjMzk7cyBnb3Qgc29tZSBicm9hZGVyIGRlcGVuZGVuY3kgb3IgZ2xvYmFsIGluZmx1ZW5jZS4gR290dGEgcXVpY2tseSBjaGVjayBib3RoLiBJdCYjMzk7cyBhYm91dCBrbm93aW5nIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgYW5kIGNvbW1vbiBsb2NhdGlvbnMuIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSB3aXRoIGEgYmxpbmQgc2VhcmNoIGlmIEkgY2FuIG5hcnJvdyBpdCBkb3duIHdpdGggdGhpcyBiYXNpYyBrbm93bGVkZ2Ugb2YgdGhlIHRyZWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXX1BFUkZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTI1Mz1jb25maWcgQ1BVX1RUQlIwX1BBTlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTI1OS1cbmFyY2gvYXJtL0tjb25maWc6MTI2MDpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtL0tjb25maWctMTI2MS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTYwNj1jb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE2MDktXG5hcmNoL2FybTY0L0tjb25maWc6MTYxMDpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjExLVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI2ODA9Y29uZmlnIE5PREVTX1NISUZUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjY4NC1cbmFyY2gvbWlwcy9LY29uZmlnOjI2ODU6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXG5hcmNoL21pcHMvS2NvbmZpZy0yNjg2LVx0Ym9vbCBcJiMzNDtFbmFibGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBwZXJmIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gvc2gvS2NvbmZpZz02MjY9Y29uZmlnIEdVU0FfUkJcbi0tXG5hcmNoL3NoL0tjb25maWctNjM1LVxuYXJjaC9zaC9LY29uZmlnOjYzNjpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvc2gvS2NvbmZpZy02MzctXHRib29sIFwmIzM0O0VuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjcyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBJbXBsaWNpdCBGZWF0dXJlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyB0aGF0ICpmZWVscyogbGlrZSBpdCBzaG91bGQgYmUgdGhlcmUsIGJ1dCB0aGUgdG9vbCBpc24mIzM5O3QgZXhwbGljaXRseSBzaG93aW5nIGl0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSwgbGV0JiMzOTtzIGNhbGwgaXQgdGhlIGVsdXNpdmUgJiMzNDtpdCwmIzM0OyBpcyBhY3R1YWxseSBpbXBsaWNpdGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgcGVyaGFwcyBhcyBgZGVmX2Jvb2wgeWAsIGFuZCB0aGUgY3VycmVudCBzZXR1cCBqdXN0IGRvZXNuJiMzOTt0IHN1cmZhY2UgaXQuIFRoZSB0b29sIG1pZ2h0IHNpbXBseSBub3QgYmUgY29uZmlndXJlZCB0byByZWNvZ25pemUgaXQgY29ycmVjdGx5LCBtYXliZSBiZWNhdXNlIGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIHByb21wdCBjb25maWd1cmF0aW9uIG9wdGlvbi4KClNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBjaGVjayB0aGUgc3BlY2lmaWMgZGVmaW5pdGlvbnMsIGFuZCB0aGUgbGlrZWx5IGNhbmRpZGF0ZSwgYXQgbGVhc3QgYmFzZWQgb24gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBpcyBgUEVSRl9FVkVOVFNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBQRVJGX0VWRU5UU2AgaXMgdGhlIGtleSB0byB1bmxvY2tpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBvYnNlcnZpbmcuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyB0byBjaGVjaywgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFwmIzM0O1BlcmZvcm1hbmNlIG1vbml0b3JpbmdcJiMzNDtcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7QU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4tLVxuaW5pdC9LY29uZmlnPTIxMzg9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxMzktXG5pbml0L0tjb25maWc6MjE0MDpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTQxLVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA4MgoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlICYjMzQ7dGhvdWdodHMsJiMzNDsgcmVmbGVjdGluZyBteSB1bmRlcnN0YW5kaW5nIGFzIGFuIGV4cGVydDoKCioqRm9jdXNpbmcgb24gS1ZNIGFuZCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nKioKCkFscmlnaHQsIGdpdmVuIHRoZSBjb250ZXh0LCB0aGUgY29yZSB0aG91Z2h0IGhlcmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogbGV0JiMzOTtzIGltbWVkaWF0ZWx5IG5hcnJvdyB0aGUgc2NvcGUgdG8gdHdvIGtleSB0b29scywgYEtWTWAgYW5kIGBQRVJGX0VWRU5UU2AuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgcGVyZm9ybWFuY2UtcmVsYXRlZCBpbnZlc3RpZ2F0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdXNlIG9mIGBLVk1gIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGh5cGVydmlzb3ItYmFzZWQgdmlydHVhbGl6YXRpb24gc2V0dXAsIG1lYW5pbmcgd2UmIzM5O3JlIGRpcmVjdGx5IGRlYWxpbmcgd2l0aCB2aXJ0dWFsIG1hY2hpbmVzIChWTXMpIGFuZCB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0IGhhcmR3YXJlLiBBbmQsIHRoZSBpbmNsdXNpb24gb2YgYFBFUkZfRVZFTlRTYCBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB3ZSYjMzk7bGwgYmUgZGl2aW5nIGRlZXAgaW50byBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycy4gV2UmIzM5O3JlIHRhbGtpbmcgZGV0YWlsZWQgbWVhc3VyZW1lbnRzIG9mIENQVSBjeWNsZXMsIGNhY2hlIG1pc3NlcywgYnJhbmNoIHByZWRpY3Rpb25zLCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIOKAkyB0aGUgbml0dHktZ3JpdHR5IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIHRob3NlIFZNcy4gVGhpcyBhcHByb2FjaCBhbGxvd3MgZm9yIGRldGFpbGVkIGFuZCBudWFuY2VkIGV2YWx1YXRpb24gb2Ygc3BlY2lmaWMgcGVyZm9ybWFuY2UgaXNzdWVzLiBJdOKAmXMgYW4gZWZmaWNpZW50IHdheSB0byBjdXQgdGhyb3VnaCB0aGUgbm9pc2UgYW5kIGdldCByaWdodCB0byB0aGUgc291cmNlIG9mIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgaGlnaC1sZXZlbCBvdmVydmlldzsgdGhpcyBpcyBhIGRpYWdub3N0aWMgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3BtdV9oYW5kbGVfbWRjciYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9wcm9iZV9hcm1wbXUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcG11X2hhbmRsZV9tZGNyJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2xvYWRfcG11JiMzNDssCiAgICAmIzM0O2t2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtrdm1fcG11X3Byb2JlX2FybXBtdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGZlYXR1cmUgKEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSkgYW5kIG1vZGlmaWVzIFBNVSBldmVudCBjcmVhdGlvbiwgbG9hZGluZywgYW5kIHJlbG9hZGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1vZGlmaWVzIGNvcmUgS1ZNIFBNVSBlbXVsYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNDo0NS43MzIzODM5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzM5OTk5OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNDo0NS43MzIzOTQwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MTExMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNhOGM3MDc0YjUwYjE2NWE1NTE5MGZlMjliYWM2MDRmYWYyNmRlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwNjoxNDo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMWQ1OTJlNzBiZGVhM2QgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuQEAgLTc0LDcgKzc0LDggQEAgaXJxY2hpcC5cXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XFxuIFxcdCBcXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxcbi1cXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXFxuK1xcdFxcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbiBcXHQgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2VcXG4gXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5AQCAtMTE2LDE0ICsxMTcsMTQgQEAgdXNpbmcgZXZlbnQgMHgxMSAoQ1BVX0NZQ0xFUykuXFxuIFxcbiA6UmV0dXJuczpcXG4gXFxuLVxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4rICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4gXFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcXG4gXFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxcbi1cXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXFxuIGZvciB0aGUgcHVycG9zZSBvZiBQTVUgZW11bGF0aW9uLiBUaGUgUE1VIGlkZW50aWZpZXIgY2FuIGJlIHJlYWQgZnJvbSB0aGUgXFxcInR5cGVcXFwiXFxuQEAgLTE2NSw2ICsxNjYsMjcgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxcbiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpc1xcbiBhdHRyaWJ1dGUuXFxuIFxcbisxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6UGFyYW1ldGVyczogbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4ga3ZtX2RldmljZV9hdHRyLmFkZHJcXG4rXFxuKzpSZXR1cm5zOlxcbitcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxcbitcXHRcXHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxcbitcXHRcXHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXFxuK1xcdCAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nXFxuK1xcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitJZiBzZXQsIEtWTSBlbXVsYXRlcyBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy5cXG4rXFxuK1doZW4gdGhpcyBhdHRyaWJ1dGUgaXMgZW5hYmxlZCwgdGhlIHZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVXFxuK3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzXFxuK2F0dHJpYnV0ZSBpcyBWTS1zY29wZWQuXFxuK1xcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBiYWUyYzRmOTJlZjVjMC4uMzk5OGU2NmM2NTcxNTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTM2Nyw2ICszNjcsMTAgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXFx0XFx0MTBcXG4gXFx0LyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqL1xcbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfRVhJVF9TRUFcXHRcXHRcXHRcXHQxMVxcbitcXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqL1xcbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lUXFx0XFx0XFx0MTJcXG4rXFx0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXFx0MTNcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5pbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuQEAgLTQzNyw2ICs0MzcsNyBAQCBlbnVtIHtcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXFx0XFx0MlxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXFx0XFx0M1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcXHQ0XFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQ1XFxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlxcdFxcdDBcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXFx0XFx0MVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcXG5pbmRleCAxOTk1ZTExOTg2NDhlOC4uYTVhZTYyODIwNGExMjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXFxuQEAgLTEwMDUsNyArMTAwNSw3IEBAIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VycmF0YVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5kZXNjID0gXFxcIkFwcGxlIElNUERFRiBQTVV2MyBUcmFwc1xcXCIsXFxuIFxcdFxcdC5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9QTVVWM19JTVBERUZfVFJBUFMsXFxuLVxcdFxcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0xPQ0FMX0NQVV9FUlJBVFVNLFxcbitcXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9FQVJMWV9MT0NBTF9DUFVfRkVBVFVSRSxcXG4gXFx0XFx0Lm1hdGNoZXMgPSBoYXNfaW1wZGVmX3BtdXYzLFxcbiBcXHRcXHQuY3B1X2VuYWJsZSA9IGNwdV9lbmFibGVfaW1wZGVmX3BtdXYzX3RyYXBzLFxcbiBcXHR9LFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuaW5kZXggNTBhZGZmZjc1YmU4MmUuLmE4NjZiZWI4ZDg3M2QzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5AQCAtNjUxLDYgKzY1MSw3IEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9zMl9tbXUgKm1tdTtcXG4rXFx0aW50IGxhc3RfY3B1ID0gdmNwdS1cXHUwMDNlY3B1O1xcbiBcXHRpbnQgKmxhc3RfcmFuO1xcbiBcXG4gXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbkBAIC03MDAsNiArNzAxLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbiBcXHRpZiAoaGFzX3ZoZSgpKVxcbiBcXHRcXHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcXG4gXFx0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xcbitcXHRrdm1fdmNwdV9sb2FkX3BtdSh2Y3B1LCBsYXN0X2NwdSk7XFxuIFxcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xcbiBcXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuIFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbkBAIC03NDksNyArNzUxLDYgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcXG4gXFxuIFxcdHZjcHVfY2xlYXJfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xcbi1cXHR2Y3B1LVxcdTAwM2VjcHUgPSAtMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMTY1MiwyOSArMTY1MywyNiBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGluaXQtXFx1MDAzZWZlYXR1cmVzWzBdO1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGt2bV92Y3B1X2luaXRfY2hhbmdlZCh2Y3B1LCBpbml0KSlcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGJpdG1hcF9jb3B5KGt2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLCBcXHUwMDI2ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7XFxuIFxcbiBcXHRyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqL1xcbiBcXHRrdm1fcmVzZXRfdmNwdSh2Y3B1KTtcXG4gXFxuIFxcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19WQ1BVX0ZFQVRVUkVTX0NPTkZJR1VSRUQsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbiBcXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xcbi1cXHRyZXQgPSAwO1xcbi1vdXRfdW5sb2NrOlxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbkBAIC0xNjkwLDYgKzE2ODgsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXG4gXFx0aWYgKCFrdm1fdmNwdV9pbml0aWFsaXplZCh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIF9fa3ZtX3ZjcHVfc2V0X3RhcmdldCh2Y3B1LCBpbml0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuaW5kZXggOTgzMDViYmZjMDk1YWIuLmZmNWQ1ZjY2YTljMDlmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuQEAgLTcsOSArNyw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BtdS5oXFx1MDAzZVxcbkBAIC0xNyw2ICsxNywxMyBAQFxcbiBcXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXFx0QklUKDApXFxuIFxcbisjZGVmaW5lIE1EQ1JfRUwyX1BNVV9SRUNSRUFURV9NQVNLXFx0KE1EQ1JfRUwyX0hQTU4gfCBNRENSX0VMMl9IUE1EIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgTURDUl9FTDJfSExQKVxcbitcXG4rLypcXG4rICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnRcXG4rICogVk0gc3RhdGUsIHNvIGEgdHJ1ZSByZXN1bHQgbXVzdCByZW1haW4gdmFsaWQgYWZ0ZXIgdGhlIGNoZWNrLlxcbisgKi9cXG4gc3RhdGljIExJU1RfSEVBRChhcm1fcG11cyk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7XFxuIFxcbkBAIC0yNiw3ICszMyw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpO1xcbiBcXG4gYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcXG4ge1xcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNmFybV9wbXVzKTtcXG4gfVxcbiBcXG5AQCAtODAsNiArODYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0cmV0dXJuIG1hc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxcbkBAIC0zMTcsMTcgKzMyOCwyMiBAQCB1NjQga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTtcXG4rXFx0dTY0IG4gPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xcbiBcXG4tXFx0aWYgKHZhbCA9PSAwKVxcbitcXHRpZiAobiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBHRU5NQVNLKHZhbCAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xcbitcXHRcXHRyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4ge1xcbi1cXHRpZiAoIXBtYy1cXHUwMDNlcGVyZl9ldmVudCkge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcXG4rXFxuK1xcdGlmICghcG1jLVxcdTAwM2VwZXJmX2V2ZW50IHx8XFxuK1xcdCAgICAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAhY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cXHUwMDNlY3B1KSxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ0b19hcm1fcG11KHBtYy1cXHUwMDNlcGVyZl9ldmVudC1cXHUwMDNlcG11KS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKSkge1xcbiBcXHRcXHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHBtYyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC02MDYsNiArNjIyLDIxIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXFxuIFxcdH1cXG4gfVxcbiBcXG4rdm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbClcXG4re1xcbitcXHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG9cXG4rXFx0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE1EQ1JfRUwyX1BNVV9SRUNSRUFURV9NQVNLKVxcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBtdS5ldmVudHNfbmVlZF9yZWNyZWF0ZSA9IHRydWU7XFxuK1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IChNRENSX0VMMl9IUE1FIHwgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0spKVxcbitcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuQEAgLTY0OSwxMCArNjgwLDggQEAgc3RhdGljIGJvb2wga3ZtX3BtY19jb3VudHNfYXRfZWwyKHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIFxcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXFx1MDAyNiBBUk1WOF9QTVVfSU5DTFVERV9FTDI7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuK3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxcbiB7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBDUFUgUE1VIGxpa2VseSBpc24ndCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmdcXG4gXFx0ICogZm9yIHRoZSBndWVzdCdzIFBNVXYzIGV2ZW50IElELlxcbkBAIC02NjMsMTQgKzY5MiwyNyBAQCBzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxcbiBcXHRyZXR1cm4gZXZlbnRzZWw7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50IC0gY3JlYXRlIGEgcGVyZiBldmVudCBmb3IgYSBjb3VudGVyXFxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxcbi0gKi9cXG4tc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xcbitcXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xcbitcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFxcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcXG4rXFx0XFx0cG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuK1xcbitcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBtdTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUoc3RydWN0IGt2bV9wbWMgKnBtYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xcbi1cXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuIFxcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcXG4gXFx0aW50IGV2ZW50c2VsO1xcbkBAIC03MDQsNyArNzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbiBcXHQgKiBEb24ndCBjcmVhdGUgYW4gZXZlbnQgaWYgd2UncmUgcnVubmluZyBvbiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzXFxuIFxcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cXG4gXFx0ICovXFxuLVxcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS1cXHUwMDNla3ZtLCBldmVudHNlbCk7XFxuK1xcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpO1xcbiBcXHRpZiAoZXZlbnRzZWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC03NDksNiArNzkxLDMyIEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0cG1jLVxcdTAwM2VwZXJmX2V2ZW50ID0gZXZlbnQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50IC0gY3JlYXRlIGEgcGVyZiBldmVudCBmb3IgYSBjb3VudGVyXFxuKyAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxcbisgKi9cXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xcbitcXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbitcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0YXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KFJFQURfT05DRSh2Y3B1LVxcdTAwM2VjcHUpKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghYXJtX3BtdSkge1xcbitcXHRcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImt2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRhZGRfdGFpbnQoVEFJTlRfQ1BVX09VVF9PRl9TUEVDLCBMT0NLREVQX1NUSUxMX09LKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XFxuK1xcdFxcdH0gd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KFJFQURfT05DRSh2Y3B1LVxcdTAwM2VjcHUpLCBcXHUwMDI2YXJtX3BtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUgLSBzZXQgc2VsZWN0ZWQgY291bnRlciB0byBtb25pdG9yIHNvbWUgZXZlbnRcXG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcXG5AQCAtNzg5LDQzICs4NTcsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGVudHJ5LVxcdTAwM2Vhcm1fcG11ID0gcG11O1xcbi1cXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlZW50cnksIFxcdTAwMjZhcm1fcG11cyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcXG4te1xcbi1cXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICpwbXU7XFxuLVxcdGludCBjcHU7XFxuLVxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcXG4tXFx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcXG4tXFx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcXG4tXFx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxcbi1cXHQgKlxcbi1cXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcXG4tXFx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXFxuLVxcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXFxuLVxcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXFxuLVxcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxcbi1cXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXFxuLVxcdCAqXFxuLVxcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxcbi1cXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXFxuLVxcdCAqIGNhcnJpZWQgaGVyZS5cXG4tXFx0ICovXFxuLVxcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcXG4tXFx0XFx0cG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuLVxcbi1cXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4tXFx0XFx0XFx0cmV0dXJuIHBtdTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZlbnRyeS1cXHUwMDNlZW50cnksIFxcdTAwMjZhcm1fcG11cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpXFxuQEAgLTg3MCw2ICs5MDIsMTMgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gXFx0dTY0IHZhbCwgbWFzayA9IDA7XFxuIFxcdGludCBiYXNlLCBpLCBucl9ldmVudHM7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBIaWRlIHRoZSBoYXJkd2FyZSBQTVUncyBldmVudCBzZXQgdG8ga2VlcCBQTUNFSUQgc3RhYmxlIGFjcm9zc1xcbitcXHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGlmICghcG1jZWlkMSkge1xcbiBcXHRcXHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XFxuIFxcdFxcdGJhc2UgPSAwO1xcbkBAIC04OTcsOSArOTM2LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAyNiBtYXNrO1xcbiB9XFxuIFxcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxcbit7XFxuK1xcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkgfHwgdmNwdS1cXHUwMDNlY3B1ID09IGxhc3RfY3B1IHx8IGxhc3RfY3B1ID09IC0xKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoa3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS1cXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucG11O1xcbiBcXHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChwbXUtXFx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxcbitcXHRcXHRcXHRrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTtcXG4rXFxuK1xcdFxcdHBtdS1cXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUgPSBmYWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgXFx1MDAyNj0sIG1hc2spO1xcbiBcXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsIFxcdTAwMjY9LCBtYXNrKTtcXG5AQCAtMTAwOCw2ICsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdTtcXG4gXFxuK1xcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcXG4gXFx0ICogZXZlbnQsIHRob3VnaCB0aGUgc2FtZSBtYXkgbm90IGJlIHRydWUgb2Ygbm9uLVBNVXYzIGhhcmR3YXJlLlxcbkBAIC0xMDIyLDMwICsxMDgyLDEyIEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4gYml0bWFwX3dlaWdodChhcm1fcG11LVxcdTAwM2VjbnRyX21hc2ssIEFSTVY4X1BNVV9NQVhfR0VORVJBTF9DT1VOVEVSUyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yKVxcbi17XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcXG4tXFxuLVxcdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cycgYmFjay4uLiAqL1xcbi1cXHRpZiAodGVzdF9iaXQoS1ZNX0FSTV9WQ1BVX0hBU19FTDIsIGt2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xcbi1cXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4tXFxuLVxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xcbi1cXHRcXHRcXHR1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xcbi1cXHRcXHRcXHR2YWwgXFx1MDAyNj0gfk1EQ1JfRUwyX0hQTU47XFxuLVxcdFxcdFxcdHZhbCB8PSBGSUVMRF9QUkVQKE1EQ1JfRUwyX0hQTU4sIGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMpO1xcbi1cXHRcXHRcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLmFybV9wbXUgPSBhcm1fcG11O1xcbi1cXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSk7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMDYyLDcgKzExMDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXFxuICAqL1xcbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcXG4rXFx0LypcXG4rXFx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcXG4rXFx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcXG4rXFx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcXG4rXFx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxcbitcXHQgKlxcbitcXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcXG4rXFx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXFxuK1xcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXFxuK1xcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXFxuK1xcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxcbitcXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxcbitcXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseSwgb3IgcmVxdWVzdCBmaXhlZC1jb3VudGVycy1vbmx5XFxuK1xcdCAqIGVtdWxhdGlvbi4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nIGNhcnJpZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIFxcbiBcXHRpZiAoIWFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbkBAIC0xMDc5LDE3ICsxMTM4LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXFxuIFxcdGludCByZXQgPSAtRU5YSU87XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcm1fcG11c19sb2NrKTtcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbiBcXHRcXHRhcm1fcG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuIFxcdFxcdGlmIChhcm1fcG11LVxcdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcXG4gXFx0XFx0XFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fFxcbitcXHRcXHRcXHQgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHxcXG4gXFx0XFx0XFx0ICAgIChrdm0tXFx1MDAzZWFyY2gucG11X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKTtcXG4gXFx0XFx0XFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XFxuIFxcdFxcdFxcdGNwdW1hc2tfY29weShrdm0tXFx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFxcdTAwMjZhcm1fcG11LVxcdTAwM2VzdXBwb3J0ZWRfY3B1cyk7XFxuIFxcdFxcdFxcdHJldCA9IDA7XFxuQEAgLTEwOTcsMjEgKzExNTgsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVxcdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbiBcXG4rXFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKG4gXFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMTc1LDcgKzEyNTQsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRcXHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxcbitcXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gucG11X2ZpbHRlcikge1xcbkBAIC0xMjIwLDYgKzEyOTksOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXG4gXFx0XFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG4rXFx0XFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTtcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XFxuIFxcdFxcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xcbiBcXHR9XFxuQEAgLTEyNDYsNiArMTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcdFxcdGlycSA9IHZjcHUtXFx1MDAzZWFyY2gucG11LmlycV9udW07XFxuIFxcdFxcdHJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTtcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG4rXFx0XFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIC1FTlhJTztcXG5AQCAtMTI1OSw2ICsxMzQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVU6XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6XFxuK1xcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbiBcXHRcXHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uNmJmYjIxZjAwNDQ0MjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5AQCAtMTkwLDcgKzE5MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3Jlc2V0X3N2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xcbi1cXHRib29sIGxvYWRlZDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nO1xcbitcXHRib29sIGxvYWRlZCA9IGZhbHNlO1xcbiBcXHR1MzIgcHN0YXRlO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlX2xvY2spO1xcbkBAIC0xOTgsMTAgKzE5OSwxNiBAQCB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5yZXNldF9zdGF0ZS5yZXNldCA9IGZhbHNlO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcXG4gXFxuLVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbi1cXHRsb2FkZWQgPSAodmNwdS1cXHUwMDNlY3B1ICE9IC0xKTtcXG4tXFx0aWYgKGxvYWRlZClcXG4rXFx0Z3VhcmQocHJlZW1wdCkoKTtcXG4rXFxuK1xcdHJ1bm5pbmcgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xcbitcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRpZiAoS1ZNX0JVR19PTihydW5uaW5nICE9IHZjcHUsIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdGxvYWRlZCA9IHRydWU7XFxuIFxcdFxcdGt2bV9hcmNoX3ZjcHVfcHV0KHZjcHUpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKSB7XFxuIFxcdFxcdGlmICh2Y3B1X2hhc19mZWF0dXJlKHZjcHUsIEtWTV9BUk1fVkNQVV9TVkUpKVxcbkBAIC0yNjksNyArMjc2LDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHRpZiAobG9hZGVkKVxcbiBcXHRcXHRrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG4tXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gfVxcbiBcXG4gdTMyIGt2bV9nZXRfcGFfYml0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjllOTA1ZDliZTlmNjdlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTMwMjAsMTcgKzMwMjAsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzXFxuLVxcdCAqIGFmZmVjdGVkIGJ5IEhQTUUuXFxuLVxcdCAqL1xcbi1cXHRpZiAoKG9sZCBeIHZhbCkgXFx1MDAyNiBNRENSX0VMMl9IUE1FKVxcbi1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK1xcdGt2bV9wbXVfaGFuZGxlX21kY3IodmNwdSwgb2xkLCB2YWwpO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2V0X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCxcXG4rXFx0XFx0ICAgIHU2NCB2YWwpXFxuK3tcXG4rXFx0dTY0IG9sZCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyKTtcXG4rXFxuK1xcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcXG4rXFx0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgYWNjZXNzX3JhcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKVxcbkBAIC0zMTc3LDggKzMxODIsMTMgQEAgc3RhdGljIGludCBzZXRfaW1wX2lkX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXFxuIFxcbiBzdGF0aWMgdTY0IHJlc2V0X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKVxcbiB7XFxuLVxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVxcdTAwM2VyZWcsIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMpO1xcbi1cXHRyZXR1cm4gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycztcXG4rXFx0dTY0IG9sZCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZyk7XFxuK1xcdHU2NCB2YWwgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xcbitcXG4rXFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZywgdmFsKTtcXG4rXFx0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0zNzQxLDcgKzM3NTEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XFxuIFxcdEVMMl9SRUdfRklMVEVSRUQoU0NUTFIyX0VMMiwgYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCAwLFxcbiBcXHRcXHRcXHQgc2N0bHIyX2VsMl92aXNpYmlsaXR5KSxcXG4gXFx0RUwyX1JFR19WTkNSKEhDUl9FTDIsIHJlc2V0X2hjciwgMCksXFxuLVxcdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcXG4rXFx0U1lTX1JFR19VU0VSX0ZJTFRFUihNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDAsXFxuK1xcdFxcdFxcdCAgICBOVUxMLCBzZXRfbWRjciwgZWwyX3Zpc2liaWxpdHkpLFxcbiBcXHRFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSxcXG4gXFx0RUwyX1JFR19WTkNSKEhTVFJfRUwyLCByZXNldF92YWwsIDApLFxcbiBcXHRFTDJfUkVHX1ZOQ1JfRklMVChIRkdSVFJfRUwyLCBmZ3RfdmlzaWJpbGl0eSksXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxcbmluZGV4IGI1ZTU5NDIyMDRmYzY5Li4wYzMxYjcyZTM0MzVhNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG5AQCAtMzIsNiArMzIsNyBAQCBzdHJ1Y3Qga3ZtX3BtdSB7XFxuIFxcdHN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107XFxuIFxcdGludCBpcnFfbnVtO1xcbiBcXHRib29sIGNyZWF0ZWQ7XFxuK1xcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XFxuQEAgLTU2LDggKzU3LDEwIEBAIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcXG4rdm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7XFxuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXFxuIFxcdFxcdFxcdFxcdCAgICB1NjQgc2VsZWN0X2lkeCk7XFxuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpO1xcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xcbkBAIC0xMzMsNiArMTM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtMTYzLDYgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbisrKyBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUlxcdFxcdDJcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVVxcdFxcdDNcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTXFx0NFxcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXFx0NVxcbiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXFx0XFx0MVxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVJcXHRcXHQwXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUlxcdFxcdDFcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXFxuaW5kZXggZGRmODFmMjQ5NTZiYTAuLjFjNjMzMzQzZDU3NjY4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxcbkBAIC0xNDIsMzIgKzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZClcXG4gXFx0cmV0dXJuIGZpZWxkIC8gZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XFxuIH1cXG4gI2RlZmluZSBmaWVsZF9tYXgoZmllbGQpXFx0KCh0eXBlb2YoZmllbGQpKWZpZWxkX21hc2soZmllbGQpKVxcbi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKVxcdFxcXFxcXG4rI2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVxcdFxcdFxcdFxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbiB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXFx1MDAyNlxcdTAwMjYgKHYgXFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVxcdFxcXFxcXG4gXFx0XFx0X19maWVsZF9vdmVyZmxvdygpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cmV0dXJuIHRvKCh2IFxcdTAwMjYgZmllbGRfbWFzayhmaWVsZCkpICogZmllbGRfbXVsdGlwbGllcihmaWVsZCkpO1xcdFxcXFxcXG4gfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfcmVwbGFjZV9iaXRzKF9fIyN0eXBlIG9sZCxcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVxcdFxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsXFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdHJldHVybiAob2xkIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbitcXHRyZXR1cm4gKG9sZCBcXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1xcdFxcXFxcXG4gfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHR5cGUjI3BfcmVwbGFjZV9iaXRzKF9fIyN0eXBlICpwLFxcdFxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsXFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcXHRcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCpwID0gKCpwIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbitcXHQqcCA9ICgqcCBcXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1xcdFxcXFxcXG4gfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIG5hbWUjI19nZXRfYml0cyh0eXBlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbiB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyZXR1cm4gKGZyb20odikgXFx1MDAyNiBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XFx0XFx0XFxcXFxcbiB9XFxuLSNkZWZpbmUgX19NQUtFX09QKHNpemUpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcXHRcXFxcXFxuLVxcdF9fX19NQUtFX09QKGJlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4tXFx0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLCwpXFxuLV9fX19NQUtFX09QKHU4LHU4LCwpXFxuKyNkZWZpbmUgX19NQUtFX09QKHNpemUpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX19fTUFLRV9PUChsZSMjc2l6ZSxfX2xlIyNzaXplLHUjI3NpemUsY3B1X3RvX2xlIyNzaXplLGxlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4rXFx0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcXHRcXFxcXFxuK1xcdF9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpXFxuK19fX19NQUtFX09QKHU4LHU4LHU4LCwpXFxuIF9fTUFLRV9PUCgxNilcXG4gX19NQUtFX09QKDMyKVxcbiBfX01BS0VfT1AoNjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuaW5kZXggMjIyMjMzOTU5NjllMGYuLmI1ZjhjZThkMzQ1MWYyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuQEAgLTI1LDYgKzI1LDE0IEBAXFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0J3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXFxuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFxcdFxcdDMxXFxuIFxcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTU5cXG4rI2RlZmluZSBNRENSX0VMMl9IUE1OXFx0XFx0XFx0R0VOTUFTS19VTEwoNCwgMClcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcXG4rI2RlZmluZSBNRENSX0VMMl9IUE1FXFx0XFx0XFx0QklUX1VMTCg3KVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCB2cG11X3ZtIHtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG5AQCAtNDAzLDEyICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XFxuIFxcdHU4IHBtdXZlciwgZWM7XFxuLVxcdHU2NCBkZnIwLCBpcnEgPSAyMztcXG4tXFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcXG4tXFx0XFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbi1cXHRcXHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxcbi1cXHRcXHQuYWRkciA9ICh1NjQpXFx1MDAyNmlycSxcXG4tXFx0fTtcXG4rXFx0dTY0IGRmcjA7XFxuIFxcbiBcXHQvKiBUaGUgdGVzdCBjcmVhdGVzIHRoZSB2cG11X3ZtIG11bHRpcGxlIHRpbWVzLiBFbnN1cmUgYSBjbGVhbiBzdGF0ZSAqL1xcbiBcXHRtZW1zZXQoXFx1MDAyNnZwbXVfdm0sIDAsIHNpemVvZih2cG11X3ZtKSk7XFxuQEAgLTQzNCw4ICs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiBcXHRURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBwbXV2ZXIgXFx1MDAzZT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVAsXFxuIFxcdFxcdCAgICBcXFwiVW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcXFwiLCBwbXV2ZXIpO1xcbi1cXG4tXFx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFxcdTAwMjZpcnFfYXR0cik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxcbkBAIC00NjEsMTUgKzQ2MiwxNyBAQCBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZV9kb25lKHZvaWQpXFxuK3tcXG4rXFx0R1VFU1RfRE9ORSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0dW5zaWduZWQgaW50IHByZXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4tXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4tXFxuIFxcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XFxuIFxcbiBcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG5AQCAtNDgxLDYgKzQ4NCwyNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXFxuIFxcdFxcdFxcdCAgICBucl9jb3VudGVycywgcHJldik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0VEVTVF9BU1NFUlQoIXJldCwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYm9vbCBleHBlY3RfZmFpbClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbitcXG4rXFx0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFxuK1xcdHNldF9ucl9jb3VudGVycyh2Y3B1LCBucl9jb3VudGVycywgZXhwZWN0X2ZhaWwpO1xcbiBcXG4gXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbiB9XFxuQEAgLTQ4OSwxNSArNTEyLDE1IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2xcXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxcbiAgKiBhbmQgcnVuIHRoZSB0ZXN0LlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXFxuK3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuIHtcXG4gXFx0dTY0IHNwO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiVGVzdCB3aXRoIHBtY3JfbiAlbHVcXFxcblxcXCIsIHBtY3Jfbik7XFxuK1xcdHByX2RlYnVnKFxcXCJUZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcXFxuXFxcIiwgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4gXFxuLVxcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcXG4rXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpO1xcbiBcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbiBcXG4gXFx0LyogU2F2ZSB0aGUgaW5pdGlhbCBzcCB0byByZXN0b3JlIHRoZW0gbGF0ZXIgdG8gcnVuIHRoZSBndWVzdCBhZ2FpbiAqL1xcbkBAIC01MzEsMTQgKzU1NCwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcXG4gICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mXFxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcXG4gXFx0dTY0IHZhbGlkX2NvdW50ZXJzX21hc2ssIG1heF9jb3VudGVyc19tYXNrO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xcbitcXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XFxuIFxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuIFxcbiBcXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcXG5AQCAtNTgzLDE2ICs2MDYsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXG4rXFx0cHJfZGVidWcoXFxcIk1EQ1JfRUwyIHRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXHRpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkge1xcbitcXHRcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxcbitcXHRcXHRcXHRcXHRcXHQgTURDUl9FTDJfSFBNTik7XFxuK1xcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxcbitcXHRcXHQgICAgIGV4cGVjdGVkX21kY3IpO1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KSB7XFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0XFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0XFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXHR9XFxuK1xcbitcXHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXFx1MDAyNmlycSk7XFxuK1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcXG4rXFx0XFx0ICAgIFxcXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19JTklUIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcXG4rXFx0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXFxuK1xcdFxcdCAgICAgZXhwZWN0ZWRfbWRjcik7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXG4rXFx0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFxcdTAwMjZpbml0KTtcXG4rXFx0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcXG4rXFx0YWFyY2g2NF92Y3B1X3NldHVwKHZjcHUsIFxcdTAwMjZpbml0KTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSA9PSBwbWNyX24sXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KVxcXCIsXFxuK1xcdFxcdCAgICBwbWNyX24sIEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSk7XFxuK1xcbitcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rfVxcbitcXG4gLypcXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgYW5kIGF0dGVtcHQgdG8gc2V0IHRoZSBQTUNSX0VMMC5OIGZvclxcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cXG4gICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuIHtcXG4gXFx0cHJfZGVidWcoXFxcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXFxcblxcXCIsIHBtY3Jfbik7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTtcXG4rXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbkBAIC02MjIsMjIgKzcyMywxNDcgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcXG4gXFx0cmV0dXJuIHN1cHBvcnRlZDtcXG4gfVxcbiBcXG4taW50IG1haW4odm9pZClcXG4rc3RhdGljIHZvaWQgdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4odm9pZClcXG4ge1xcbi1cXHR1NjQgaSwgcG1jcl9uO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdSwgKnN0b3BwZWRfdmNwdTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlKDIpO1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcXHUwMDI2aW5pdCk7XFxuK1xcdGluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFx0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5yX2NvdW50ZXJzKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuIFxcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuLVxcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZyh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0dTY0IGk7XFxuIFxcbi1cXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcXG4tXFx0XFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xcbi1cXHRcXHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFx0XFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbitcXHRcXHRydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcXHUwMDNjIEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcXG4tXFx0XFx0cnVuX2Vycm9yX3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3BtdV9ldmVudF9maWx0ZXIgZmlsdGVyID0geyAubmV2ZW50cyA9IDAgfTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnN0b3BwZWRfdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXG4rXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuK1xcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0hBU19ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcdFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVOWElPLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHN1Y2NlZWRzLiAqL1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0aW5nIGFuIGV2ZW50IGZpbHRlciB3aGVuIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4rXFx0ICogcmVzdWx0cyBpbiBFQlVTWS5cXG4rXFx0ICovXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFxcdTAwMjZmaWx0ZXIpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1ksXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYW4gZXZlbnQgZmlsdGVyIGhhc1xcbitcXHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXFx1MDAyNmZpbHRlcik7XFxuK1xcbitcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4rXFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFxuK1xcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxcbitcXHQgKiByZXN1bHRzIGluIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0dm0gPSB2bV9jcmVhdGUoMik7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFxcdTAwMjZpbml0KTtcXG4rXFx0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcXG4rXFx0cnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFxcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xcbitcXHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFx0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXG4rXFx0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XFxuK31cXG4rXFxuK2ludCBtYWluKHZvaWQpXFxuK3tcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcXG4rXFxuK1xcdHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKCk7XFxuK1xcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xcbitcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkoKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE0OjQ2LjY2ODM1ODI4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MDQwMTExMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9wbXVfaGFuZGxlX21kY3JcIixcbiAgICBcImt2bV92Y3B1X2xvYWRfcG11XCIsXG4gICAgXCJrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlcIixcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVyc1wiLFxuICAgIFwia3ZtX3BtdV9wcm9iZV9hcm1wbXVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGZlYXR1cmUgKEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSkgYW5kIG1vZGlmaWVzIFBNVSBldmVudCBjcmVhdGlvbiwgbG9hZGluZywgYW5kIHJlbG9hZGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1vZGlmaWVzIGNvcmUgS1ZNIFBNVSBlbXVsYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTNhOGM3MDc0YjUwYjE2NWE1NTE5MGZlMjliYWM2MDRmYWYyNmRlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDA2OjE0OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMWQ1OTJlNzBiZGVhM2QgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuQEAgLTc0LDcgKzc0LDggQEAgaXJxY2hpcC5cbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5YSU8gICBQTVV2MyBub3QgcHJvcGVybHkgY29uZmlndXJlZCBvciBpbi1rZXJuZWwgaXJxY2hpcCBub3RcbiBcdCBcdCAgY29uZmlndXJlZCBhcyByZXF1aXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgYXR0cmlidXRlXG4tXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXG4rXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuK1x0XHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZVxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuQEAgLTExNiwxNCArMTE3LDE0IEBAIHVzaW5nIGV2ZW50IDB4MTEgKENQVV9DWUNMRVMpLlxuIFxuIDpSZXR1cm5zOlxuIFxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3Jcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcbisgICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgb3IgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcbiBcdCAtRU5YSU8gICBQTVUgbm90IGZvdW5kXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXG4gZm9yIHRoZSBwdXJwb3NlIG9mIFBNVSBlbXVsYXRpb24uIFRoZSBQTVUgaWRlbnRpZmllciBjYW4gYmUgcmVhZCBmcm9tIHRoZSBcInR5cGVcIlxuQEAgLTE2NSw2ICsxNjYsMjcgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxuIHNlbGVjdGVkIFBNVS4gU2VsZWN0aW5nIGEgbmV3IFBNVSBjYW5jZWxzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGlzXG4gYXR0cmlidXRlLlxuIFxuKzEuNiBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpQYXJhbWV0ZXJzOiBubyBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbiBrdm1fZGV2aWNlX2F0dHIuYWRkclxuK1xuKzpSZXR1cm5zOlxuK1xuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1bixcbitcdFx0ICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQgb3JcbitcdFx0ICBhIGhhcmR3YXJlIFBNVSBoYXMgYWxyZWFkeSBiZWVuIHNwZWNpZmllZFxuK1x0IC1FTlhJTyAgIEF0dGVtcHRlZCB0byBnZXQgYmVmb3JlIHNldHRpbmdcbitcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcbitcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0lmIHNldCwgS1ZNIGVtdWxhdGVzIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLlxuK1xuK1doZW4gdGhpcyBhdHRyaWJ1dGUgaXMgZW5hYmxlZCwgdGhlIHZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVXG4rdGhhdCBoYXMgYSBQTVUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFRoaXNcbithdHRyaWJ1dGUgaXMgVk0tc2NvcGVkLlxuK1xuIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYmFlMmM0ZjkyZWY1YzAuLjM5OThlNjZjNjU3MTUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0zNjcsNiArMzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXHRcdDEwXG4gXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXHRcdFx0XHQxMVxuK1x0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aCBhbiBleHBsaWNpdGx5IHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgKi9cbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lUXHRcdFx0MTJcbitcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzICovXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQxM1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuaW5kZXggMTk5NWUxMTk4NjQ4ZTguLmE1YWU2MjgyMDRhMTIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9lcnJhdGFbXSA9IHtcbiBcdHtcbiBcdFx0LmRlc2MgPSBcIkFwcGxlIElNUERFRiBQTVV2MyBUcmFwc1wiLFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X1dPUktBUk9VTkRfUE1VVjNfSU1QREVGX1RSQVBTLFxuLVx0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9MT0NBTF9DUFVfRVJSQVRVTSxcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXG4gXHRcdC5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MyxcbiBcdFx0LmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcyxcbiBcdH0sXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLmE4NjZiZWI4ZDg3M2QzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtNjUxLDYgKzY1MSw3IEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xuK1x0aW50IGxhc3RfY3B1ID0gdmNwdS1cdTAwM2VjcHU7XG4gXHRpbnQgKmxhc3RfcmFuO1xuIFxuIFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuQEAgLTcwMCw2ICs3MDEsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRpZiAoaGFzX3ZoZSgpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbitcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUsIGxhc3RfY3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuIFx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG5AQCAtNzQ5LDcgKzc1MSw2IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xuIFxuIFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XG4tXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2t2bV9hcm1fdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTE2NTIsMjkgKzE2NTMsMjYgQEAgc3RhdGljIGludCBfX2t2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBpbml0LVx1MDAzZWZlYXR1cmVzWzBdO1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbitcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0aWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAga3ZtX3ZjcHVfaW5pdF9jaGFuZ2VkKHZjcHUsIGluaXQpKVxuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Yml0bWFwX2NvcHkoa3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcywgXHUwMDI2ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7XG4gXG4gXHRyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE5vdyB3ZSBrbm93IHdoYXQgaXQgaXMsIHdlIGNhbiByZXNldCBpdC4gKi9cbiBcdGt2bV9yZXNldF92Y3B1KHZjcHUpO1xuIFxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuIFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBWQ1BVX0lOSVRJQUxJWkVEKTtcbi1cdHJldCA9IDA7XG4tb3V0X3VubG9jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTY5MCw2ICsxNjg4LDggQEAgc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4rXHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4gXHRpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKVxuIFx0XHRyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5pbmRleCA5ODMwNWJiZmMwOTVhYi4uZmY1ZDVmNjZhOWMwOWYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5AQCAtNyw5ICs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiArMTcsMTMgQEBcbiBcbiAjZGVmaW5lIFBFUkZfQVRUUl9DRkcxX0NPVU5URVJfNjRCSVRcdEJJVCgwKVxuIFxuKyNkZWZpbmUgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0tcdChNRENSX0VMMl9IUE1OIHwgTURDUl9FTDJfSFBNRCB8IFxcXG4rXHRcdFx0XHRcdCBNRENSX0VMMl9ITFApXG4rXG4rLypcbisgKiBhcm1fcG11cyBpcyBhcHBlbmQtb25seS4ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkgZmVlZHMgcGVyc2lzdGVudFxuKyAqIFZNIHN0YXRlLCBzbyBhIHRydWUgcmVzdWx0IG11c3QgcmVtYWluIHZhbGlkIGFmdGVyIHRoZSBjaGVjay5cbisgKi9cbiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKGFybV9wbXVzX2xvY2spO1xuIFxuQEAgLTI2LDcgKzMzLDYgQEAgc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gXG4gYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiB7XG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2YXJtX3BtdXMpO1xuIH1cbiBcbkBAIC04MCw2ICs4NiwxMSBAQCB1NjQga3ZtX3BtdV9ldnR5cGVyX21hc2soc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIG1hc2s7XG4gfVxuIFxuK3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XG4gICogQHBtYzogY291bnRlciBjb250ZXh0XG5AQCAtMzE3LDE3ICszMjgsMjIgQEAgdTY0IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dTY0IHZhbCA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCBrdm1fdmNwdV9yZWFkX3BtY3IodmNwdSkpO1xuK1x0dTY0IG4gPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycztcbiBcbi1cdGlmICh2YWwgPT0gMClcbitcdGlmIChuID09IDApXG4gXHRcdHJldHVybiBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBHRU5NQVNLKHZhbCAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuK1x0XHRyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiB7XG4tXHRpZiAoIXBtYy1cdTAwM2VwZXJmX2V2ZW50KSB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbitcbitcdGlmICghcG1jLVx1MDAzZXBlcmZfZXZlbnQgfHxcbitcdCAgICAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSxcbitcdFx0XHQgICAgICAgXHUwMDI2dG9fYXJtX3BtdShwbWMtXHUwMDNlcGVyZl9ldmVudC1cdTAwM2VwbXUpLVx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcbiBcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtNjA2LDYgKzYyMiwyMSBAQCB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIFx0fVxuIH1cbiBcbit2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKVxuK3tcbitcdHU2NCBjaGFuZ2VkID0gb2xkIF4gdmFsO1xuK1xuK1x0LypcbitcdCAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG9cbitcdCAqIHRoZXNlIGZpZWxkcyByZXF1aXJlIG5ldyBwZXJmIGV2ZW50IGZpbHRlcnMgYW5kIHNhbXBsZSBwZXJpb2RzLlxuK1x0ICovXG4rXHRpZiAoY2hhbmdlZCBcdTAwMjYgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0spXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbXUuZXZlbnRzX25lZWRfcmVjcmVhdGUgPSB0cnVlO1xuK1xuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IChNRENSX0VMMl9IUE1FIHwgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0spKVxuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG5AQCAtNjQ5LDEwICs2ODAsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbitzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJ3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDE0ICs2OTIsMjcgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG4tLyoqXG4tICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuLSAqL1xuLXN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4re1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbitcbitcdGd1YXJkKHJjdSkoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiBwbXU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcbiBcdGludCBldmVudHNlbDtcbkBAIC03MDQsNyArNzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0ICogRG9uJ3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJ3JlIHJ1bm5pbmcgb24gaGFyZHdhcmUgdGhhdCByZXF1aXJlc1xuIFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxuIFx0ICovXG4tXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KHZjcHUtXHUwMDNla3ZtLCBldmVudHNlbCk7XG4rXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KGFybV9wbXUsIGV2ZW50c2VsKTtcbiBcdGlmIChldmVudHNlbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc0OSw2ICs3OTEsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0cG1jLVx1MDAzZXBlcmZfZXZlbnQgPSBldmVudDtcbiB9XG4gXG4rLyoqXG4rICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuKyAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuKyAqL1xuK3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbitcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuK1xuK1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0ZG8ge1xuK1x0XHRcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpKTtcbitcbitcdFx0XHRpZiAoIWFybV9wbXUpIHtcbitcdFx0XHRcdHByX3dhcm5fb25jZShcImt2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXG5cIik7XG4rXHRcdFx0XHRhZGRfdGFpbnQoVEFJTlRfQ1BVX09VVF9PRl9TUEVDLCBMT0NLREVQX1NUSUxMX09LKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXG4rXHRcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xuK1x0XHR9IHdoaWxlICghY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNzg5LDQzICs4NTcsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGVudHJ5LVx1MDAzZWFybV9wbXUgPSBwbXU7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcbi17XG4tXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuLVx0aW50IGNwdTtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZhcm1fcG11c19sb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuLVx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbi1cdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4tXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4tXHQgKlxuLVx0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4tXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbi1cdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4tXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuLVx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4tXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4tXHQgKlxuLVx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4tXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4tXHQgKiBjYXJyaWVkIGhlcmUuXG4tXHQgKi9cbi1cdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbi1cdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbi1cbi1cdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuLVx0XHRcdHJldHVybiBwbXU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gTlVMTDtcbitcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4gfVxuIFxuIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpXG5AQCAtODcwLDYgKzkwMiwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0dTY0IHZhbCwgbWFzayA9IDA7XG4gXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xuIFxuK1x0LypcbitcdCAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSdzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXG4rXHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxuK1x0ICovXG4rXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoIXBtY2VpZDEpIHtcbiBcdFx0dmFsID0gY29tcHV0ZV9wbWNlaWQwKGNwdV9wbXUpO1xuIFx0XHRiYXNlID0gMDtcbkBAIC04OTcsOSArOTM2LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHRyZXR1cm4gdmFsIFx1MDAyNiBtYXNrO1xuIH1cbiBcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxuK3tcbitcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fCB2Y3B1LVx1MDAzZWNwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbit9XG4rXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnBtdTtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4rXHRpbnQgaTtcbitcbitcdGlmIChwbXUtXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1ZNX0FSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcbitcdFx0XHRrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTtcbitcbitcdFx0cG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlID0gZmFsc2U7XG4rXHR9XG4gXG4gXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1PVlNTRVRfRUwwLCBcdTAwMjY9LCBtYXNrKTtcbiBcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTUlOVEVOU0VUX0VMMSwgXHUwMDI2PSwgbWFzayk7XG5AQCAtMTAwOCw2ICsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFxuK1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdC8qXG4gXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcbiBcdCAqIGV2ZW50LCB0aG91Z2ggdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9mIG5vbi1QTVV2MyBoYXJkd2FyZS5cbkBAIC0xMDIyLDMwICsxMDgyLDEyIEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIGJpdG1hcF93ZWlnaHQoYXJtX3BtdS1cdTAwM2VjbnRyX21hc2ssIEFSTVY4X1BNVV9NQVhfR0VORVJBTF9DT1VOVEVSUyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yKVxuLXtcbi1cdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG5yO1xuLVxuLVx0LyogUmVzZXQgTURDUl9FTDIuSFBNTiBiZWhpbmQgdGhlIHZjcHVzJyBiYWNrLi4uICovXG4tXHRpZiAodGVzdF9iaXQoS1ZNX0FSTV9WQ1BVX0hBU19FTDIsIGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMpKSB7XG4tXHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdFx0dW5zaWduZWQgbG9uZyBpO1xuLVxuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbi1cdFx0XHR1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xuLVx0XHRcdHZhbCBcdTAwMjY9IH5NRENSX0VMMl9IUE1OO1xuLVx0XHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1EQ1JfRUwyX0hQTU4sIGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XG4tXHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0a3ZtLVx1MDAzZWFyY2guYXJtX3BtdSA9IGFybV9wbXU7XG4tXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSk7XG4rXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEwNjIsNyArMTEwNCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiAgKi9cbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcbitcdC8qXG4rXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuK1x0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbitcdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4rXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4rXHQgKlxuK1x0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4rXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbitcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4rXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuK1x0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4rXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4rXHQgKlxuK1x0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4rXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseSwgb3IgcmVxdWVzdCBmaXhlZC1jb3VudGVycy1vbmx5XG4rXHQgKiBlbXVsYXRpb24uIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZyBjYXJyaWVkIGhlcmUuXG4rXHQgKi9cbitcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XG4gXG4gXHRpZiAoIWFybV9wbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuQEAgLTEwNzksMTcgKzExMzgsMTkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbiBcdGludCByZXQgPSAtRU5YSU87XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiBcdFx0YXJtX3BtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4gXHRcdGlmIChhcm1fcG11LVx1MDAzZXBtdS50eXBlID09IHBtdV9pZCkge1xuIFx0XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHxcbitcdFx0XHQgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHxcbiBcdFx0XHQgICAgKGt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLmFybV9wbXUgIT0gYXJtX3BtdSkpIHtcbiBcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHRcdFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XG4gXHRcdFx0Y3B1bWFza19jb3B5KGt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcbiBcdFx0XHRyZXQgPSAwO1xuQEAgLTEwOTcsMjEgKzExNTgsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcbitcdCAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4rXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSAwO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXG4rXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5hcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChuIFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcbitcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTE3NSw3ICsxMjU0LDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdFx0ICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkpXG4rXHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyKSB7XG5AQCAtMTIyMCw2ICsxMjk5LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcbiBcdH1cbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuK1x0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xuIFx0fVxuQEAgLTEyNDYsNiArMTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdGlycSA9IHZjcHUtXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcbiBcdFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xuIFx0fVxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4rXHRcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xMjU5LDYgKzEzNDMsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuIFx0XHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuaW5kZXggYjk2M2ZkOTc1YWFjYWYuLjZiZmIyMWYwMDQ0NDI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuQEAgLTE5MCw3ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xuLVx0Ym9vbCBsb2FkZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmc7XG4rXHRib29sIGxvYWRlZCA9IGZhbHNlO1xuIFx0dTMyIHBzdGF0ZTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGVfbG9jayk7XG5AQCAtMTk4LDEwICsxOTksMTYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2Y3B1LVx1MDAzZWFyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHByZWVtcHRfZGlzYWJsZSgpO1xuLVx0bG9hZGVkID0gKHZjcHUtXHUwMDNlY3B1ICE9IC0xKTtcbi1cdGlmIChsb2FkZWQpXG4rXHRndWFyZChwcmVlbXB0KSgpO1xuK1xuK1x0cnVubmluZyA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4rXHRpZiAocnVubmluZykge1xuK1x0XHRpZiAoS1ZNX0JVR19PTihydW5uaW5nICE9IHZjcHUsIHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdGxvYWRlZCA9IHRydWU7XG4gXHRcdGt2bV9hcmNoX3ZjcHVfcHV0KHZjcHUpO1xuK1x0fVxuIFxuIFx0aWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkge1xuIFx0XHRpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSlcbkBAIC0yNjksNyArMjc2LDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAobG9hZGVkKVxuIFx0XHRrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbi1cdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuIFxuIHUzMiBrdm1fZ2V0X3BhX2JpdHMoc3RydWN0IGt2bSAqa3ZtKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5pbmRleCA1ZDVjNTc5ZDQ1NzkwMi4uOWU5MDVkOWJlOWY2N2UgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5AQCAtMzAyMCwxNyArMzAyMCwyMiBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXG4tXHQvKlxuLVx0ICogUmVxdWVzdCBhIHJlbG9hZCBvZiB0aGUgUE1VIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBjb3VudGVyc1xuLVx0ICogYWZmZWN0ZWQgYnkgSFBNRS5cbi1cdCAqL1xuLVx0aWYgKChvbGQgXiB2YWwpIFx1MDAyNiBNRENSX0VMMl9IUE1FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rXHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IHNldF9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsXG4rXHRcdCAgICB1NjQgdmFsKVxuK3tcbitcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4rXG4rXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4rXHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgYm9vbCBhY2Nlc3NfcmFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ICAgICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG5AQCAtMzE3Nyw4ICszMTgyLDEzIEBAIHN0YXRpYyBpbnQgc2V0X2ltcF9pZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLFxuIFxuIHN0YXRpYyB1NjQgcmVzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG4ge1xuLVx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4rXHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcpO1xuK1x0dTY0IHZhbCA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xuK1xuK1x0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwpO1xuK1x0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XG4rXG4rXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiAvKlxuQEAgLTM3NDEsNyArMzc1MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcbiBcdEVMMl9SRUdfRklMVEVSRUQoU0NUTFIyX0VMMiwgYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCAwLFxuIFx0XHRcdCBzY3RscjJfZWwyX3Zpc2liaWxpdHkpLFxuIFx0RUwyX1JFR19WTkNSKEhDUl9FTDIsIHJlc2V0X2hjciwgMCksXG4tXHRFTDJfUkVHKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCksXG4rXHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcbitcdFx0XHQgICAgTlVMTCwgc2V0X21kY3IsIGVsMl92aXNpYmlsaXR5KSxcbiBcdEVMMl9SRUcoQ1BUUl9FTDIsIGFjY2Vzc19ydywgcmVzZXRfdmFsLCBDUFRSX05WSEVfRUwyX1JFUzEpLFxuIFx0RUwyX1JFR19WTkNSKEhTVFJfRUwyLCByZXNldF92YWwsIDApLFxuIFx0RUwyX1JFR19WTkNSX0ZJTFQoSEZHUlRSX0VMMiwgZmd0X3Zpc2liaWxpdHkpLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuaW5kZXggYjVlNTk0MjIwNGZjNjkuLjBjMzFiNzJlMzQzNWE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbkBAIC0zMiw2ICszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHtcbiBcdHN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107XG4gXHRpbnQgaXJxX251bTtcbiBcdGJvb2wgY3JlYXRlZDtcbitcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTYsOCArNTcsMTAgQEAgYm9vbCBrdm1fcG11X3Nob3VsZF9ub3RpZnlfdXNlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuK3ZvaWQga3ZtX3BtdV9oYW5kbGVfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXG4gXHRcdFx0XHQgICAgdTY0IHNlbGVjdF9pZHgpO1xuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpO1xuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuQEAgLTEzMyw2ICsxMzYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBkYXRhLCB1NjQgc2VsZWN0X2lkeCkge31cbiBzdGF0aWMgaW5saW5lIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTYzLDYgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV91cGRhdGVfdmNwdV9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuaW5kZXggZGRmODFmMjQ5NTZiYTAuLjFjNjMzMzQzZDU3NjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmhcbkBAIC0xNDIsMzIgKzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZClcbiBcdHJldHVybiBmaWVsZCAvIGZpZWxkX211bHRpcGxpZXIoZmllbGQpO1xuIH1cbiAjZGVmaW5lIGZpZWxkX21heChmaWVsZClcdCgodHlwZW9mKGZpZWxkKSlmaWVsZF9tYXNrKGZpZWxkKSlcbi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4rI2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXHUwMDI2XHUwMDI2ICh2IFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVx0XFxcbiBcdFx0X19maWVsZF9vdmVyZmxvdygpO1x0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIHRvKCh2IFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XHRcXFxuIH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsXHRcXFxuLVx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX3JlcGxhY2VfYml0cyh0eXBlIG9sZCxcdFx0XFxcbitcdFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRyZXR1cm4gKG9sZCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuK1x0cmV0dXJuIChvbGQgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXHRcdFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsXHRcdFxcXG4gXHRcdFx0XHRcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVx0XHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0KnAgPSAoKnAgXHUwMDI2IH50byhmaWVsZCkpIHwgdHlwZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbitcdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRyZXR1cm4gKGZyb20odikgXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcdFx0XFxcbiB9XG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcbi1fX19fTUFLRV9PUCh1OCx1OCwsKVxuKyNkZWZpbmUgX19NQUtFX09QKHNpemUpXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuK1x0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4rXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsdSMjc2l6ZSwsKVxuK19fX19NQUtFX09QKHU4LHU4LHU4LCwpXG4gX19NQUtFX09QKDE2KVxuIF9fTUFLRV9PUCgzMilcbiBfX01BS0VfT1AoNjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbmluZGV4IDIyMjIzMzk1OTY5ZTBmLi5iNWY4Y2U4ZDM0NTFmMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbkBAIC0yNSw2ICsyNSwxNCBAQFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0J3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBUk1WOF9QTVVfQ1lDTEVfSURYXHRcdDMxXG4gXG4rI2lmbmRlZiBNRENSX0VMMl9IUE1OXG4rI2RlZmluZSBNRENSX0VMMl9IUE1OXHRcdFx0R0VOTUFTS19VTEwoNCwgMClcbisjZW5kaWZcbitcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcbisjZGVmaW5lIE1EQ1JfRUwyX0hQTUVcdFx0XHRCSVRfVUxMKDcpXG4rI2VuZGlmXG4rXG4gc3RydWN0IHZwbXVfdm0ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtNDAzLDEyICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4gXHR1OCBwbXV2ZXIsIGVjO1xuLVx0dTY0IGRmcjAsIGlycSA9IDIzO1xuLVx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcbi1cdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuLVx0XHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxuLVx0XHQuYWRkciA9ICh1NjQpXHUwMDI2aXJxLFxuLVx0fTtcbitcdHU2NCBkZnIwO1xuIFxuIFx0LyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi9cbiBcdG1lbXNldChcdTAwMjZ2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpO1xuQEAgLTQzNCw4ICs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIFx0VEVTVF9BU1NFUlQocG11dmVyICE9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBtdXZlciBcdTAwM2U9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLFxuIFx0XHQgICAgXCJVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1wiLCBwbXV2ZXIpO1xuLVxuLVx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmlycV9hdHRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXG5AQCAtNDYxLDE1ICs0NjIsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxuK3tcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbiBcbi1cdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuLVx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbi1cbiBcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XG4gXG4gXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbkBAIC00ODEsNiArNDg0LDI2IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2xcbiBcdFx0XHQgICAgbnJfY291bnRlcnMsIHByZXYpO1xuIFx0ZWxzZVxuIFx0XHRURVNUX0FTU0VSVCghcmV0LCBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4rXHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbitcdFx0XHRcdFx0XHQgYm9vbCBleHBlY3RfZmFpbClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4rXG4rXHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbitcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXG4rXHRzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTtcbiBcbiBcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiB9XG5AQCAtNDg5LDE1ICs1MTIsMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbixcbiAgKiBhbmQgcnVuIHRoZSB0ZXN0LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHVcXG5cIiwgcG1jcl9uKTtcbitcdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXG5cIiwgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG5AQCAtNTMxLDE0ICs1NTQsMTQgQEAgc3RhdGljIHN0cnVjdCBwbXJlZ19zZXRzIHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gPSB7XG4gICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mXG4gICogdGhlIFBNVSByZWdpc3RlciBzZXRzIGluIEB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdIGNvcnJlY3RseS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbitzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0dTY0IHNldF9yZWdfaWQsIGNscl9yZWdfaWQsIHJlZ192YWw7XG4gXHR1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7XG4gXG4tXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XG4rXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XG4gXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuIFxuIFx0dmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7XG5AQCAtNTgzLDE2ICs2MDYsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnVuX21kY3JfZWwyX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcbitcdHU2NCBpcnEgPSAyMztcbitcbitcdHByX2RlYnVnKFwiTURDUl9FTDIgdGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXG5cIixcbitcdFx0IHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdGlmICghdm1fc3VwcG9ydHNfZWwyKHZwbXVfdm0udm0pKSB7XG4rXHRcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdGV4cGVjdGVkX21kY3IgPSB1NjRfcmVwbGFjZV9iaXRzKG1kY3IsIEZJRUxEX01BWChNRENSX0VMMl9IUE1OKSxcbitcdFx0XHRcdFx0IE1EQ1JfRUwyX0hQTU4pO1xuK1x0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXG4rXHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuK1x0XHQgICAgXCJNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNTiB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpIHtcbitcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdFx0ICAgIFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4rXHR9XG4rXG4rXHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuK1x0XHQgICAgXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19TRVRfTlJfQ09VTlRFUlMgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCIsXG4rXHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcbitcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdCAgICBcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0lOSVQgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCIsXG4rXHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcbitcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcbitcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxuK1x0XHQgICAgIGV4cGVjdGVkX21kY3IpO1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbitcdFx0ICAgIFwiTURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCIsXG4rXHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcbitcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2cG11X3ZtLnZtLCBcdTAwMjZpbml0KTtcbitcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuK1x0YWFyY2g2NF92Y3B1X3NldHVwKHZjcHUsIFx1MDAyNmluaXQpO1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdFRFU1RfQVNTRVJUKEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSA9PSBwbWNyX24sXG4rXHRcdCAgICBcIk1EQ1JfRUwyLkhQTU4gaXMgbm90IHJlc2V0IGFmdGVyIElOSVQgKGV4cGVjdGVkICVsdSwgZ290ICVsdSlcIixcbitcdFx0ICAgIHBtY3JfbiwgRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpKTtcbitcbitcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK31cbitcbiAvKlxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIGFuZCBhdHRlbXB0IHRvIHNldCB0aGUgUE1DUl9FTDAuTiBmb3JcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cbiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHRwcl9kZWJ1ZyhcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXG5cIiwgcG1jcl9uKTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpO1xuK1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG5AQCAtNjIyLDIyICs3MjMsMTQ3IEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbi1pbnQgbWFpbih2b2lkKVxuK3N0YXRpYyB2b2lkIHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKHZvaWQpXG4ge1xuLVx0dTY0IGksIHBtY3JfbjtcbitcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1LCAqc3RvcHBlZF92Y3B1O1xuK1x0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcbitcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCByZXQ7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZSgyKTtcbitcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFx1MDAyNmluaXQpO1xuK1x0aW5pdC5mZWF0dXJlc1swXSB8PSBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7XG4rXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbitcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbitcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4rXHR2Y3B1X3J1bihydW5uaW5nX3ZjcHUpO1xuK1xuK1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsXG4rXHRcdFx0XHQgICAgIFx1MDAyNm5yX2NvdW50ZXJzKTtcbitcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4rXHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rXG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rfVxuIFxuLVx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuK3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbit7XG4rXHR1NjQgaTtcbiBcbi1cdHBtY3JfbiA9IGdldF9wbWNyX25fbGltaXQoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBwbWNyX247IGkrKykge1xuLVx0XHRydW5fYWNjZXNzX3Rlc3QoaSk7XG4tXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTtcbitcdFx0cnVuX2FjY2Vzc190ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuK1x0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rXHRcdHJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcdTAwM2MgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxuLVx0XHRydW5fZXJyb3JfdGVzdChpKTtcbitcdFx0cnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdGludCByZXQ7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4rXHRcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcbitcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSBzdWNjZWVkcy4gKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgc2V0LiAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0LypcbitcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuK1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcbitcdC8qXG4rXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXG4rXHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK1xuK1x0LypcbitcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbitcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZtID0gdm1fY3JlYXRlKDIpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbitcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdHZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcbitcdHRlc3RfY29uZmlnKDAsIHRydWUpO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbitcbitcdHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKCk7XG4rXHR0ZXN0X2NvbmZpZyhnZXRfcG1jcl9uX2xpbWl0KCksIGZhbHNlKTtcbitcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTQ6NDYuNjY4Mzk1Mjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzOTM0MTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQVJNNjQgUE1VIEVtdWxhdGlvbiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggcmV2aWV3aW5nIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmluZyBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0d2Vha3MgdGhlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uLiBJIHNlZSBpdCBpbnRyb2R1Y2VzIGEgbmV3IGF0dHJpYnV0ZSwgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAsIGFuZCBhbHRlcnMgaG93IFBNVSBldmVudHMgYXJlIHJlY3JlYXRlZCBhbmQgdGhlIG92ZXJhbGwgUE1VIGxvYWRpbmcvcmVsb2FkaW5nIHByb2Nlc3MuXG5cbkxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzIOKAkyBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIGBhcmNoL2FybTY0L2t2bS9hcm0uY2AsIGBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jYCwgYW5kIGBhcmNoL2FybTY0L2t2bS9yZXNldC5jYCDigJMgdGhpcyBpcyB1bmRvdWJ0ZWRseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIEtWTSBvbiBBUk02NC4gQW5kLCBpbXBvcnRhbnRseSwgc2luY2UgdGhpcyBpcyBLVk0sIHRoaXMgY2FuIGRlZmluaXRlbHkgYmUgYWNjZXNzZWQgYW5kIGluZmx1ZW5jZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIEknbSB0aGlua2luZyBhYm91dCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgY2FsbHMgd2l0aCB0aGUgbmV3IGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCwgYW5kIGFsc28gYEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTYCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGFyY2gvYXJtNjQva3ZtL2AsIHNvIGBDT05GSUdfS1ZNYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuIEl0J3MgYWxzbyBBUk02NC1zcGVjaWZpYywgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhbiBBUk02NCBzeXN0ZW0uXG5cblRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0J3MgbGlzdCB0aGVzZSBvdXQ6IGBrdm1fcG11X2hhbmRsZV9tZGNyYCwgYGt2bV92Y3B1X2xvYWRfcG11YCwgYGt2bV92Y3B1X3JlbG9hZF9wbXVgLCBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YCwgYGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVyc2AsIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAsIGBrdm1fYXJtX3BtdV92M19nZXRfYXR0cmAsIGBrdm1fYXJtX3BtdV92M19oYXNfYXR0cmAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50YCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXVgLCBhbmQgYGt2bV9wbXVfcHJvYmVfYXJtcG11YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgZnVuY3Rpb25zIHdoaWNoIGFyZSBoYW5kbGluZyB0aGUgY29yZSBjaGFuZ2VzLlxuXG5GaW5hbGx5LCBJJ2xsIGRvIGEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGBhcmNoL2FybTY0L2t2bS9gIGRpcmVjdG9yeSB0byBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNjYW5uaW5nIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBzaG93cyBgQ09ORklHX0tWTWAgaXMgaW5kZWVkIHRoZSBtYWluIHJlcXVpcmVtZW50LiBJIHN1c3BlY3QgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgbWlnaHQgYWxzbyBiZSBuZWVkZWQsIHNpbmNlIFBNVSBlbXVsYXRpb24gb2Z0ZW4gcmVsaWVzIG9uIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW5mcmFzdHJ1Y3R1cmUuIExldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTQ6NTUuODA3NzQwNTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM3ODQwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSFdfUEVSRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjgtXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6Mjk6a3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUub1xcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTMwLWt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICs9IHBhdXRoLm9cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jPTEyOT1zdGF0aWMgdm9pZCBfX2h5cF92Z2ljX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ1LSAqL1xcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jOjE0NjojaWZkZWYgQ09ORklHX0hXX1BFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ3LXN0YXRpYyBib29sIF9fcG11X3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE0OjU1LjkyODEyNzcwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzE3NzQxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipLVk0gUE1VIEVtdWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBwbXUtZW11bC5vYCBuZWNlc3NpdGF0ZXMgYENPTkZJR19IV19QRVJGX0VWRU5UU2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEhXX1BFUkZfRVZFTlRTYCwgYnV0IGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBpbmRlZWQgc3VmZmljaWVudC4gWWVzLCBgS1ZNYCBhbmQgYEhXX1BFUkZfRVZFTlRTYCBhcmUgYm90aCBuZWNlc3NhcnkuXG5cbk5vdywgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiBjYWxscyB0aGlzIGludHJvZHVjZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHJldmlldzogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3ZjcHVfcmVsb2FkX3BtdWAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11YCwgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAsIGFuZCBga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzYC5cblxuRmluYWxseSwgdG8gZ2V0IGEgdHJ1bHkgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgY2hlY2sgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgIGRpcmVjdGx5IHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgYW5kIGFsc28gdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTczMCwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTowMC45NTk5MDUzNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzgxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGt2bV9wbXVfaGFuZGxlX21kY3J8XnZvaWQga3ZtX3ZjcHVfbG9hZF9wbXV8XnN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz01OTU9dm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNjI0LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6NjI1OnZvaWQga3ZtX3BtdV9oYW5kbGVfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy02MjYte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz04OTg9dTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtOTM4LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6OTM5OnZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy05NDAte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMTMzPXN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExNjMtXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMTY0OnN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExNjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTowMS4wNjM2OTM5ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM1MTU4OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgS1ZNIFBNVSBFbXVsYXRpb24gb24gQVJNNjQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gS1ZNJ3MgUE1VIGVtdWxhdGlvbiBmb3IgQVJNNjQsIHdoaWNoIG1lYW5zIGl0J3MgZGVmaW5pdGVseSB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzOiBga3ZtX3BtdV9oYW5kbGVfbWRjcmAsIGBrdm1fdmNwdV9sb2FkX3BtdWAsIGBrdm1fdmNwdV9yZWxvYWRfcG11YCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXVgLCBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YCwgYGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVyc2AsIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAsIGFuZCBga3ZtX3BtdV9wcm9iZV9hcm1wbXVgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdGhvcm91Z2ggdGVzdGluZy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiByaWdodCBmb3IgdGhpcy4gSSBuZWVkIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgLiBKdXN0IHF1aWNrbHksIGxldCBtZSBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzLiBZZXAsIGBDT05GSUdfSFdfUEVSRl9FVkVOVFNgIGFuZCBgQ09ORklHX0tWTWAgYXJlIHRoZSByaWdodCBvbmVzLlxuXG5BbmQgbm93IEkgd2lsbCBxdWlja2x5IGNoZWNrIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAgYW5kIGBrdm1fYXJtX3BtdV92M19nZXRfYXR0cmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc2OSwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTowNi41OTg4NTg4MTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2NjUwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJ8XmludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9MTE4MD1zdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMTk2LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTE5NzppbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTE5OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMTAtXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMzExOmludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTU6MDcuMTc1NTQ4OTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYwNTQ5NTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQVJNNjQgUE1VIEVtdWxhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNhcGFiaWxpdHkgZm9yIHRoZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbjogYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIGV4aXN0aW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBhbmQgS1ZNJ3MgY29yZSBQTVUgZW11bGF0aW9uIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gYWZmZWN0IHRoZSBga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJgLCBga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHJgLCBhbmQgYGt2bV9hcm1fcG11X3YzX2hhc19hdHRyYCBmdW5jdGlvbnMsIHdoaWNoIGlzIHdoZXJlIHRoZSBuZXcgZmxhZyBpcyBiZWluZyBpbnRlZ3JhdGVkLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyBhZmZlY3RlZCBieSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlOiBga3ZtX3BtdV9oYW5kbGVfbWRjcmAsIGBrdm1fdmNwdV9sb2FkX3BtdWAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11YCwgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAsIGBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNgLCBhbmQgYGt2bV9wbXVfcHJvYmVfYXJtcG11YC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgY2FyZWZ1bGx5OyB0aGUgUE1VIGV2ZW50IGNyZWF0aW9uLCBsb2FkaW5nLCBhbmQgcmVsb2FkaW5nIGFyZSBrZXkgcG9pbnRzIGhlcmUgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoZXNlIHByb2JhYmx5IG5lZWQgc29tZSBleHRyYSBzY3J1dGlueSwgYXMgdGhleSBhcmUgbGlrZWx5IHRvIGludGVyYWN0IHdpdGggdGhlIG5ldyBjYXBhYmlsaXR5LlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgZmVhdHVyZSByZWxhdGVkIHRvIFBNVSBlbXVsYXRpb24sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLiBUaGF0IG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgdGhlIHVzZXItdmlzaWJsZSBiZWhhdmlvciBhbmQgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgd2l0aCB0aGF0IGluIG1pbmQuIFRoZSBtZW50aW9uIG9mIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgIGluIHRoZSBjb25maWdzIGlzIGltcG9ydGFudC5cblxuRmluYWxseSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgXCJzZXQtcmVzdWx0c1wiIGFyZSwgdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gd2lsbCBhY3R1YWxseSB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcxMCwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTU6MTUuNzgxMDQ3ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUxMDcwMTYsIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEhXX1BFUkZfRVZFTlRTIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiSFdfUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UU1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNToxNS45NjYxNzg3OTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMDI2ODUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQVJNNjQgSGFyZHdhcmUgUGVyZm9ybWFuY2UgRXZlbnRzIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYEhXX1BFUkZfRVZFTlRTYC4uLiB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIEFSTTY0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIGhvdyBpdCdzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSBpdCdzIGVpdGhlciBnb2luZyB0byBiZSB0dWNrZWQgYXdheSBpbiBgYXJjaC9hcm02NC9LY29uZmlnYCDigJMgbWFrZXMgdGhlIG1vc3Qgc2Vuc2Ug4oCTIG9yIHBlcmhhcHMgbGlua2VkIGluIGBpbml0L0tjb25maWdgIGlmIGl0J3MgZ290IHNvbWUgYnJvYWRlciBkZXBlbmRlbmN5IG9yIGdsb2JhbCBpbmZsdWVuY2UuIEdvdHRhIHF1aWNrbHkgY2hlY2sgYm90aC4gSXQncyBhYm91dCBrbm93aW5nIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgYW5kIGNvbW1vbiBsb2NhdGlvbnMuIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSB3aXRoIGEgYmxpbmQgc2VhcmNoIGlmIEkgY2FuIG5hcnJvdyBpdCBkb3duIHdpdGggdGhpcyBiYXNpYyBrbm93bGVkZ2Ugb2YgdGhlIHRyZWUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Njg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE1OjE5LjI5NjQ1MDY5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzOTY4NjYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFdfUEVSRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9MTI1Mz1jb25maWcgQ1BVX1RUQlIwX1BBTlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xMjU5LVxcbmFyY2gvYXJtL0tjb25maWc6MTI2MDpjb25maWcgSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybS9LY29uZmlnLTEyNjEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTE2MDY9Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MDktXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2MTA6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MjY4MD1jb25maWcgTk9ERVNfU0hJRlRcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTI2ODQtXFxuYXJjaC9taXBzL0tjb25maWc6MjY4NTpjb25maWcgSFdfUEVSRl9FVkVOVFNcXG5hcmNoL21pcHMvS2NvbmZpZy0yNjg2LVxcdGJvb2wgXFxcIkVuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTYyNj1jb25maWcgR1VTQV9SQlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTYzNS1cXG5hcmNoL3NoL0tjb25maWc6NjM2OmNvbmZpZyBIV19QRVJGX0VWRU5UU1xcbmFyY2gvc2gvS2NvbmZpZy02MzctXFx0Ym9vbCBcXFwiRW5hYmxlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3IgcGVyZiBldmVudHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE1OjIxLjkzNjE1MDc5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYxMTU5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IEltcGxpY2l0IEZlYXR1cmUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0ICpmZWVscyogbGlrZSBpdCBzaG91bGQgYmUgdGhlcmUsIGJ1dCB0aGUgdG9vbCBpc24ndCBleHBsaWNpdGx5IHNob3dpbmcgaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5LCBsZXQncyBjYWxsIGl0IHRoZSBlbHVzaXZlIFwiaXQsXCIgaXMgYWN0dWFsbHkgaW1wbGljaXRseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHBlcmhhcHMgYXMgYGRlZl9ib29sIHlgLCBhbmQgdGhlIGN1cnJlbnQgc2V0dXAganVzdCBkb2Vzbid0IHN1cmZhY2UgaXQuIFRoZSB0b29sIG1pZ2h0IHNpbXBseSBub3QgYmUgY29uZmlndXJlZCB0byByZWNvZ25pemUgaXQgY29ycmVjdGx5LCBtYXliZSBiZWNhdXNlIGl0J3Mgbm90IGEgc3RhbmRhcmQgcHJvbXB0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5TbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgdGhlIHNwZWNpZmljIGRlZmluaXRpb25zLCBhbmQgdGhlIGxpa2VseSBjYW5kaWRhdGUsIGF0IGxlYXN0IGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgaXMgYFBFUkZfRVZFTlRTYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgUEVSRl9FVkVOVFNgIGlzIHRoZSBrZXkgdG8gdW5sb2NraW5nIG9yIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIEknbSBvYnNlcnZpbmcuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyB0byBjaGVjaywgc28gbGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjcyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTU6MjUuNTk3MzE1MjA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTg1ODIzNTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFxcXCJQZXJmb3JtYW5jZSBtb25pdG9yaW5nXFxcIlxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjEyOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9SQVBMXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIkludGVsL0FNRCByYXBsIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzozNzpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuaW5pdC9LY29uZmlnPTIxMzg9bWVudSBcXFwiS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcXFwiXFxuaW5pdC9LY29uZmlnLTIxMzktXFxuaW5pdC9LY29uZmlnOjIxNDA6Y29uZmlnIFBFUkZfRVZFTlRTXFxuaW5pdC9LY29uZmlnLTIxNDEtXFx0Ym9vbCBcXFwiS2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE1OjI4LjE4MzE1MzkzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM5NTUyNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBcInRob3VnaHRzLFwiIHJlZmxlY3RpbmcgbXkgdW5kZXJzdGFuZGluZyBhcyBhbiBleHBlcnQ6XG5cbioqRm9jdXNpbmcgb24gS1ZNIGFuZCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nKipcblxuQWxyaWdodCwgZ2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBjb3JlIHRob3VnaHQgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBsZXQncyBpbW1lZGlhdGVseSBuYXJyb3cgdGhlIHNjb3BlIHRvIHR3byBrZXkgdG9vbHMsIGBLVk1gIGFuZCBgUEVSRl9FVkVOVFNgLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgcGVyZm9ybWFuY2UtcmVsYXRlZCBpbnZlc3RpZ2F0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdXNlIG9mIGBLVk1gIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgaHlwZXJ2aXNvci1iYXNlZCB2aXJ0dWFsaXphdGlvbiBzZXR1cCwgbWVhbmluZyB3ZSdyZSBkaXJlY3RseSBkZWFsaW5nIHdpdGggdmlydHVhbCBtYWNoaW5lcyAoVk1zKSBhbmQgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaG9zdCBoYXJkd2FyZS4gQW5kLCB0aGUgaW5jbHVzaW9uIG9mIGBQRVJGX0VWRU5UU2AgaXMga2V5IGJlY2F1c2UgaXQgbWVhbnMgd2UnbGwgYmUgZGl2aW5nIGRlZXAgaW50byBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycy4gV2UncmUgdGFsa2luZyBkZXRhaWxlZCBtZWFzdXJlbWVudHMgb2YgQ1BVIGN5Y2xlcywgY2FjaGUgbWlzc2VzLCBicmFuY2ggcHJlZGljdGlvbnMsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMg4oCTIHRoZSBuaXR0eS1ncml0dHkgb2Ygd2hhdCdzIGhhcHBlbmluZyAqaW5zaWRlKiB0aG9zZSBWTXMuIFRoaXMgYXBwcm9hY2ggYWxsb3dzIGZvciBkZXRhaWxlZCBhbmQgbnVhbmNlZCBldmFsdWF0aW9uIG9mIHNwZWNpZmljIHBlcmZvcm1hbmNlIGlzc3Vlcy4gSXTigJlzIGFuIGVmZmljaWVudCB3YXkgdG8gY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBnZXQgcmlnaHQgdG8gdGhlIHNvdXJjZSBvZiBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcy4gVGhpcyBpc24ndCBqdXN0IGEgaGlnaC1sZXZlbCBvdmVydmlldzsgdGhpcyBpcyBhIGRpYWdub3N0aWMgZGVlcCBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA4MiwiT3V0cHV0VG9rZW5zIjoyMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTozMi45MjI3MTE3MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2NTA3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 05:55:17 +0000 UTC FinishedAt: 2026-07-20 06:15:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "cb9360ae6549120975f20887840fb33d47c13898", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "cb9360ae6549120975f20887840fb33d47c13898", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "PERF_EVENTS" ], "series_id": "1632846b-448e-4fb6-bf91-13fd6ba99eae" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_pmu_handle_mdcr", "kvm_vcpu_load_pmu", "kvm_pmu_create_perf_event_with_pmu", "kvm_arm_pmu_v3_set_pmu_fixed_counters_only", "kvm_arm_pmu_v3_set_nr_counters", "kvm_pmu_probe_armpmu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaGFuZGxlX21kY3ImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfcHJvYmVfYXJtcG11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gZmVhdHVyZSAoS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKSBhbmQgbW9kaWZpZXMgUE1VIGV2ZW50IGNyZWF0aW9uLCBsb2FkaW5nLCBhbmQgcmVsb2FkaW5nIGxvZ2ljLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbW9kaWZpZXMgY29yZSBLVk0gUE1VIGVtdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzYThjNzA3NGI1MGIxNjVhNTUxOTBmZTI5YmFjNjA0ZmFmMjZkZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwNjoxNDo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xZDU5MmU3MGJkZWEzZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5AQCAtNzQsNyAmIzQzOzc0LDggQEAgaXJxY2hpcC5cbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5YSU8gICBQTVV2MyBub3QgcHJvcGVybHkgY29uZmlndXJlZCBvciBpbi1rZXJuZWwgaXJxY2hpcCBub3RcbiBcdCBcdCAgY29uZmlndXJlZCBhcyByZXF1aXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgYXR0cmlidXRlXG4tXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXG4mIzQzO1x0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3JcbiYjNDM7XHRcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FSU5WQUwgIEludmFsaWQgZmlsdGVyIHJhbmdlXG4gXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMTE2LDE0ICYjNDM7MTE3LDE0IEBAIHVzaW5nIGV2ZW50IDB4MTEgKENQVV9DWUNMRVMpLlxuIFxuIDpSZXR1cm5zOlxuIFxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4tICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4mIzQzOyAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBvciBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxuIFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXG4gZm9yIHRoZSBwdXJwb3NlIG9mIFBNVSBlbXVsYXRpb24uIFRoZSBQTVUgaWRlbnRpZmllciBjYW4gYmUgcmVhZCBmcm9tIHRoZSBcJiMzNDt0eXBlXCYjMzQ7XG5AQCAtMTY1LDYgJiM0MzsxNjYsMjcgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxuIHNlbGVjdGVkIFBNVS4gU2VsZWN0aW5nIGEgbmV3IFBNVSBjYW5jZWxzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGlzXG4gYXR0cmlidXRlLlxuIFxuJiM0MzsxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0Mzs6UGFyYW1ldGVyczogbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4ga3ZtX2RldmljZV9hdHRyLmFkZHJcbiYjNDM7XG4mIzQzOzpSZXR1cm5zOlxuJiM0MztcbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1bixcbiYjNDM7XHRcdCAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yXG4mIzQzO1x0XHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXG4mIzQzO1x0IC1FTlhJTyAgIEF0dGVtcHRlZCB0byBnZXQgYmVmb3JlIHNldHRpbmdcbiYjNDM7XHQgLUVOT0RFViAgQXR0ZW1wdGVkIHRvIHNldCB3aGlsZSBQTVV2MyBub3Qgc3VwcG9ydGVkXG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztJZiBzZXQsIEtWTSBlbXVsYXRlcyBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy5cbiYjNDM7XG4mIzQzO1doZW4gdGhpcyBhdHRyaWJ1dGUgaXMgZW5hYmxlZCwgdGhlIHZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVXG4mIzQzO3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzXG4mIzQzO2F0dHJpYnV0ZSBpcyBWTS1zY29wZWQuXG4mIzQzO1xuIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYmFlMmM0ZjkyZWY1YzAuLjM5OThlNjZjNjU3MTUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0zNjcsNiAmIzQzOzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19XUklUQUJMRV9JTVBfSURfUkVHU1x0XHQxMFxuIFx0LyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqL1xuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQVx0XHRcdFx0MTFcbiYjNDM7XHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqL1xuJiM0MzsjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lUXHRcdFx0MTJcbiYjNDM7XHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDEzXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0LyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzNyw2ICYjNDM7NDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVx0NVxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcdFx0MVxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlx0XHQwXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXHRcdDFcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbmluZGV4IDE5OTVlMTE5ODY0OGU4Li5hNWFlNjI4MjA0YTEyMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXG5AQCAtMTAwNSw3ICYjNDM7MTAwNSw3IEBAIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VycmF0YVtdID0ge1xuIFx0e1xuIFx0XHQuZGVzYyA9IFwmIzM0O0FwcGxlIElNUERFRiBQTVV2MyBUcmFwc1wmIzM0OyxcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX1BNVVYzX0lNUERFRl9UUkFQUyxcbi1cdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfTE9DQUxfQ1BVX0VSUkFUVU0sXG4mIzQzO1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9FQVJMWV9MT0NBTF9DUFVfRkVBVFVSRSxcbiBcdFx0Lm1hdGNoZXMgPSBoYXNfaW1wZGVmX3BtdXYzLFxuIFx0XHQuY3B1X2VuYWJsZSA9IGNwdV9lbmFibGVfaW1wZGVmX3BtdXYzX3RyYXBzLFxuIFx0fSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uYTg2NmJlYjhkODczZDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC02NTEsNiAmIzQzOzY1MSw3IEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xuJiM0MztcdGludCBsYXN0X2NwdSA9IHZjcHUtXHUwMDNlY3B1O1xuIFx0aW50ICpsYXN0X3JhbjtcbiBcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbkBAIC03MDAsNiAmIzQzOzcwMSw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdGlmIChoYXNfdmhlKCkpXG4gXHRcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xuIFx0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUsIGxhc3RfY3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuIFx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG5AQCAtNzQ5LDcgJiM0Mzs3NTEsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcbiBcbiBcdHZjcHVfY2xlYXJfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuLVx0dmNwdS1cdTAwM2VjcHUgPSAtMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xNjUyLDI5ICYjNDM7MTY1MywyNiBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGluaXQtXHUwMDNlZmVhdHVyZXNbMF07XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV92Y3B1X2luaXRfY2hhbmdlZCh2Y3B1LCBpbml0KSlcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRiaXRtYXBfY29weShrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLCBcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcbiBcbiBcdHJldCA9IGt2bV9zZXR1cF92Y3B1KHZjcHUpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE5vdyB3ZSBrbm93IHdoYXQgaXQgaXMsIHdlIGNhbiByZXNldCBpdC4gKi9cbiBcdGt2bV9yZXNldF92Y3B1KHZjcHUpO1xuIFxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuIFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBWQ1BVX0lOSVRJQUxJWkVEKTtcbi1cdHJldCA9IDA7XG4tb3V0X3VubG9jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE2OTAsNiAmIzQzOzE2ODgsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1xuIFx0aWYgKCFrdm1fdmNwdV9pbml0aWFsaXplZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIF9fa3ZtX3ZjcHVfc2V0X3RhcmdldCh2Y3B1LCBpbml0KTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuaW5kZXggOTgzMDViYmZjMDk1YWIuLmZmNWQ1ZjY2YTljMDlmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuQEAgLTcsOSAmIzQzOzcsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZi9hcm1fcG11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiAmIzQzOzE3LDEzIEBAXG4gXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXHRCSVQoMClcbiBcbiYjNDM7I2RlZmluZSBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTS1x0KE1EQ1JfRUwyX0hQTU4gfCBNRENSX0VMMl9IUE1EIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBNRENSX0VMMl9ITFApXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBhcm1fcG11cyBpcyBhcHBlbmQtb25seS4ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkgZmVlZHMgcGVyc2lzdGVudFxuJiM0MzsgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suXG4mIzQzOyAqL1xuIHN0YXRpYyBMSVNUX0hFQUQoYXJtX3BtdXMpO1xuIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7XG4gXG5AQCAtMjYsNyAmIzQzOzMzLDYgQEAgc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gXG4gYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiB7XG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2YXJtX3BtdXMpO1xuIH1cbiBcbkBAIC04MCw2ICYjNDM7ODYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBtYXNrO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XG4gICogQHBtYzogY291bnRlciBjb250ZXh0XG5AQCAtMzE3LDE3ICYjNDM7MzI4LDIyIEBAIHU2NCBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTtcbiYjNDM7XHR1NjQgbiA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xuIFxuLVx0aWYgKHZhbCA9PSAwKVxuJiM0MztcdGlmIChuID09IDApXG4gXHRcdHJldHVybiBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBHRU5NQVNLKHZhbCAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuJiM0MztcdFx0cmV0dXJuIEdFTk1BU0sobiAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1fcG1jX2VuYWJsZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4ge1xuLVx0aWYgKCFwbWMtXHUwMDNlcGVyZl9ldmVudCkge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtYy1cdTAwM2VwZXJmX2V2ZW50IHx8XG4mIzQzO1x0ICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSxcbiYjNDM7XHRcdFx0ICAgICAgIFx1MDAyNnRvX2FybV9wbXUocG1jLVx1MDAzZXBlcmZfZXZlbnQtXHUwMDNlcG11KS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpKSB7XG4gXHRcdGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQocG1jKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTYwNiw2ICYjNDM7NjIyLDIxIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSFBNTiBkZXRlcm1pbmVzIHdoaWNoIGNvdW50ZXJzIEhQTUQgYW5kIEhMUCBhcHBseSB0by4gQ2hhbmdlcyB0b1xuJiM0MztcdCAqIHRoZXNlIGZpZWxkcyByZXF1aXJlIG5ldyBwZXJmIGV2ZW50IGZpbHRlcnMgYW5kIHNhbXBsZSBwZXJpb2RzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjaGFuZ2VkIFx1MDAyNiBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSylcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5wbXUuZXZlbnRzX25lZWRfcmVjcmVhdGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hhbmdlZCBcdTAwMjYgKE1EQ1JfRUwyX0hQTUUgfCBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSykpXG4mIzQzO1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbkBAIC02NDksMTAgJiM0Mzs2ODAsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiYjNDM7c3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3QgYXJtX3BtdSAqcG11LCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4ge1xuLVx0c3RydWN0IGFybV9wbXUgKnBtdSA9IGt2bS1cdTAwM2VhcmNoLmFybV9wbXU7XG4tXG4gXHQvKlxuIFx0ICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmdcbiBcdCAqIGZvciB0aGUgZ3Vlc3QmIzM5O3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDE0ICYjNDM7NjkyLDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXG4gXHRyZXR1cm4gZXZlbnRzZWw7XG4gfVxuIFxuLS8qKlxuLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcbi0gKiBAcG1jOiBDb3VudGVyIGNvbnRleHRcbi0gKi9cbi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUoaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuJiM0MztcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiYjNDM7XHRcdHBtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuJiM0MztcdFx0XHRyZXR1cm4gcG11O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUoc3RydWN0IGt2bV9wbWMgKnBtYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbi1cdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuIFx0c3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyO1xuIFx0aW50IGV2ZW50c2VsO1xuQEAgLTcwNCw3ICYjNDM7NzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0ICogRG9uJiMzOTt0IGNyZWF0ZSBhbiBldmVudCBpZiB3ZSYjMzk7cmUgcnVubmluZyBvbiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzXG4gXHQgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxuIFx0ICovXG4tXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KHZjcHUtXHUwMDNla3ZtLCBldmVudHNlbCk7XG4mIzQzO1x0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudChhcm1fcG11LCBldmVudHNlbCk7XG4gXHRpZiAoZXZlbnRzZWwgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbkBAIC03NDksNiAmIzQzOzc5MSwzMiBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHRwbWMtXHUwMDNlcGVyZl9ldmVudCA9IGV2ZW50O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcbiYjNDM7ICogQHBtYzogQ291bnRlciBjb250ZXh0XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0YXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KFJFQURfT05DRSh2Y3B1LVx1MDAzZWNwdSkpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFhcm1fcG11KSB7XG4mIzQzO1x0XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O2t2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xuJiM0MztcdFx0fSB3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSwgXHUwMDI2YXJtX3BtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNzg5LDQzICYjNDM7ODU3LDcgQEAgdm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRlbnRyeS1cdTAwM2Vhcm1fcG11ID0gcG11O1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2YXJtX3BtdXMpO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KHZvaWQpXG4te1xuLVx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuLVx0c3RydWN0IGFybV9wbXUgKnBtdTtcbi1cdGludCBjcHU7XG4tXG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcbi1cdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4tXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuLVx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxuLVx0ICpcbi1cdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuLVx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXG4tXHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuLVx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2Vcbi1cdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxuLVx0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuLVx0ICpcbi1cdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxuLVx0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHkuIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZ1xuLVx0ICogY2FycmllZCBoZXJlLlxuLVx0ICovXG4tXHRjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4tXHRcdHBtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4tXG4tXHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXHUwMDI2cG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcbi1cdFx0XHRyZXR1cm4gcG11O1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcbkBAIC04NzAsNiAmIzQzOzkwMiwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0dTY0IHZhbCwgbWFzayA9IDA7XG4gXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSGlkZSB0aGUgaGFyZHdhcmUgUE1VJiMzOTtzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXG4mIzQzO1x0ICogcGh5c2ljYWwgQ1BVIG1pZ3JhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGlmICghcG1jZWlkMSkge1xuIFx0XHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XG4gXHRcdGJhc2UgPSAwO1xuQEAgLTg5Nyw5ICYjNDM7OTM2LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHRyZXR1cm4gdmFsIFx1MDAyNiBtYXNrO1xuIH1cbiBcbiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSlcbiYjNDM7e1xuJiM0MztcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fCB2Y3B1LVx1MDAzZWNwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXG4mIzQzO1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bV9wbXUgKnBtdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wbXU7XG4gXHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGt2bV9wbXVfc3RvcF9jb3VudGVyKGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgaSkpO1xuJiM0MztcbiYjNDM7XHRcdHBtdS1cdTAwM2VldmVudHNfbmVlZF9yZWNyZWF0ZSA9IGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTU9WU1NFVF9FTDAsIFx1MDAyNj0sIG1hc2spO1xuIFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNSU5URU5TRVRfRUwxLCBcdTAwMjY9LCBtYXNrKTtcbkBAIC0xMDA4LDYgJiM0MzsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFxuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcbiBcdCAqIGV2ZW50LCB0aG91Z2ggdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9mIG5vbi1QTVV2MyBoYXJkd2FyZS5cbkBAIC0xMDIyLDMwICYjNDM7MTA4MiwxMiBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXHUwMDNlY250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucilcbi17XG4tXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcbi1cbi1cdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cyYjMzk7IGJhY2suLi4gKi9cbi1cdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcykpIHtcbi1cdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0XHR1bnNpZ25lZCBsb25nIGk7XG4tXG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuLVx0XHRcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4tXHRcdFx0dmFsIFx1MDAyNj0gfk1EQ1JfRUwyX0hQTU47XG4tXHRcdFx0dmFsIHw9IEZJRUxEX1BSRVAoTURDUl9FTDJfSFBNTiwga3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzKTtcbi1cdFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXHRcdH1cbi1cdH1cbi19XG4tXG4gc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRrdm0tXHUwMDNlYXJjaC5hcm1fcG11ID0gYXJtX3BtdTtcbi1cdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEwNjIsNyAmIzQzOzExMDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4gICovXG4gaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuJiM0MztcdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4mIzQzO1x0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbiYjNDM7XHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbiYjNDM7XHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbiYjNDM7XHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuJiM0MztcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4mIzQzO1x0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4mIzQzO1x0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4mIzQzO1x0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seVxuJiM0MztcdCAqIGVtdWxhdGlvbi4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nIGNhcnJpZWQgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFxuIFx0aWYgKCFhcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbkBAIC0xMDc5LDE3ICYjNDM7MTEzOCwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0aW50IHJldCA9IC1FTlhJTztcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4gXHRcdGFybV9wbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuIFx0XHRpZiAoYXJtX3BtdS1cdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcbiBcdFx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XG4mIzQzO1x0XHRcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxuIFx0XHRcdCAgICAoa3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xuIFx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHRcdFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XG4gXHRcdFx0Y3B1bWFza19jb3B5KGt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcbiBcdFx0XHRyZXQgPSAwO1xuQEAgLTEwOTcsMjEgJiM0MzsxMTU4LDM5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbiYjNDM7XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKG4gXHUwMDNlIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIG4pO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTE3NSw3ICYjNDM7MTI1NCw3IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdCAgICAgZmlsdGVyLmFjdGlvbiAhPSBLVk1fUE1VX0VWRU5UX0RFTlkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxuJiM0MztcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIpIHtcbkBAIC0xMjIwLDYgJiM0MzsxMjk5LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbiYjNDM7XHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDpcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7XG4gXHR9XG5AQCAtMTI0Niw2ICYjNDM7MTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdGlycSA9IHZjcHUtXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcbiBcdFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xuIFx0fVxuJiM0MztcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuJiM0MztcdFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xMjU5LDYgJiM0MzsxMzQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVI6XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVTpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6XG4mIzQzO1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4gXHRcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uNmJmYjIxZjAwNDQ0MjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5AQCAtMTkwLDcgJiM0MzsxOTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xuLVx0Ym9vbCBsb2FkZWQ7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nO1xuJiM0MztcdGJvb2wgbG9hZGVkID0gZmFsc2U7XG4gXHR1MzIgcHN0YXRlO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbkBAIC0xOTgsMTAgJiM0MzsxOTksMTYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2Y3B1LVx1MDAzZWFyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHByZWVtcHRfZGlzYWJsZSgpO1xuLVx0bG9hZGVkID0gKHZjcHUtXHUwMDNlY3B1ICE9IC0xKTtcbi1cdGlmIChsb2FkZWQpXG4mIzQzO1x0Z3VhcmQocHJlZW1wdCkoKTtcbiYjNDM7XG4mIzQzO1x0cnVubmluZyA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdGlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0bG9hZGVkID0gdHJ1ZTtcbiBcdFx0a3ZtX2FyY2hfdmNwdV9wdXQodmNwdSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkge1xuIFx0XHRpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSlcbkBAIC0yNjksNyAmIzQzOzI3Niw2IEBAIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0aWYgKGxvYWRlZClcbiBcdFx0a3ZtX2FyY2hfdmNwdV9sb2FkKHZjcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4tXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiBcbiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjllOTA1ZDliZTlmNjdlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTMwMjAsMTcgJiM0MzszMDIwLDIyIEBAIHN0YXRpYyBib29sIGFjY2Vzc19tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcbi1cbi1cdC8qXG4tXHQgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzXG4tXHQgKiBhZmZlY3RlZCBieSBIUE1FLlxuLVx0ICovXG4tXHRpZiAoKG9sZCBeIHZhbCkgXHUwMDI2IE1EQ1JfRUwyX0hQTUUpXG4tXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7XHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxuJiM0MztcdFx0ICAgIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xuJiM0MztcbiYjNDM7XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4mIzQzO1x0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbkBAIC0zMTc3LDggJiM0MzszMTgyLDEzIEBAIHN0YXRpYyBpbnQgc2V0X2ltcF9pZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLFxuIFxuIHN0YXRpYyB1NjQgcmVzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG4ge1xuLVx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4mIzQzO1x0dTY0IG9sZCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnKTtcbiYjNDM7XHR1NjQgdmFsID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4mIzQzO1xuJiM0MztcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZywgdmFsKTtcbiYjNDM7XHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gLypcbkBAIC0zNzQxLDcgJiM0MzszNzUxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXG4gXHRcdFx0IHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcbi1cdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcbiYjNDM7XHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcbiYjNDM7XHRcdFx0ICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSxcbiBcdEVMMl9SRUdfVk5DUihIU1RSX0VMMiwgcmVzZXRfdmFsLCAwKSxcbiBcdEVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbmluZGV4IGI1ZTU5NDIyMDRmYzY5Li4wYzMxYjcyZTM0MzVhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RydWN0IGt2bV9wbXUge1xuIFx0c3RydWN0IGt2bV9wbWMgcG1jW0tWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTXTtcbiBcdGludCBpcnFfbnVtO1xuIFx0Ym9vbCBjcmVhdGVkO1xuJiM0MztcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTYsOCAmIzQzOzU3LDEwIEBAIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbiYjNDM7dm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSxcbiBcdFx0XHRcdCAgICB1NjQgc2VsZWN0X2lkeCk7XG4mIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpO1xuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuQEAgLTEzMyw2ICYjNDM7MTM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgdTY0IGRhdGEsIHU2NCBzZWxlY3RfaWR4KSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbkBAIC0xNjMsNiAmIzQzOzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV91cGRhdGVfdmNwdV9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDFjMTNiZmEyZDM4YWFkLi4zOWExYTFlNDEyZTY2ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcdFx0MlxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcdFx0M1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuJiM0MzsjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuaW5kZXggZGRmODFmMjQ5NTZiYTAuLjFjNjMzMzQzZDU3NjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmhcbkBAIC0xNDIsMzIgJiM0MzsxNDIsMzIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgZmllbGRfbWFzayh1NjQgZmllbGQpXG4gXHRyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcbiB9XG4gI2RlZmluZSBmaWVsZF9tYXgoZmllbGQpXHQoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpXG4tI2RlZmluZSBfX19fTUFLRV9PUCh0eXBlLGJhc2UsdG8sZnJvbSlcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXHRcXFxuJiM0MzsjZGVmaW5lIF9fX19NQUtFX09QKG5hbWUsdHlwZSxiYXNlLHRvLGZyb20pXHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXHUwMDI2XHUwMDI2ICh2IFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVx0XFxcbiBcdFx0X19maWVsZF9vdmVyZmxvdygpO1x0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIHRvKCh2IFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XHRcXFxuIH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsXHRcXFxuLVx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsXHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHJldHVybiAob2xkIFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4mIzQzO1x0cmV0dXJuIChvbGQgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXHRcdFxcXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBuYW1lIyNwX3JlcGxhY2VfYml0cyh0eXBlICpwLFx0XHRcXFxuIFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4mIzQzO1x0KnAgPSAoKnAgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgdHlwZSMjX2dldF9iaXRzKF9fIyN0eXBlIHYsIGJhc2UgZmllbGQpXHRcXFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRyZXR1cm4gKGZyb20odikgXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcdFx0XFxcbiB9XG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcbi1fX19fTUFLRV9PUCh1OCx1OCwsKVxuJiM0MzsjZGVmaW5lIF9fTUFLRV9PUChzaXplKVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19fX01BS0VfT1AobGUjI3NpemUsX19sZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4mIzQzO1x0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4mIzQzO1x0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLHUjI3NpemUsLClcbiYjNDM7X19fX01BS0VfT1AodTgsdTgsdTgsLClcbiBfX01BS0VfT1AoMTYpXG4gX19NQUtFX09QKDMyKVxuIF9fTUFLRV9PUCg2NClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuaW5kZXggMjIyMjMzOTU5NjllMGYuLmI1ZjhjZThkMzQ1MWYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuY1xuQEAgLTI1LDYgJiM0MzsyNSwxNCBAQFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0JiMzOTtzIGNvbW1vbiBhbW9uZyB0aGUgUE1VIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFx0XHQzMVxuIFxuJiM0MzsjaWZuZGVmIE1EQ1JfRUwyX0hQTU5cbiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1OXHRcdFx0R0VOTUFTS19VTEwoNCwgMClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcbiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1FXHRcdFx0QklUX1VMTCg3KVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RydWN0IHZwbXVfdm0ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtNDAzLDEyICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuIFx0dTggcG11dmVyLCBlYztcbi1cdHU2NCBkZnIwLCBpcnEgPSAyMztcbi1cdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgaXJxX2F0dHIgPSB7XG4tXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbi1cdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSxcbi1cdFx0LmFkZHIgPSAodTY0KVx1MDAyNmlycSxcbi1cdH07XG4mIzQzO1x0dTY0IGRmcjA7XG4gXG4gXHQvKiBUaGUgdGVzdCBjcmVhdGVzIHRoZSB2cG11X3ZtIG11bHRpcGxlIHRpbWVzLiBFbnN1cmUgYSBjbGVhbiBzdGF0ZSAqL1xuIFx0bWVtc2V0KFx1MDAyNnZwbXVfdm0sIDAsIHNpemVvZih2cG11X3ZtKSk7XG5AQCAtNDM0LDggJiM0Mzs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIFx0VEVTVF9BU1NFUlQocG11dmVyICE9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBtdXZlciBcdTAwM2U9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLFxuIFx0XHQgICAgXCYjMzQ7VW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcJiMzNDssIHBtdXZlcik7XG4tXG4tXHR2Y3B1X2lvY3RsKHZwbXVfdm0udmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXHUwMDI2aXJxX2F0dHIpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZClcbkBAIC00NjEsMTUgJiM0Mzs0NjIsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZClcbiYjNDM7e1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1bnNpZ25lZCBpbnQgcHJldjtcbiBcdGludCByZXQ7XG4gXG4tXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbi1cdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4tXG4gXHRwcmV2ID0gZ2V0X3BtY3Jfbih2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX1BNQ1JfRUwwKSkpO1xuIFxuIFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG5AQCAtNDgxLDYgJiM0Mzs0ODQsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuIFx0XHRcdCAgICBucl9jb3VudGVycywgcHJldik7XG4gXHRlbHNlXG4gXHRcdFRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZXhwZWN0X2ZhaWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbiYjNDM7XHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XG4mIzQzO1x0c2V0X25yX2NvdW50ZXJzKHZjcHUsIG5yX2NvdW50ZXJzLCBleHBlY3RfZmFpbCk7XG4gXG4gXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4gfVxuQEAgLTQ4OSwxNSAmIzQzOzUxMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1XFxuXCYjMzQ7LCBwbWNyX24pO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG5AQCAtNTMxLDE0ICYjNDM7NTU0LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0ge1xuICAqIENyZWF0ZSBhIFZNLCBhbmQgY2hlY2sgaWYgS1ZNIGhhbmRsZXMgdGhlIHVzZXJzcGFjZSBhY2Nlc3NlcyBvZlxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbiYjNDM7XHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XG4gXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuIFxuIFx0dmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7XG5AQCAtNTgzLDE2ICYjNDM7NjA2LDk0IEBAIHN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuIFx0ZGVzdHJveV92cG11X3ZtKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4mIzQzO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O01EQ1JfRUwyIHRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0IHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7XG4mIzQzO1xuJiM0MztcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuJiM0MztcdGlmICghdm1fc3VwcG9ydHNfZWwyKHZwbXVfdm0udm0pKSB7XG4mIzQzO1x0XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxuJiM0MztcdFx0XHRcdFx0IE1EQ1JfRUwyX0hQTU4pO1xuJiM0MztcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxuJiM0MztcdFx0ICAgICBleHBlY3RlZF9tZGNyKTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4mIzQzO1x0XHQgICAgXCYjMzQ7TURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTU4gd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuJiM0MztcbiYjNDM7XHRpZiAoZml4ZWRfY291bnRlcnNfb25seSkge1xuJiM0MztcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuJiM0MztcdFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNldF9ucl9jb3VudGVycyh2Y3B1LCBwbWNyX24sIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4mIzQzO1x0XHQgICAgXCYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwmIzM0OyxcbiYjNDM7XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4mIzQzO1x0XHQgICAgXCYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfSU5JVCAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1xuJiM0MztcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcbiYjNDM7XHR2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSxcbiYjNDM7XHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1FIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwmIzM0OyxcbiYjNDM7XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFx1MDAyNmluaXQpO1xuJiM0MztcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuJiM0MztcdGFhcmNoNjRfdmNwdV9zZXR1cCh2Y3B1LCBcdTAwMjZpbml0KTtcbiYjNDM7XG4mIzQzO1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRURVNUX0FTU0VSVChGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikgPT0gcG1jcl9uLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyLkhQTU4gaXMgbm90IHJlc2V0IGFmdGVyIElOSVQgKGV4cGVjdGVkICVsdSwgZ290ICVsdSlcJiMzNDssXG4mIzQzO1x0XHQgICAgcG1jcl9uLCBGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikpO1xuJiM0MztcbiYjNDM7XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIGFuZCBhdHRlbXB0IHRvIHNldCB0aGUgUE1DUl9FTDAuTiBmb3JcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cbiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxuJiM0MztzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0cHJfZGVidWcoXCYjMzQ7RXJyb3IgdGVzdCB3aXRoIHBtY3JfbiAlbHUgKGxhcmdlciB0aGFuIHRoZSBob3N0KVxcblwmIzM0OywgcG1jcl9uKTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIHRydWUpO1xuIFx0ZGVzdHJveV92cG11X3ZtKCk7XG4gfVxuIFxuQEAgLTYyMiwyMiAmIzQzOzcyMywxNDcgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcbiBcdHJldHVybiBzdXBwb3J0ZWQ7XG4gfVxuIFxuLWludCBtYWluKHZvaWQpXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKHZvaWQpXG4ge1xuLVx0dTY0IGksIHBtY3JfbjtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdSwgKnN0b3BwZWRfdmNwdTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMgPSAwO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlKDIpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFx1MDAyNmluaXQpO1xuJiM0MztcdGluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuJiM0MztcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1x0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2bnJfY291bnRlcnMpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbi1cdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcbi1cdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGk7XG4gXG4tXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gcG1jcl9uOyBpJiM0MzsmIzQzOykge1xuLVx0XHRydW5fYWNjZXNzX3Rlc3QoaSk7XG4tXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTtcbiYjNDM7XHRcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7XHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7XHRcdHJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gcG1jcl9uICYjNDM7IDE7IGkgXHUwMDNjIEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkmIzQzOyYjNDM7KVxuLVx0XHRydW5fZXJyb3JfdGVzdChpKTtcbiYjNDM7XHRcdHJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgaXJxID0gMjM7XG4mIzQzO1xuJiM0MztcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuJiM0MztcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4mIzQzO1x0XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0hBU19ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1x0XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSBzdWNjZWVkcy4gKi9cbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHNldC4gKi9cbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuJiM0MztcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcdTAwMjZmaWx0ZXIpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRkZXN0cm95X3ZwbXVfdm0oKTtcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYW4gZXZlbnQgZmlsdGVyIGhhc1xuJiM0MztcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdGRlc3Ryb3lfdnBtdV92bSgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbiYjNDM7XHQgKiByZXN1bHRzIGluIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHZtID0gdm1fY3JlYXRlKDIpO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFx1MDAyNmluaXQpO1xuJiM0MztcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuJiM0MztcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiYjNDM7XHR2Y3B1X3J1bihydW5uaW5nX3ZjcHUpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2NvbmZpZygwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bigpO1xuJiM0MztcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xuJiM0MztcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9wbXVfaGFuZGxlX21kY3ImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9wbXVfcHJvYmVfYXJtcG11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIEFSTTY0IFBNVSBlbXVsYXRpb24gZmVhdHVyZSAoS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKSBhbmQgbW9kaWZpZXMgUE1VIGV2ZW50IGNyZWF0aW9uLCBsb2FkaW5nLCBhbmQgcmVsb2FkaW5nIGxvZ2ljLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgbW9kaWZpZXMgY29yZSBLVk0gUE1VIGVtdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTNhOGM3MDc0YjUwYjE2NWE1NTE5MGZlMjliYWM2MDRmYWYyNmRlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDA2OjE0OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CmluZGV4IDY2ZTcxNGYyZmNmYTdmLi4xZDU5MmU3MGJkZWEzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdApAQCAtNzQsNyAmIzQzOzc0LDggQEAgaXJxY2hpcC4KIAkgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkCiAJIC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdAogCSAJICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGUKLQkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yCiYjNDM7CQkgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2UKIAkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTExNiwxNCAmIzQzOzExNywxNCBAQCB1c2luZyBldmVudCAweDExIChDUFVfQ1lDTEVTKS4KIAogOlJldHVybnM6CiAKLQkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvcgotICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllcgogCSAtRU5YSU8gICBQTVUgbm90IGZvdW5kCiAJIC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZAogCSAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Ci0JID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzCiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlICYjMzQ7dHlwZSYjMzQ7CkBAIC0xNjUsNiAmIzQzOzE2NiwyNyBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlCiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpcwogYXR0cmlidXRlLgogCiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyCiYjNDM7CiYjNDM7OlJldHVybnM6CiYjNDM7CiYjNDM7CSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biwKJiM0MzsJCSAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yCiYjNDM7CQkgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkCiYjNDM7CSAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nCiYjNDM7CSAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWQKJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuCiYjNDM7CiYjNDM7V2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBlbmFibGVkLCB0aGUgdkNQVSBjYW4gcnVuIG9uIGFueSBwaHlzaWNhbCBDUFUKJiM0Mzt0aGF0IGhhcyBhIFBNVSwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gVGhpcwomIzQzO2F0dHJpYnV0ZSBpcyBWTS1zY29wZWQuCiYjNDM7CiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYmFlMmM0ZjkyZWY1YzAuLjM5OThlNjZjNjU3MTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0zNjcsNiAmIzQzOzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTCQkxMAogCS8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQQkJCQkxMQomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQJCQkxMgomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQkxMwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBWTS13aWRlIHZDUFUgZmVhdHVyZSBzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDcgQEAgZW51bSB7CiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIJCTIKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVUJCTMKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUwk0CiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQk1CiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMCQkxCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVIJCTAKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUgkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCmluZGV4IDE5OTVlMTE5ODY0OGU4Li5hNWFlNjI4MjA0YTEyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYwpAQCAtMTAwNSw3ICYjNDM7MTAwNSw3IEBAIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VycmF0YVtdID0gewogCXsKIAkJLmRlc2MgPSAmIzM0O0FwcGxlIElNUERFRiBQTVV2MyBUcmFwcyYjMzQ7LAogCQkuY2FwYWJpbGl0eSA9IEFSTTY0X1dPUktBUk9VTkRfUE1VVjNfSU1QREVGX1RSQVBTLAotCQkudHlwZSA9IEFSTTY0X0NQVUNBUF9MT0NBTF9DUFVfRVJSQVRVTSwKJiM0MzsJCS50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLAogCQkubWF0Y2hlcyA9IGhhc19pbXBkZWZfcG11djMsCiAJCS5jcHVfZW5hYmxlID0gY3B1X2VuYWJsZV9pbXBkZWZfcG11djNfdHJhcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKaW5kZXggNTBhZGZmZjc1YmU4MmUuLmE4NjZiZWI4ZDg3M2QzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwpAQCAtNjUxLDYgJiM0Mzs2NTEsNyBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11OwomIzQzOwlpbnQgbGFzdF9jcHUgPSB2Y3B1LSZndDtjcHU7CiAJaW50ICpsYXN0X3JhbjsKIAogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKQEAgLTcwMCw2ICYjNDM7NzAxLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCWlmIChoYXNfdmhlKCkpCiAJCWt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpOwogCWt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpOwogCWt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpOwogCWlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwpAQCAtNzQ5LDcgJiM0Mzs3NTEsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7CiAKIAl2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKLQl2Y3B1LSZndDtjcHUgPSAtMTsKIH0KIAogc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE2NTIsMjkgJiM0MzsxNjUzLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIHsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC0mZ3Q7ZmVhdHVyZXNbMF07CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwotCWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJaWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncykgJmFtcDsmYW1wOwogCSAgICBrdm1fdmNwdV9pbml0X2NoYW5nZWQodmNwdSwgaW5pdCkpCi0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCiAJYml0bWFwX2NvcHkoa3ZtLSZndDthcmNoLnZjcHVfZmVhdHVyZXMsICZhbXA7ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7CiAKIAlyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqLwogCWt2bV9yZXNldF92Y3B1KHZjcHUpOwogCiAJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCXZjcHVfc2V0X2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7Ci0JcmV0ID0gMDsKLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE2OTAsNiAmIzQzOzE2ODgsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKQogCQlyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYwppbmRleCA5ODMwNWJiZmMwOTVhYi4uZmY1ZDVmNjZhOWMwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYwpAQCAtNyw5ICYjNDM7Nyw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmYvYXJtX3BtdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fZW11bGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2t2bS9hcm1fcG11LmgmZ3Q7CkBAIC0xNyw2ICYjNDM7MTcsMTMgQEAKIAogI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUCUJJVCgwKQogCiYjNDM7I2RlZmluZSBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSwkoTURDUl9FTDJfSFBNTiB8IE1EQ1JfRUwyX0hQTUQgfCBcCiYjNDM7CQkJCQkgTURDUl9FTDJfSExQKQomIzQzOwomIzQzOy8qCiYjNDM7ICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnQKJiM0MzsgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suCiYjNDM7ICovCiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7CiAKQEAgLTI2LDcgJiM0MzszMyw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpOwogCiBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQogewotCWd1YXJkKG11dGV4KSgmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiAhbGlzdF9lbXB0eSgmYW1wO2FybV9wbXVzKTsKIH0KIApAQCAtODAsNiAmIzQzOzg2LDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pCiAJcmV0dXJuIG1hc2s7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdAogICogQHBtYzogY291bnRlciBjb250ZXh0CkBAIC0zMTcsMTcgJiM0MzszMjgsMjIgQEAgdTY0IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTsKJiM0MzsJdTY0IG4gPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzOwogCi0JaWYgKHZhbCA9PSAwKQomIzQzOwlpZiAobiA9PSAwKQogCQlyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpOwogCWVsc2UKLQkJcmV0dXJuIEdFTk1BU0sodmFsIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiYjNDM7CQlyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKLQlpZiAoIXBtYy0mZ3Q7cGVyZl9ldmVudCkgewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKJiM0MzsKJiM0MzsJaWYgKCFwbWMtJmd0O3BlcmZfZXZlbnQgfHwKJiM0MzsJICAgIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtJmd0O2NwdSksCiYjNDM7CQkJICAgICAgICZhbXA7dG9fYXJtX3BtdShwbWMtJmd0O3BlcmZfZXZlbnQtJmd0O3BtdSktJmd0O3N1cHBvcnRlZF9jcHVzKSkpIHsKIAkJa3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpOwogCQlyZXR1cm47CiAJfQpAQCAtNjA2LDYgJiM0Mzs2MjIsMjEgQEAgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkKIAl9CiB9CiAKJiM0Mzt2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJdTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG8KJiM0MzsJICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSykKJiM0MzsJCXZjcHUtJmd0O2FyY2gucG11LmV2ZW50c19uZWVkX3JlY3JlYXRlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGNoYW5nZWQgJmFtcDsgKE1EQ1JfRUwyX0hQTUUgfCBNRENSX0VMMl9QTVVfUkVDUkVBVEVfTUFTSykpCiYjNDM7CQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKQEAgLTY0OSwxMCAmIzQzOzY4MCw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgJmFtcDsgQVJNVjhfUE1VX0lOQ0xVREVfRUwyOwogfQogCi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQomIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQogewotCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKLQogCS8qCiAJICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmcKIAkgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELgpAQCAtNjYzLDE0ICYjNDM7NjkyLDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpCiAJcmV0dXJuIGV2ZW50c2VsOwogfQogCi0vKioKLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXIKLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dAotICovCi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpCiYjNDM7c3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdShpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqcG11OwomIzQzOwomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewomIzQzOwkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7CiYjNDM7CiYjNDM7CQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZhbXA7cG11LSZndDtzdXBwb3J0ZWRfY3B1cykpCiYjNDM7CQkJcmV0dXJuIHBtdTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwotCXN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmFybV9wbXU7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAlpbnQgZXZlbnRzZWw7CkBAIC03MDQsNyAmIzQzOzc0Niw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIAkgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMKIAkgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLgogCSAqLwotCWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS0mZ3Q7a3ZtLCBldmVudHNlbCk7CiYjNDM7CWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpOwogCWlmIChldmVudHNlbCAmbHQ7IDApCiAJCXJldHVybjsKIApAQCAtNzQ5LDYgJiM0Mzs3OTEsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXBtYy0mZ3Q7cGVyZl9ldmVudCA9IGV2ZW50OwogfQogCiYjNDM7LyoqCiYjNDM7ICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlcgomIzQzOyAqIEBwbWM6IENvdW50ZXIgY29udGV4dAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11OwomIzQzOwomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCWRvIHsKJiM0MzsJCQlhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtJmd0O2NwdSkpOwomIzQzOwomIzQzOwkJCWlmICghYXJtX3BtdSkgewomIzQzOwkJCQlwcl93YXJuX29uY2UoJiMzNDtrdm06IFVuc3VwcG9ydGVkIFBNVSB2YXJpYXRpb24gZGV0ZWN0ZWQuXG4mIzM0Oyk7CiYjNDM7CQkJCWFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTsKJiM0MzsJCX0gd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KFJFQURfT05DRSh2Y3B1LSZndDtjcHUpLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudAogICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXIKQEAgLTc4OSw0MyAmIzQzOzg1Nyw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSkKIAkJcmV0dXJuOwogCiAJZW50cnktJmd0O2FybV9wbXUgPSBwbXU7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO2VudHJ5LSZndDtlbnRyeSwgJmFtcDthcm1fcG11cyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZCkKLXsKLQlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGFybV9wbXUgKnBtdTsKLQlpbnQgY3B1OwotCi0JZ3VhcmQobXV0ZXgpKCZhbXA7YXJtX3BtdXNfbG9jayk7Ci0KLQkvKgotCSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCi0JICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmQKLQkgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZAotCSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KLQkgKgotCSAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZQotCSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQotCSAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlCi0JICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2UKLQkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKLQkgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuCi0JICoKLQkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKLQkgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nCi0JICogY2FycmllZCBoZXJlLgotCSAqLwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKLQkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7Ci0KLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmYW1wO3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQotCQkJcmV0dXJuIHBtdTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKJiM0MzsJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtlbnRyeS0mZ3Q7ZW50cnksICZhbXA7YXJtX3BtdXMpOwogfQogCiBzdGF0aWMgdTY0IF9fY29tcHV0ZV9wbWNlaWQoc3RydWN0IGFybV9wbXUgKnBtdSwgYm9vbCBwbWNlaWQxKQpAQCAtODcwLDYgJiM0Mzs5MDIsMTMgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSkKIAl1NjQgdmFsLCBtYXNrID0gMDsKIAlpbnQgYmFzZSwgaSwgbnJfZXZlbnRzOwogCiYjNDM7CS8qCiYjNDM7CSAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSYjMzk7cyBldmVudCBzZXQgdG8ga2VlcCBQTUNFSUQgc3RhYmxlIGFjcm9zcwomIzQzOwkgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwbWNlaWQxKSB7CiAJCXZhbCA9IGNvbXB1dGVfcG1jZWlkMChjcHVfcG11KTsKIAkJYmFzZSA9IDA7CkBAIC04OTcsOSAmIzQzOzkzNiwyNyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogCXJldHVybiB2YWwgJmFtcDsgbWFzazsKIH0KIAomIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpCiYjNDM7ewomIzQzOwlpZiAoIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pIHx8IHZjcHUtJmd0O2NwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtJmd0O2NwdSkgIT0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUobGFzdF9jcHUpKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fcG11ICpwbXUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gucG11OwogCXU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAocG11LSZndDtldmVudHNfbmVlZF9yZWNyZWF0ZSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTsKJiM0MzsKJiM0MzsJCXBtdS0mZ3Q7ZXZlbnRzX25lZWRfcmVjcmVhdGUgPSBmYWxzZTsKJiM0MzsJfQogCiAJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgJmFtcDs9LCBtYXNrKTsKIAlfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsICZhbXA7PSwgbWFzayk7CkBAIC0xMDA4LDYgJiM0MzsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKIAomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAkvKgogCSAqIFBNVXYzIHJlcXVpcmVzIHRoYXQgYWxsIGV2ZW50IGNvdW50ZXJzIGFyZSBjYXBhYmxlIG9mIGNvdW50aW5nIGFueQogCSAqIGV2ZW50LCB0aG91Z2ggdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9mIG5vbi1QTVV2MyBoYXJkd2FyZS4KQEAgLTEwMjIsMzAgJiM0MzsxMDgyLDEyIEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKQogCXJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtJmd0O2NudHJfbWFzaywgQVJNVjhfUE1VX01BWF9HRU5FUkFMX0NPVU5URVJTKTsKIH0KIAotc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnIpCi17Ci0Ja3ZtLSZndDthcmNoLm5yX3BtdV9jb3VudGVycyA9IG5yOwotCi0JLyogUmVzZXQgTURDUl9FTDIuSFBNTiBiZWhpbmQgdGhlIHZjcHVzJiMzOTsgYmFjay4uLiAqLwotCWlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLSZndDthcmNoLnZjcHVfZmVhdHVyZXMpKSB7Ci0JCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQkJdW5zaWduZWQgbG9uZyBpOwotCi0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewotCQkJdTY0IHZhbCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyKTsKLQkJCXZhbCAmYW1wOz0gfk1EQ1JfRUwyX0hQTU47Ci0JCQl2YWwgfD0gRklFTERfUFJFUChNRENSX0VMMl9IUE1OLCBrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzKTsKLQkJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTsKLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpCiB7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlrdm0tJmd0O2FyY2guYXJtX3BtdSA9IGFybV9wbXU7Ci0Ja3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpOwomIzQzOwlrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzID0ga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pOwogfQogCiAvKioKQEAgLTEwNjIsNyAmIzQzOzExMDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpCiAgKi8KIGludCBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdShzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0Jc3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSgpOwomIzQzOwkvKgomIzQzOwkgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhcwomIzQzOwkgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZAomIzQzOwkgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZAomIzQzOwkgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uCiYjNDM7CSAqCiYjNDM7CSAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZQomIzQzOwkgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVUKJiM0MzsJICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGUKJiM0MzsJICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2UKJiM0MzsJICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0CiYjNDM7CSAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy4KJiM0MzsJICoKJiM0MzsJICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJCiYjNDM7CSAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LCBvciByZXF1ZXN0IGZpeGVkLWNvdW50ZXJzLW9ubHkKJiM0MzsJICogZW11bGF0aW9uLiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcgY2FycmllZCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWlmICghYXJtX3BtdSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDc5LDE3ICYjNDM7MTEzOCwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKQogCWludCByZXQgPSAtRU5YSU87CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQltdXRleF9sb2NrKCZhbXA7YXJtX3BtdXNfbG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewogCQlhcm1fcG11ID0gZW50cnktJmd0O2FybV9wbXU7CiAJCWlmIChhcm1fcG11LSZndDtwbXUudHlwZSA9PSBwbXVfaWQpIHsKIAkJCWlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwKJiM0MzsJCQkgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHwKIAkJCSAgICAoa3ZtLSZndDthcmNoLnBtdV9maWx0ZXIgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkgewogCQkJCXJldCA9IC1FQlVTWTsKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCXNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKIAkJCWt2bV9hcm1fc2V0X3BtdShrdm0sIGFybV9wbXUpOwogCQkJY3B1bWFza19jb3B5KGt2bS0mZ3Q7YXJjaC5zdXBwb3J0ZWRfY3B1cywgJmFtcDthcm1fcG11LSZndDtzdXBwb3J0ZWRfY3B1cyk7CiAJCQlyZXQgPSAwOwpAQCAtMTA5NywyMSAmIzQzOzExNTgsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZCkKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS0mZ3Q7YXJjaC5wbXVfZmlsdGVyIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncyk7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoIWt2bS0mZ3Q7YXJjaC5hcm1fcG11KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuICZndDsga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgbik7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSBuOwogCXJldHVybiAwOwogfQogCkBAIC0xMTc1LDcgJiM0MzsxMjU0LDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAkJICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJaWYgKCFrdm0tJmd0O2FyY2gucG11X2ZpbHRlcikgewpAQCAtMTIyMCw2ICYjNDM7MTI5OSw4IEBAIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTsKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVDoKIAkJcmV0dXJuIGt2bV9hcm1fcG11X3YzX2luaXQodmNwdSk7CiAJfQpAQCAtMTI0Niw2ICYjNDM7MTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAJCWlycSA9IHZjcHUtJmd0O2FyY2gucG11LmlycV9udW07CiAJCXJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTsKIAl9CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgomIzQzOwkJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU5YSU87CkBAIC0xMjU5LDYgJiM0MzsxMzQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOgogCWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6CiYjNDM7CWNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOgogCQlpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSkKIAkJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jCmluZGV4IGI5NjNmZDk3NWFhY2FmLi42YmZiMjFmMDA0NDQyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jCkBAIC0xOTAsNyAmIzQzOzE5MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3Jlc2V0X3N2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSByZXNldF9zdGF0ZTsKLQlib29sIGxvYWRlZDsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpydW5uaW5nOwomIzQzOwlib29sIGxvYWRlZCA9IGZhbHNlOwogCXUzMiBwc3RhdGU7CiAKIAlzcGluX2xvY2soJmFtcDt2Y3B1LSZndDthcmNoLm1wX3N0YXRlX2xvY2spOwpAQCAtMTk4LDEwICYjNDM7MTk5LDE2IEBAIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXZjcHUtJmd0O2FyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTsKIAlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2gubXBfc3RhdGVfbG9jayk7CiAKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlsb2FkZWQgPSAodmNwdS0mZ3Q7Y3B1ICE9IC0xKTsKLQlpZiAobG9hZGVkKQomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlydW5uaW5nID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCWlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQlsb2FkZWQgPSB0cnVlOwogCQlrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTsKJiM0MzsJfQogCiAJaWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkgewogCQlpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSkKQEAgLTI2OSw3ICYjNDM7Mjc2LDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlpZiAobG9hZGVkKQogCQlrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCmluZGV4IDVkNWM1NzlkNDU3OTAyLi45ZTkwNWQ5YmU5ZjY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCkBAIC0zMDIwLDE3ICYjNDM7MzAyMCwyMiBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogCiAJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpOwotCi0JLyoKLQkgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzCi0JICogYWZmZWN0ZWQgYnkgSFBNRS4KLQkgKi8KLQlpZiAoKG9sZCBeIHZhbCkgJmFtcDsgTURDUl9FTDJfSFBNRSkKLQkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzOwlrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTsKIAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAomIzQzOwkJICAgIHU2NCB2YWwpCiYjNDM7ewomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpOwomIzQzOwomIzQzOwlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7CiYjNDM7CWt2bV9wbXVfaGFuZGxlX21kY3IodmNwdSwgb2xkLCB2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBhY2Nlc3NfcmFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJICAgICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCkBAIC0zMTc3LDggJiM0MzszMTgyLDEzIEBAIHN0YXRpYyBpbnQgc2V0X2ltcF9pZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLAogCiBzdGF0aWMgdTY0IHJlc2V0X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewotCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMpOwotCXJldHVybiB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzOwomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci0mZ3Q7cmVnKTsKJiM0MzsJdTY0IHZhbCA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnM7CiYjNDM7CiYjNDM7CV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCk7CiYjNDM7CWt2bV9wbXVfaGFuZGxlX21kY3IodmNwdSwgb2xkLCB2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwogfQogCiAvKgpAQCAtMzc0MSw3ICYjNDM7Mzc1MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHsKIAlFTDJfUkVHX0ZJTFRFUkVEKFNDVExSMl9FTDIsIGFjY2Vzc192bV9yZWcsIHJlc2V0X3ZhbCwgMCwKIAkJCSBzY3RscjJfZWwyX3Zpc2liaWxpdHkpLAogCUVMMl9SRUdfVk5DUihIQ1JfRUwyLCByZXNldF9oY3IsIDApLAotCUVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSwKJiM0MzsJU1lTX1JFR19VU0VSX0ZJTFRFUihNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDAsCiYjNDM7CQkJICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksCiAJRUwyX1JFRyhDUFRSX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIENQVFJfTlZIRV9FTDJfUkVTMSksCiAJRUwyX1JFR19WTkNSKEhTVFJfRUwyLCByZXNldF92YWwsIDApLAogCUVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaAppbmRleCBiNWU1OTQyMjA0ZmM2OS4uMGMzMWI3MmUzNDM1YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHsKIAlzdHJ1Y3Qga3ZtX3BtYyBwbWNbS1ZNX0FSTVY4X1BNVV9NQVhfQ09VTlRFUlNdOwogCWludCBpcnFfbnVtOwogCWJvb2wgY3JlYXRlZDsKJiM0MzsJYm9vbCBldmVudHNfbmVlZF9yZWNyZWF0ZTsKIH07CiAKIHN0cnVjdCBhcm1fcG11X2VudHJ5IHsKQEAgLTU2LDggJiM0Mzs1NywxMCBAQCBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpOwogdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7CiYjNDM7dm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7CiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLAogCQkJCSAgICB1NjQgc2VsZWN0X2lkeCk7CiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSk7CiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7CkBAIC0xMzMsNiAmIzQzOzEzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcG11X3Nob3VsZF9ub3RpZnlfdXNlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCQkgIHU2NCBkYXRhLCB1NjQgc2VsZWN0X2lkeCkge30KIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE2Myw2ICYjNDM7MTY3LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KSB7fQogc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQogc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NAotLS0gYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzcsNiAmIzQzOzQzNyw3IEBAIGVudW0gewogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCQkyCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VCQkzCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMJNAomIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJNQogI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAkJMQogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSCQkwCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVIJCTEKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaAppbmRleCBkZGY4MWYyNDk1NmJhMC4uMWM2MzMzNDNkNTc2NjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmgKQEAgLTE0MiwzMiAmIzQzOzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZCkKIAlyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTsKIH0KICNkZWZpbmUgZmllbGRfbWF4KGZpZWxkKQkoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpCi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKQkJCQkJXAotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKQlcCiYjNDM7I2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKQkJCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHYpICZhbXA7JmFtcDsgKHYgJmFtcDsgfmZpZWxkX21hc2soZmllbGQpKSkJXAogCQlfX2ZpZWxkX292ZXJmbG93KCk7CQkJCQlcCiAJcmV0dXJuIHRvKCh2ICZhbXA7IGZpZWxkX21hc2soZmllbGQpKSAqIGZpZWxkX211bHRpcGxpZXIoZmllbGQpKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsCVwKLQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsCQlcCiYjNDM7CQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKJiM0MzsJcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKIH0JCQkJCQkJCQlcCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsCQlcCiAJCQkJCWJhc2UgdmFsLCBiYXNlIGZpZWxkKQkJXAogewkJCQkJCQkJCVwKLQkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAomIzQzOwkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSB0eXBlIyNfZ2V0X2JpdHMoX18jI3R5cGUgdiwgYmFzZSBmaWVsZCkJXAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSBuYW1lIyNfZ2V0X2JpdHModHlwZSB2LCBiYXNlIGZpZWxkKQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiAoZnJvbSh2KSAmYW1wOyBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7CQlcCiB9Ci0jZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQlcCi0JX19fX01BS0VfT1AobGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpCVwKLQlfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSkJXAotCV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSwsKQotX19fX01BS0VfT1AodTgsdTgsLCkKJiM0MzsjZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQkJCVwKJiM0MzsJX19fX01BS0VfT1AobGUjI3NpemUsX19sZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSkJXAomIzQzOwlfX19fTUFLRV9PUChiZSMjc2l6ZSxfX2JlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KQlcCiYjNDM7CV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpCiYjNDM7X19fX01BS0VfT1AodTgsdTgsdTgsLCkKIF9fTUFLRV9PUCgxNikKIF9fTUFLRV9PUCgzMikKIF9fTUFLRV9PUCg2NCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCmluZGV4IDIyMjIzMzk1OTY5ZTBmLi5iNWY4Y2U4ZDM0NTFmMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCkBAIC0yNSw2ICYjNDM7MjUsMTQgQEAKIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0JiMzOTtzIGNvbW1vbiBhbW9uZyB0aGUgUE1VIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBUk1WOF9QTVVfQ1lDTEVfSURYCQkzMQogCiYjNDM7I2lmbmRlZiBNRENSX0VMMl9IUE1OCiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1OCQkJR0VOTUFTS19VTEwoNCwgMCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIE1EQ1JfRUwyX0hQTUUKJiM0MzsjZGVmaW5lIE1EQ1JfRUwyX0hQTUUJCQlCSVRfVUxMKDcpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgdnBtdV92bSB7CiAJc3RydWN0IGt2bV92bSAqdm07CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwpAQCAtNDAzLDEyICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwogCXU4IHBtdXZlciwgZWM7Ci0JdTY0IGRmcjAsIGlycSA9IDIzOwotCXN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgaXJxX2F0dHIgPSB7Ci0JCS5ncm91cCA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKLQkJLmF0dHIgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwKLQkJLmFkZHIgPSAodTY0KSZhbXA7aXJxLAotCX07CiYjNDM7CXU2NCBkZnIwOwogCiAJLyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi8KIAltZW1zZXQoJmFtcDt2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpOwpAQCAtNDM0LDggJiM0Mzs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKQogCVRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgJmFtcDsmYW1wOwogCQkgICAgcG11dmVyICZndDs9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLAogCQkgICAgJiMzNDtVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2MyYjMzQ7LCBwbXV2ZXIpOwotCi0JdmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsICZhbXA7aXJxX2F0dHIpOwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZCkKQEAgLTQ2MSwxNSAmIzQzOzQ2MiwxNyBAQCBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pCiAJfQogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKQomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKQomIzQzO3sKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wgZXhwZWN0X2ZhaWwpCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXVuc2lnbmVkIGludCBwcmV2OwogCWludCByZXQ7CiAKLQljcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTsKLQl2Y3B1ID0gdnBtdV92bS52Y3B1OwotCiAJcHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTsKIAogCXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLApAQCAtNDgxLDYgJiM0Mzs0ODQsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbAogCQkJICAgIG5yX2NvdW50ZXJzLCBwcmV2KTsKIAllbHNlCiAJCVRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywKJiM0MzsJCQkJCQkgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LAomIzQzOwkJCQkJCSBib29sIGV4cGVjdF9mYWlsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwl2Y3B1ID0gdnBtdV92bS52Y3B1OwomIzQzOwomIzQzOwlpZiAoZml4ZWRfY291bnRlcnNfb25seSkKJiM0MzsJCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwlzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTsKIAogCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTsKIH0KQEAgLTQ4OSwxNSAmIzQzOzUxMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sCiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yIHRoZSB2Q1BVIHRvIEBwbWNyX24sCiAgKiBhbmQgcnVuIHRoZSB0ZXN0LgogICovCi1zdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCXU2NCBzcDsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAotCXByX2RlYnVnKCYjMzQ7VGVzdCB3aXRoIHBtY3JfbiAlbHVcbiYjMzQ7LCBwbWNyX24pOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXG4mIzM0OywgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpOwogCXZjcHUgPSB2cG11X3ZtLnZjcHU7CiAKIAkvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovCkBAIC01MzEsMTQgJiM0Mzs1NTQsMTQgQEAgc3RhdGljIHN0cnVjdCBwbXJlZ19zZXRzIHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gPSB7CiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2YKICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuCiAgKi8KLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKQomIzQzO3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiB7CiAJaW50IGk7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXU2NCBzZXRfcmVnX2lkLCBjbHJfcmVnX2lkLCByZWdfdmFsOwogCXU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzazsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpOwogCXZjcHUgPSB2cG11X3ZtLnZjcHU7CiAKIAl2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTsKQEAgLTU4MywxNiAmIzQzOzYwNiw5NCBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbikKIAlkZXN0cm95X3ZwbXVfdm0oKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJdTY0IGV4cGVjdGVkX21kY3IsIG1kY3I7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJcHJfZGVidWcoJiMzNDtNRENSX0VMMiB0ZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxuJiMzNDssCiYjNDM7CQkgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CWlmICghdm1fc3VwcG9ydHNfZWwyKHZwbXVfdm0udm0pKSB7CiYjNDM7CQlkZXN0cm95X3ZwbXVfdm0oKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl2Y3B1ID0gdnBtdV92bS52Y3B1OwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlleHBlY3RlZF9tZGNyID0gdTY0X3JlcGxhY2VfYml0cyhtZGNyLCBGSUVMRF9NQVgoTURDUl9FTDJfSFBNTiksCiYjNDM7CQkJCQkgTURDUl9FTDJfSFBNTik7CiYjNDM7CXZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLAomIzQzOwkJICAgICBleHBlY3RlZF9tZGNyKTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTU4gd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CWlmIChmaXhlZF9jb3VudGVyc19vbmx5KSB7CiYjNDM7CQl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJCW1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7CiYjNDM7CQlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkJICAgICYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseCkmIzM0OywKJiM0MzsJCQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X25yX2NvdW50ZXJzKHZjcHUsIHBtY3JfbiwgZmFsc2UpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkgICAgJiMzNDtNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19TRVRfTlJfQ09VTlRFUlMgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCAmYW1wO2lycSk7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CiYjNDM7CW1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7CiYjNDM7CVRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjciwKJiM0MzsJCSAgICAmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0lOSVQgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CWV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTsKJiM0MzsJdmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksCiYjNDM7CQkgICAgIGV4cGVjdGVkX21kY3IpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkgICAgJiMzNDtNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNRSB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseCkmIzM0OywKJiM0MzsJCSAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTsKJiM0MzsKJiM0MzsJa3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sICZhbXA7aW5pdCk7CiYjNDM7CWluaXQuZmVhdHVyZXNbMF0gfD0gKDEgJmx0OyZsdDsgS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7CiYjNDM7CWFhcmNoNjRfdmNwdV9zZXR1cCh2Y3B1LCAmYW1wO2luaXQpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikgPT0gcG1jcl9uLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KSYjMzQ7LAomIzQzOwkJICAgIHBtY3JfbiwgRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7fQomIzQzOwogLyoKICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIGFuZCBhdHRlbXB0IHRvIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IKICAqIHRoZSB2Q1BVIHRvIEBwbWNyX24sIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0IHZhbHVlLgogICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuCiAgKi8KLXN0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24pCiYjNDM7c3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCXByX2RlYnVnKCYjMzQ7RXJyb3IgdGVzdCB3aXRoIHBtY3JfbiAlbHUgKGxhcmdlciB0aGFuIHRoZSBob3N0KVxuJiMzNDssIHBtY3Jfbik7CiAKLQl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7CiAJZGVzdHJveV92cG11X3ZtKCk7CiB9CiAKQEAgLTYyMiwyMiAmIzQzOzcyMywxNDcgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZCkKIAlyZXR1cm4gc3VwcG9ydGVkOwogfQogCi1pbnQgbWFpbih2b2lkKQomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKHZvaWQpCiB7Ci0JdTY0IGksIHBtY3JfbjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHUsICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXVuc2lnbmVkIGludCBucl9jb3VudGVycyA9IDA7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlKDIpOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCAmYW1wO2luaXQpOwomIzQzOwlpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsCiYjNDM7CQkJCSAgICAgJmFtcDtucl9jb3VudGVycyk7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KIAotCVRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTsKLQlURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7Ci0JVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKJiM0Mzt7CiYjNDM7CXU2NCBpOwogCi0JcG1jcl9uID0gZ2V0X3BtY3Jfbl9saW1pdCgpOwogCWZvciAoaSA9IDA7IGkgJmx0Oz0gcG1jcl9uOyBpJiM0MzsmIzQzOykgewotCQlydW5fYWNjZXNzX3Rlc3QoaSk7Ci0JCXJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTsKJiM0MzsJCXJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKJiM0MzsJCXJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKJiM0MzsJCXJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwogCX0KIAogCWZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpICZsdDsgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSYjNDM7JiM0MzspCi0JCXJ1bl9lcnJvcl90ZXN0KGkpOwomIzQzOwkJcnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CXJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsJCWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovCiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCAmYW1wO2ZpbHRlcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsICZhbXA7ZmlsdGVyKTsKJiM0MzsKJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSAoMSAmbHQ7Jmx0OyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRUJVU1ksCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXRlc3RfY29uZmlnKDAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MzsKJiM0MzsJdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTsKJiM0MzsJdGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7CiYjNDM7CXRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBBUk02NCBQTVUgRW11bGF0aW9uIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIHJldmlld2luZyB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5pbmcgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdHdlYWtzIHRoZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbi4gSSBzZWUgaXQgaW50cm9kdWNlcyBhIG5ldyBhdHRyaWJ1dGUsIGBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlgLCBhbmQgYWx0ZXJzIGhvdyBQTVUgZXZlbnRzIGFyZSByZWNyZWF0ZWQgYW5kIHRoZSBvdmVyYWxsIFBNVSBsb2FkaW5nL3JlbG9hZGluZyBwcm9jZXNzLgoKTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZXMg4oCTIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYCwgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYGFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3Jlc2V0LmNgIOKAkyB0aGlzIGlzIHVuZG91YnRlZGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gS1ZNIG9uIEFSTTY0LiBBbmQsIGltcG9ydGFudGx5LCBzaW5jZSB0aGlzIGlzIEtWTSwgdGhpcyBjYW4gZGVmaW5pdGVseSBiZSBhY2Nlc3NlZCBhbmQgaW5mbHVlbmNlZCBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3Rscy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgY2FsbHMgd2l0aCB0aGUgbmV3IGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCwgYW5kIGFsc28gYEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTYCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiBgYXJjaC9hcm02NC9rdm0vYCwgc28gYENPTkZJR19LVk1gIGlzIG9idmlvdXNseSBhIHByZXJlcXVpc2l0ZS4gSXQmIzM5O3MgYWxzbyBBUk02NC1zcGVjaWZpYywgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhbiBBUk02NCBzeXN0ZW0uCgpUbyBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgYWZmZWN0ZWQuIExldCYjMzk7cyBsaXN0IHRoZXNlIG91dDogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3ZjcHVfcmVsb2FkX3BtdWAsIGBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlgLCBga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzYCwgYGt2bV9hcm1fcG11X3YzX3NldF9hdHRyYCwgYGt2bV9hcm1fcG11X3YzX2dldF9hdHRyYCwgYGt2bV9hcm1fcG11X3YzX2hhc19hdHRyYCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRgLCBga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdWAsIGFuZCBga3ZtX3BtdV9wcm9iZV9hcm1wbXVgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgd2hpY2ggYXJlIGhhbmRsaW5nIHRoZSBjb3JlIGNoYW5nZXMuCgpGaW5hbGx5LCBJJiMzOTtsbCBkbyBhIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBgYXJjaC9hcm02NC9rdm0vYCBkaXJlY3RvcnkgdG8gZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTY2FubmluZyBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2Agc2hvd3MgYENPTkZJR19LVk1gIGlzIGluZGVlZCB0aGUgbWFpbiByZXF1aXJlbWVudC4gSSBzdXNwZWN0IGBDT05GSUdfSFdfUEVSRl9FVkVOVFNgIG1pZ2h0IGFsc28gYmUgbmVlZGVkLCBzaW5jZSBQTVUgZW11bGF0aW9uIG9mdGVuIHJlbGllcyBvbiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGluZnJhc3RydWN0dXJlLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IV19QRVJGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI4LVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6Mjk6a3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgJiM0Mzs9IHBtdS1lbXVsLm8gcG11Lm9cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTMwLWt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICYjNDM7PSBwYXV0aC5vXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM9MTI5PXN0YXRpYyB2b2lkIF9faHlwX3ZnaWNfcmVzdG9yZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ1LSAqL1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MTQ2OiNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jLTE0Ny1zdGF0aWMgYm9vbCBfX3BtdV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzMwCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipLVk0gUE1VIEVtdWxhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgcG11LWVtdWwub2AgbmVjZXNzaXRhdGVzIGBDT05GSUdfSFdfUEVSRl9FVkVOVFNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBuZWVkIGJvdGggYEtWTWAgYW5kIGBIV19QRVJGX0VWRU5UU2AsIGJ1dCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYENPTkZJR19LVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50LiBZZXMsIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgIGFyZSBib3RoIG5lY2Vzc2FyeS4KCk5vdywgbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gY2FsbHMgdGhpcyBpbnRyb2R1Y2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3OiBga3ZtX3BtdV9oYW5kbGVfbWRjcmAsIGBrdm1fdmNwdV9sb2FkX3BtdWAsIGBrdm1fdmNwdV9yZWxvYWRfcG11YCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXVgLCBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YCwgYW5kIGBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNgLgoKRmluYWxseSwgdG8gZ2V0IGEgdHJ1bHkgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgY2hlY2sgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgIGRpcmVjdGx5IHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgYW5kIGFsc28gdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGt2bV9wbXVfaGFuZGxlX21kY3J8XnZvaWQga3ZtX3ZjcHVfbG9hZF9wbXV8XnN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTU5NT12b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNjI0LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo2MjU6dm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbClcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNjI2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTg5OD11NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtOTM4LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo5Mzk6dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSlcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtOTQwLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTExMzM9c3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExNjMtXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjExNjQ6c3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMTY1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc2OQoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEtWTSBQTVUgRW11bGF0aW9uIG9uIEFSTTY0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgUE1VIGVtdWxhdGlvbiBmb3IgQVJNNjQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3ZjcHVfcmVsb2FkX3BtdWAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11YCwgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAsIGBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNgLCBga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJgLCBhbmQgYGt2bV9wbXVfcHJvYmVfYXJtcG11YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgYXJlYXMgdGhhdCBuZWVkIHRob3JvdWdoIHRlc3RpbmcuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0IGZvciB0aGlzLiBJIG5lZWQgYEtWTWAgYW5kIGBIV19QRVJGX0VWRU5UU2AuIEp1c3QgcXVpY2tseSwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgbmFtZXMuIFllcCwgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgYW5kIGBDT05GSUdfS1ZNYCBhcmUgdGhlIHJpZ2h0IG9uZXMuCgpBbmQgbm93IEkgd2lsbCBxdWlja2x5IGNoZWNrIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAgYW5kIGBrdm1fYXJtX3BtdV92M19nZXRfYXR0cmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJ8XmludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMTgwPXN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMTk2LVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMTk3OmludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExOTgte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTMxMC1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTMxMTppbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzEyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcxMAoJCQkJCQkJb3V0cHV0OiAyMTcKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEFSTTY0IFBNVSBFbXVsYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgY2FwYWJpbGl0eSBmb3IgdGhlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uOiBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGhvdyB0aGlzIGltcGFjdHMgZXhpc3RpbmcgdXNlcnNwYWNlIGludGVyYWN0aW9uIGFuZCBLVk0mIzM5O3MgY29yZSBQTVUgZW11bGF0aW9uIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCB0aGUgYGt2bV9hcm1fcG11X3YzX3NldF9hdHRyYCwgYGt2bV9hcm1fcG11X3YzX2dldF9hdHRyYCwgYW5kIGBrdm1fYXJtX3BtdV92M19oYXNfYXR0cmAgZnVuY3Rpb25zLCB3aGljaCBpcyB3aGVyZSB0aGUgbmV3IGZsYWcgaXMgYmVpbmcgaW50ZWdyYXRlZC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyBhZmZlY3RlZCBieSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZTogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdWAsIGBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlgLCBga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzYCwgYW5kIGBrdm1fcG11X3Byb2JlX2FybXBtdWAuIEkgbmVlZCB0byByZXZpZXcgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGNhcmVmdWxseTsgdGhlIFBNVSBldmVudCBjcmVhdGlvbiwgbG9hZGluZywgYW5kIHJlbG9hZGluZyBhcmUga2V5IHBvaW50cyBoZXJlIGJlY2F1c2UgdGhleSYjMzk7cmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlc2UgcHJvYmFibHkgbmVlZCBzb21lIGV4dHJhIHNjcnV0aW55LCBhcyB0aGV5IGFyZSBsaWtlbHkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IGNhcGFiaWxpdHkuCgpGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgZmVhdHVyZSByZWxhdGVkIHRvIFBNVSBlbXVsYXRpb24sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLiBUaGF0IG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgdGhlIHVzZXItdmlzaWJsZSBiZWhhdmlvciBhbmQgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgd2l0aCB0aGF0IGluIG1pbmQuIFRoZSBtZW50aW9uIG9mIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgIGluIHRoZSBjb25maWdzIGlzIGltcG9ydGFudC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoZSAmIzM0O3NldC1yZXN1bHRzJiMzNDsgYXJlLCB0byBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiB3aWxsIGFjdHVhbGx5IHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogSFdfUEVSRl9FVkVOVFM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0hXX1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3BtdV9oYW5kbGVfbWRjciYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9wcm9iZV9hcm1wbXUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEhXX1BFUkZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY4OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFSTTY0IEhhcmR3YXJlIFBlcmZvcm1hbmNlIEV2ZW50cyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgSFdfUEVSRl9FVkVOVFNgLi4uIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgQVJNNjQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZlYXR1cmUgaXMgY29udHJvbGxlZCBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBlaXRoZXIgZ29pbmcgdG8gYmUgdHVja2VkIGF3YXkgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2Ag4oCTIG1ha2VzIHRoZSBtb3N0IHNlbnNlIOKAkyBvciBwZXJoYXBzIGxpbmtlZCBpbiBgaW5pdC9LY29uZmlnYCBpZiBpdCYjMzk7cyBnb3Qgc29tZSBicm9hZGVyIGRlcGVuZGVuY3kgb3IgZ2xvYmFsIGluZmx1ZW5jZS4gR290dGEgcXVpY2tseSBjaGVjayBib3RoLiBJdCYjMzk7cyBhYm91dCBrbm93aW5nIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgYW5kIGNvbW1vbiBsb2NhdGlvbnMuIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSB3aXRoIGEgYmxpbmQgc2VhcmNoIGlmIEkgY2FuIG5hcnJvdyBpdCBkb3duIHdpdGggdGhpcyBiYXNpYyBrbm93bGVkZ2Ugb2YgdGhlIHRyZWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXX1BFUkZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9MTI1Mz1jb25maWcgQ1BVX1RUQlIwX1BBTlxuLS1cbmFyY2gvYXJtL0tjb25maWctMTI1OS1cbmFyY2gvYXJtL0tjb25maWc6MTI2MDpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtL0tjb25maWctMTI2MS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTYwNj1jb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE2MDktXG5hcmNoL2FybTY0L0tjb25maWc6MTYxMDpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjExLVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI2ODA9Y29uZmlnIE5PREVTX1NISUZUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjY4NC1cbmFyY2gvbWlwcy9LY29uZmlnOjI2ODU6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXG5hcmNoL21pcHMvS2NvbmZpZy0yNjg2LVx0Ym9vbCBcJiMzNDtFbmFibGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBwZXJmIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gvc2gvS2NvbmZpZz02MjY9Y29uZmlnIEdVU0FfUkJcbi0tXG5hcmNoL3NoL0tjb25maWctNjM1LVxuYXJjaC9zaC9LY29uZmlnOjYzNjpjb25maWcgSFdfUEVSRl9FVkVOVFNcbmFyY2gvc2gvS2NvbmZpZy02MzctXHRib29sIFwmIzM0O0VuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjcyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBJbXBsaWNpdCBGZWF0dXJlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyB0aGF0ICpmZWVscyogbGlrZSBpdCBzaG91bGQgYmUgdGhlcmUsIGJ1dCB0aGUgdG9vbCBpc24mIzM5O3QgZXhwbGljaXRseSBzaG93aW5nIGl0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSwgbGV0JiMzOTtzIGNhbGwgaXQgdGhlIGVsdXNpdmUgJiMzNDtpdCwmIzM0OyBpcyBhY3R1YWxseSBpbXBsaWNpdGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgcGVyaGFwcyBhcyBgZGVmX2Jvb2wgeWAsIGFuZCB0aGUgY3VycmVudCBzZXR1cCBqdXN0IGRvZXNuJiMzOTt0IHN1cmZhY2UgaXQuIFRoZSB0b29sIG1pZ2h0IHNpbXBseSBub3QgYmUgY29uZmlndXJlZCB0byByZWNvZ25pemUgaXQgY29ycmVjdGx5LCBtYXliZSBiZWNhdXNlIGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIHByb21wdCBjb25maWd1cmF0aW9uIG9wdGlvbi4KClNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBjaGVjayB0aGUgc3BlY2lmaWMgZGVmaW5pdGlvbnMsIGFuZCB0aGUgbGlrZWx5IGNhbmRpZGF0ZSwgYXQgbGVhc3QgYmFzZWQgb24gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBpcyBgUEVSRl9FVkVOVFNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBQRVJGX0VWRU5UU2AgaXMgdGhlIGtleSB0byB1bmxvY2tpbmcgb3IgdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgSSYjMzk7bSBvYnNlcnZpbmcuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyB0byBjaGVjaywgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFwmIzM0O1BlcmZvcm1hbmNlIG1vbml0b3JpbmdcJiMzNDtcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7QU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4tLVxuaW5pdC9LY29uZmlnPTIxMzg9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxMzktXG5pbml0L0tjb25maWc6MjE0MDpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTQxLVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA4MgoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlICYjMzQ7dGhvdWdodHMsJiMzNDsgcmVmbGVjdGluZyBteSB1bmRlcnN0YW5kaW5nIGFzIGFuIGV4cGVydDoKCioqRm9jdXNpbmcgb24gS1ZNIGFuZCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nKioKCkFscmlnaHQsIGdpdmVuIHRoZSBjb250ZXh0LCB0aGUgY29yZSB0aG91Z2h0IGhlcmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogbGV0JiMzOTtzIGltbWVkaWF0ZWx5IG5hcnJvdyB0aGUgc2NvcGUgdG8gdHdvIGtleSB0b29scywgYEtWTWAgYW5kIGBQRVJGX0VWRU5UU2AuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgcGVyZm9ybWFuY2UtcmVsYXRlZCBpbnZlc3RpZ2F0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdXNlIG9mIGBLVk1gIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGh5cGVydmlzb3ItYmFzZWQgdmlydHVhbGl6YXRpb24gc2V0dXAsIG1lYW5pbmcgd2UmIzM5O3JlIGRpcmVjdGx5IGRlYWxpbmcgd2l0aCB2aXJ0dWFsIG1hY2hpbmVzIChWTXMpIGFuZCB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0IGhhcmR3YXJlLiBBbmQsIHRoZSBpbmNsdXNpb24gb2YgYFBFUkZfRVZFTlRTYCBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB3ZSYjMzk7bGwgYmUgZGl2aW5nIGRlZXAgaW50byBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycy4gV2UmIzM5O3JlIHRhbGtpbmcgZGV0YWlsZWQgbWVhc3VyZW1lbnRzIG9mIENQVSBjeWNsZXMsIGNhY2hlIG1pc3NlcywgYnJhbmNoIHByZWRpY3Rpb25zLCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIOKAkyB0aGUgbml0dHktZ3JpdHR5IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIHRob3NlIFZNcy4gVGhpcyBhcHByb2FjaCBhbGxvd3MgZm9yIGRldGFpbGVkIGFuZCBudWFuY2VkIGV2YWx1YXRpb24gb2Ygc3BlY2lmaWMgcGVyZm9ybWFuY2UgaXNzdWVzLiBJdOKAmXMgYW4gZWZmaWNpZW50IHdheSB0byBjdXQgdGhyb3VnaCB0aGUgbm9pc2UgYW5kIGdldCByaWdodCB0byB0aGUgc291cmNlIG9mIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgaGlnaC1sZXZlbCBvdmVydmlldzsgdGhpcyBpcyBhIGRpYWdub3N0aWMgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3BtdV9oYW5kbGVfbWRjciYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX3BtdSYjMzQ7LAogICAgJiMzNDtrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSYjMzQ7LAogICAgJiMzNDtrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMmIzM0OywKICAgICYjMzQ7a3ZtX3BtdV9wcm9iZV9hcm1wbXUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcG11X2hhbmRsZV9tZGNyJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2xvYWRfcG11JiMzNDssCiAgICAmIzM0O2t2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUmIzM0OywKICAgICYjMzQ7a3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5JiMzNDssCiAgICAmIzM0O2t2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtrdm1fcG11X3Byb2JlX2FybXBtdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGZlYXR1cmUgKEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSkgYW5kIG1vZGlmaWVzIFBNVSBldmVudCBjcmVhdGlvbiwgbG9hZGluZywgYW5kIHJlbG9hZGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1vZGlmaWVzIGNvcmUgS1ZNIFBNVSBlbXVsYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNDo0NS43MzIzODM5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzM5OTk5OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNDo0NS43MzIzOTQwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MTExMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNhOGM3MDc0YjUwYjE2NWE1NTE5MGZlMjliYWM2MDRmYWYyNmRlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwNjoxNDo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMWQ1OTJlNzBiZGVhM2QgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuQEAgLTc0LDcgKzc0LDggQEAgaXJxY2hpcC5cXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XFxuIFxcdCBcXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxcbi1cXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXFxuK1xcdFxcdCAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbiBcXHQgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2VcXG4gXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5AQCAtMTE2LDE0ICsxMTcsMTQgQEAgdXNpbmcgZXZlbnQgMHgxMSAoQ1BVX0NZQ0xFUykuXFxuIFxcbiA6UmV0dXJuczpcXG4gXFxuLVxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4rICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4gXFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcXG4gXFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcXG4gXFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxcbiBcXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxcbi1cXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXFxuIGZvciB0aGUgcHVycG9zZSBvZiBQTVUgZW11bGF0aW9uLiBUaGUgUE1VIGlkZW50aWZpZXIgY2FuIGJlIHJlYWQgZnJvbSB0aGUgXFxcInR5cGVcXFwiXFxuQEAgLTE2NSw2ICsxNjYsMjcgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxcbiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpc1xcbiBhdHRyaWJ1dGUuXFxuIFxcbisxLjYgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6UGFyYW1ldGVyczogbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4ga3ZtX2RldmljZV9hdHRyLmFkZHJcXG4rXFxuKzpSZXR1cm5zOlxcbitcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxcbitcXHRcXHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxcbitcXHRcXHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXFxuK1xcdCAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nXFxuK1xcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitJZiBzZXQsIEtWTSBlbXVsYXRlcyBQTVV2MyB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycy5cXG4rXFxuK1doZW4gdGhpcyBhdHRyaWJ1dGUgaXMgZW5hYmxlZCwgdGhlIHZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVXFxuK3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzXFxuK2F0dHJpYnV0ZSBpcyBWTS1zY29wZWQuXFxuK1xcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBiYWUyYzRmOTJlZjVjMC4uMzk5OGU2NmM2NTcxNTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTM2Nyw2ICszNjcsMTAgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXFx0XFx0MTBcXG4gXFx0LyogVW5oYW5kbGVkIFNFQXMgYXJlIHRha2VuIHRvIHVzZXJzcGFjZSAqL1xcbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfRVhJVF9TRUFcXHRcXHRcXHRcXHQxMVxcbitcXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqL1xcbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lUXFx0XFx0XFx0MTJcXG4rXFx0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXFx0MTNcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5pbmRleCAxYzEzYmZhMmQzOGFhZC4uMzlhMWExZTQxMmU2NmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuQEAgLTQzNyw2ICs0MzcsNyBAQCBlbnVtIHtcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXFx0XFx0MlxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXFx0XFx0M1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcXHQ0XFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQ1XFxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlxcdFxcdDBcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXFx0XFx0MVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcXG5pbmRleCAxOTk1ZTExOTg2NDhlOC4uYTVhZTYyODIwNGExMjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXFxuQEAgLTEwMDUsNyArMTAwNSw3IEBAIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VycmF0YVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5kZXNjID0gXFxcIkFwcGxlIElNUERFRiBQTVV2MyBUcmFwc1xcXCIsXFxuIFxcdFxcdC5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9QTVVWM19JTVBERUZfVFJBUFMsXFxuLVxcdFxcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0xPQ0FMX0NQVV9FUlJBVFVNLFxcbitcXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9FQVJMWV9MT0NBTF9DUFVfRkVBVFVSRSxcXG4gXFx0XFx0Lm1hdGNoZXMgPSBoYXNfaW1wZGVmX3BtdXYzLFxcbiBcXHRcXHQuY3B1X2VuYWJsZSA9IGNwdV9lbmFibGVfaW1wZGVmX3BtdXYzX3RyYXBzLFxcbiBcXHR9LFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuaW5kZXggNTBhZGZmZjc1YmU4MmUuLmE4NjZiZWI4ZDg3M2QzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5AQCAtNjUxLDYgKzY1MSw3IEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9zMl9tbXUgKm1tdTtcXG4rXFx0aW50IGxhc3RfY3B1ID0gdmNwdS1cXHUwMDNlY3B1O1xcbiBcXHRpbnQgKmxhc3RfcmFuO1xcbiBcXG4gXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbkBAIC03MDAsNiArNzAxLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbiBcXHRpZiAoaGFzX3ZoZSgpKVxcbiBcXHRcXHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcXG4gXFx0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xcbitcXHRrdm1fdmNwdV9sb2FkX3BtdSh2Y3B1LCBsYXN0X2NwdSk7XFxuIFxcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xcbiBcXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuIFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbkBAIC03NDksNyArNzUxLDYgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcXG4gXFxuIFxcdHZjcHVfY2xlYXJfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xcbi1cXHR2Y3B1LVxcdTAwM2VjcHUgPSAtMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMTY1MiwyOSArMTY1MywyNiBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGluaXQtXFx1MDAzZWZlYXR1cmVzWzBdO1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGt2bV92Y3B1X2luaXRfY2hhbmdlZCh2Y3B1LCBpbml0KSlcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGJpdG1hcF9jb3B5KGt2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLCBcXHUwMDI2ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7XFxuIFxcbiBcXHRyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqL1xcbiBcXHRrdm1fcmVzZXRfdmNwdSh2Y3B1KTtcXG4gXFxuIFxcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19WQ1BVX0ZFQVRVUkVTX0NPTkZJR1VSRUQsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbiBcXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xcbi1cXHRyZXQgPSAwO1xcbi1vdXRfdW5sb2NrOlxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbkBAIC0xNjkwLDYgKzE2ODgsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXG4gXFx0aWYgKCFrdm1fdmNwdV9pbml0aWFsaXplZCh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIF9fa3ZtX3ZjcHVfc2V0X3RhcmdldCh2Y3B1LCBpbml0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuaW5kZXggOTgzMDViYmZjMDk1YWIuLmZmNWQ1ZjY2YTljMDlmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuQEAgLTcsOSArNyw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BtdS5oXFx1MDAzZVxcbkBAIC0xNyw2ICsxNywxMyBAQFxcbiBcXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXFx0QklUKDApXFxuIFxcbisjZGVmaW5lIE1EQ1JfRUwyX1BNVV9SRUNSRUFURV9NQVNLXFx0KE1EQ1JfRUwyX0hQTU4gfCBNRENSX0VMMl9IUE1EIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgTURDUl9FTDJfSExQKVxcbitcXG4rLypcXG4rICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnRcXG4rICogVk0gc3RhdGUsIHNvIGEgdHJ1ZSByZXN1bHQgbXVzdCByZW1haW4gdmFsaWQgYWZ0ZXIgdGhlIGNoZWNrLlxcbisgKi9cXG4gc3RhdGljIExJU1RfSEVBRChhcm1fcG11cyk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7XFxuIFxcbkBAIC0yNiw3ICszMyw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpO1xcbiBcXG4gYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcXG4ge1xcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNmFybV9wbXVzKTtcXG4gfVxcbiBcXG5AQCAtODAsNiArODYsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0cmV0dXJuIG1hc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxcbkBAIC0zMTcsMTcgKzMyOCwyMiBAQCB1NjQga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTtcXG4rXFx0dTY0IG4gPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xcbiBcXG4tXFx0aWYgKHZhbCA9PSAwKVxcbitcXHRpZiAobiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBHRU5NQVNLKHZhbCAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xcbitcXHRcXHRyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4ge1xcbi1cXHRpZiAoIXBtYy1cXHUwMDNlcGVyZl9ldmVudCkge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcXG4rXFxuK1xcdGlmICghcG1jLVxcdTAwM2VwZXJmX2V2ZW50IHx8XFxuK1xcdCAgICAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAhY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cXHUwMDNlY3B1KSxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ0b19hcm1fcG11KHBtYy1cXHUwMDNlcGVyZl9ldmVudC1cXHUwMDNlcG11KS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKSkge1xcbiBcXHRcXHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHBtYyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC02MDYsNiArNjIyLDIxIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXFxuIFxcdH1cXG4gfVxcbiBcXG4rdm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbClcXG4re1xcbitcXHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG9cXG4rXFx0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE1EQ1JfRUwyX1BNVV9SRUNSRUFURV9NQVNLKVxcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBtdS5ldmVudHNfbmVlZF9yZWNyZWF0ZSA9IHRydWU7XFxuK1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IChNRENSX0VMMl9IUE1FIHwgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0spKVxcbitcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuQEAgLTY0OSwxMCArNjgwLDggQEAgc3RhdGljIGJvb2wga3ZtX3BtY19jb3VudHNfYXRfZWwyKHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIFxcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXFx1MDAyNiBBUk1WOF9QTVVfSU5DTFVERV9FTDI7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuK3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxcbiB7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBDUFUgUE1VIGxpa2VseSBpc24ndCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmdcXG4gXFx0ICogZm9yIHRoZSBndWVzdCdzIFBNVXYzIGV2ZW50IElELlxcbkBAIC02NjMsMTQgKzY5MiwyNyBAQCBzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxcbiBcXHRyZXR1cm4gZXZlbnRzZWw7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50IC0gY3JlYXRlIGEgcGVyZiBldmVudCBmb3IgYSBjb3VudGVyXFxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxcbi0gKi9cXG4tc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xcbitcXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xcbitcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFxcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcXG4rXFx0XFx0cG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuK1xcbitcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBtdTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUoc3RydWN0IGt2bV9wbWMgKnBtYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xcbi1cXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XFxuIFxcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcXG4gXFx0aW50IGV2ZW50c2VsO1xcbkBAIC03MDQsNyArNzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbiBcXHQgKiBEb24ndCBjcmVhdGUgYW4gZXZlbnQgaWYgd2UncmUgcnVubmluZyBvbiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzXFxuIFxcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4ndCBmaW5kIGEgdmFsaWQgbWFwcGluZy5cXG4gXFx0ICovXFxuLVxcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS1cXHUwMDNla3ZtLCBldmVudHNlbCk7XFxuK1xcdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpO1xcbiBcXHRpZiAoZXZlbnRzZWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC03NDksNiArNzkxLDMyIEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0cG1jLVxcdTAwM2VwZXJmX2V2ZW50ID0gZXZlbnQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50IC0gY3JlYXRlIGEgcGVyZiBldmVudCBmb3IgYSBjb3VudGVyXFxuKyAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxcbisgKi9cXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xcbitcXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbitcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0YXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KFJFQURfT05DRSh2Y3B1LVxcdTAwM2VjcHUpKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghYXJtX3BtdSkge1xcbitcXHRcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImt2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRhZGRfdGFpbnQoVEFJTlRfQ1BVX09VVF9PRl9TUEVDLCBMT0NLREVQX1NUSUxMX09LKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XFxuK1xcdFxcdH0gd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KFJFQURfT05DRSh2Y3B1LVxcdTAwM2VjcHUpLCBcXHUwMDI2YXJtX3BtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUgLSBzZXQgc2VsZWN0ZWQgY291bnRlciB0byBtb25pdG9yIHNvbWUgZXZlbnRcXG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcXG5AQCAtNzg5LDQzICs4NTcsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGVudHJ5LVxcdTAwM2Vhcm1fcG11ID0gcG11O1xcbi1cXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlZW50cnksIFxcdTAwMjZhcm1fcG11cyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcXG4te1xcbi1cXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICpwbXU7XFxuLVxcdGludCBjcHU7XFxuLVxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcXG4tXFx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcXG4tXFx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcXG4tXFx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxcbi1cXHQgKlxcbi1cXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcXG4tXFx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXFxuLVxcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXFxuLVxcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXFxuLVxcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxcbi1cXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXFxuLVxcdCAqXFxuLVxcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxcbi1cXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXFxuLVxcdCAqIGNhcnJpZWQgaGVyZS5cXG4tXFx0ICovXFxuLVxcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcXG4tXFx0XFx0cG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuLVxcbi1cXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFxcdTAwMjZwbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKSlcXG4tXFx0XFx0XFx0cmV0dXJuIHBtdTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZlbnRyeS1cXHUwMDNlZW50cnksIFxcdTAwMjZhcm1fcG11cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpXFxuQEAgLTg3MCw2ICs5MDIsMTMgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gXFx0dTY0IHZhbCwgbWFzayA9IDA7XFxuIFxcdGludCBiYXNlLCBpLCBucl9ldmVudHM7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBIaWRlIHRoZSBoYXJkd2FyZSBQTVUncyBldmVudCBzZXQgdG8ga2VlcCBQTUNFSUQgc3RhYmxlIGFjcm9zc1xcbitcXHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGlmICghcG1jZWlkMSkge1xcbiBcXHRcXHR2YWwgPSBjb21wdXRlX3BtY2VpZDAoY3B1X3BtdSk7XFxuIFxcdFxcdGJhc2UgPSAwO1xcbkBAIC04OTcsOSArOTM2LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAyNiBtYXNrO1xcbiB9XFxuIFxcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxcbit7XFxuK1xcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkgfHwgdmNwdS1cXHUwMDNlY3B1ID09IGxhc3RfY3B1IHx8IGxhc3RfY3B1ID09IC0xKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoa3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS1cXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucG11O1xcbiBcXHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChwbXUtXFx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxcbitcXHRcXHRcXHRrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTtcXG4rXFxuK1xcdFxcdHBtdS1cXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUgPSBmYWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgXFx1MDAyNj0sIG1hc2spO1xcbiBcXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsIFxcdTAwMjY9LCBtYXNrKTtcXG5AQCAtMTAwOCw2ICsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdTtcXG4gXFxuK1xcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcXG4gXFx0ICogZXZlbnQsIHRob3VnaCB0aGUgc2FtZSBtYXkgbm90IGJlIHRydWUgb2Ygbm9uLVBNVXYzIGhhcmR3YXJlLlxcbkBAIC0xMDIyLDMwICsxMDgyLDEyIEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4gYml0bWFwX3dlaWdodChhcm1fcG11LVxcdTAwM2VjbnRyX21hc2ssIEFSTVY4X1BNVV9NQVhfR0VORVJBTF9DT1VOVEVSUyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yKVxcbi17XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcXG4tXFxuLVxcdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cycgYmFjay4uLiAqL1xcbi1cXHRpZiAodGVzdF9iaXQoS1ZNX0FSTV9WQ1BVX0hBU19FTDIsIGt2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xcbi1cXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4tXFxuLVxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xcbi1cXHRcXHRcXHR1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xcbi1cXHRcXHRcXHR2YWwgXFx1MDAyNj0gfk1EQ1JfRUwyX0hQTU47XFxuLVxcdFxcdFxcdHZhbCB8PSBGSUVMRF9QUkVQKE1EQ1JfRUwyX0hQTU4sIGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMpO1xcbi1cXHRcXHRcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLmFybV9wbXUgPSBhcm1fcG11O1xcbi1cXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSk7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMDYyLDcgKzExMDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXFxuICAqL1xcbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcXG4rXFx0LypcXG4rXFx0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcXG4rXFx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcXG4rXFx0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcXG4rXFx0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxcbitcXHQgKlxcbitcXHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcXG4rXFx0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXFxuK1xcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXFxuK1xcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXFxuK1xcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxcbitcXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxcbitcXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseSwgb3IgcmVxdWVzdCBmaXhlZC1jb3VudGVycy1vbmx5XFxuK1xcdCAqIGVtdWxhdGlvbi4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nIGNhcnJpZWQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIFxcbiBcXHRpZiAoIWFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbkBAIC0xMDc5LDE3ICsxMTM4LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXFxuIFxcdGludCByZXQgPSAtRU5YSU87XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcm1fcG11c19sb2NrKTtcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbiBcXHRcXHRhcm1fcG11ID0gZW50cnktXFx1MDAzZWFybV9wbXU7XFxuIFxcdFxcdGlmIChhcm1fcG11LVxcdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcXG4gXFx0XFx0XFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fFxcbitcXHRcXHRcXHQgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHxcXG4gXFx0XFx0XFx0ICAgIChrdm0tXFx1MDAzZWFyY2gucG11X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKTtcXG4gXFx0XFx0XFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XFxuIFxcdFxcdFxcdGNwdW1hc2tfY29weShrdm0tXFx1MDAzZWFyY2guc3VwcG9ydGVkX2NwdXMsIFxcdTAwMjZhcm1fcG11LVxcdTAwM2VzdXBwb3J0ZWRfY3B1cyk7XFxuIFxcdFxcdFxcdHJldCA9IDA7XFxuQEAgLTEwOTcsMjEgKzExNTgsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVxcdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbiBcXG4rXFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKG4gXFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMTc1LDcgKzEyNTQsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRcXHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxcbitcXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gucG11X2ZpbHRlcikge1xcbkBAIC0xMjIwLDYgKzEyOTksOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXG4gXFx0XFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG4rXFx0XFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTtcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XFxuIFxcdFxcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xcbiBcXHR9XFxuQEAgLTEyNDYsNiArMTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcdFxcdGlycSA9IHZjcHUtXFx1MDAzZWFyY2gucG11LmlycV9udW07XFxuIFxcdFxcdHJldHVybiBwdXRfdXNlcihpcnEsIHVhZGRyKTtcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG4rXFx0XFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIC1FTlhJTztcXG5AQCAtMTI1OSw2ICsxMzQzLDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX2hhc19hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcXG4gXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVU6XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlM6XFxuK1xcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxcbiBcXHRcXHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5pbmRleCBiOTYzZmQ5NzVhYWNhZi4uNmJmYjIxZjAwNDQ0MjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcXG5AQCAtMTkwLDcgKzE5MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3Jlc2V0X3N2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xcbi1cXHRib29sIGxvYWRlZDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nO1xcbitcXHRib29sIGxvYWRlZCA9IGZhbHNlO1xcbiBcXHR1MzIgcHN0YXRlO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlX2xvY2spO1xcbkBAIC0xOTgsMTAgKzE5OSwxNiBAQCB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5yZXNldF9zdGF0ZS5yZXNldCA9IGZhbHNlO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcXG4gXFxuLVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbi1cXHRsb2FkZWQgPSAodmNwdS1cXHUwMDNlY3B1ICE9IC0xKTtcXG4tXFx0aWYgKGxvYWRlZClcXG4rXFx0Z3VhcmQocHJlZW1wdCkoKTtcXG4rXFxuK1xcdHJ1bm5pbmcgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xcbitcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRpZiAoS1ZNX0JVR19PTihydW5uaW5nICE9IHZjcHUsIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdGxvYWRlZCA9IHRydWU7XFxuIFxcdFxcdGt2bV9hcmNoX3ZjcHVfcHV0KHZjcHUpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKSB7XFxuIFxcdFxcdGlmICh2Y3B1X2hhc19mZWF0dXJlKHZjcHUsIEtWTV9BUk1fVkNQVV9TVkUpKVxcbkBAIC0yNjksNyArMjc2LDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHRpZiAobG9hZGVkKVxcbiBcXHRcXHRrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG4tXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gfVxcbiBcXG4gdTMyIGt2bV9nZXRfcGFfYml0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjllOTA1ZDliZTlmNjdlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTMwMjAsMTcgKzMwMjAsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzXFxuLVxcdCAqIGFmZmVjdGVkIGJ5IEhQTUUuXFxuLVxcdCAqL1xcbi1cXHRpZiAoKG9sZCBeIHZhbCkgXFx1MDAyNiBNRENSX0VMMl9IUE1FKVxcbi1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK1xcdGt2bV9wbXVfaGFuZGxlX21kY3IodmNwdSwgb2xkLCB2YWwpO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2V0X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCxcXG4rXFx0XFx0ICAgIHU2NCB2YWwpXFxuK3tcXG4rXFx0dTY0IG9sZCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyKTtcXG4rXFxuK1xcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcXG4rXFx0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgYWNjZXNzX3JhcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKVxcbkBAIC0zMTc3LDggKzMxODIsMTMgQEAgc3RhdGljIGludCBzZXRfaW1wX2lkX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXFxuIFxcbiBzdGF0aWMgdTY0IHJlc2V0X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKVxcbiB7XFxuLVxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVxcdTAwM2VyZWcsIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMpO1xcbi1cXHRyZXR1cm4gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycztcXG4rXFx0dTY0IG9sZCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZyk7XFxuK1xcdHU2NCB2YWwgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xcbitcXG4rXFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZywgdmFsKTtcXG4rXFx0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0zNzQxLDcgKzM3NTEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XFxuIFxcdEVMMl9SRUdfRklMVEVSRUQoU0NUTFIyX0VMMiwgYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCAwLFxcbiBcXHRcXHRcXHQgc2N0bHIyX2VsMl92aXNpYmlsaXR5KSxcXG4gXFx0RUwyX1JFR19WTkNSKEhDUl9FTDIsIHJlc2V0X2hjciwgMCksXFxuLVxcdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcXG4rXFx0U1lTX1JFR19VU0VSX0ZJTFRFUihNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDAsXFxuK1xcdFxcdFxcdCAgICBOVUxMLCBzZXRfbWRjciwgZWwyX3Zpc2liaWxpdHkpLFxcbiBcXHRFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSxcXG4gXFx0RUwyX1JFR19WTkNSKEhTVFJfRUwyLCByZXNldF92YWwsIDApLFxcbiBcXHRFTDJfUkVHX1ZOQ1JfRklMVChIRkdSVFJfRUwyLCBmZ3RfdmlzaWJpbGl0eSksXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxcbmluZGV4IGI1ZTU5NDIyMDRmYzY5Li4wYzMxYjcyZTM0MzVhNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG5AQCAtMzIsNiArMzIsNyBAQCBzdHJ1Y3Qga3ZtX3BtdSB7XFxuIFxcdHN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107XFxuIFxcdGludCBpcnFfbnVtO1xcbiBcXHRib29sIGNyZWF0ZWQ7XFxuK1xcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XFxuQEAgLTU2LDggKzU3LDEwIEBAIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcXG4rdm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7XFxuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXFxuIFxcdFxcdFxcdFxcdCAgICB1NjQgc2VsZWN0X2lkeCk7XFxuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpO1xcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xcbkBAIC0xMzMsNiArMTM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtMTYzLDYgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbisrKyBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUlxcdFxcdDJcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVVxcdFxcdDNcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTXFx0NFxcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXFx0NVxcbiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXFx0XFx0MVxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVJcXHRcXHQwXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUlxcdFxcdDFcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXFxuaW5kZXggZGRmODFmMjQ5NTZiYTAuLjFjNjMzMzQzZDU3NjY4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxcbkBAIC0xNDIsMzIgKzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZClcXG4gXFx0cmV0dXJuIGZpZWxkIC8gZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XFxuIH1cXG4gI2RlZmluZSBmaWVsZF9tYXgoZmllbGQpXFx0KCh0eXBlb2YoZmllbGQpKWZpZWxkX21hc2soZmllbGQpKVxcbi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKVxcdFxcXFxcXG4rI2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVxcdFxcdFxcdFxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbiB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXFx1MDAyNlxcdTAwMjYgKHYgXFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVxcdFxcXFxcXG4gXFx0XFx0X19maWVsZF9vdmVyZmxvdygpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cmV0dXJuIHRvKCh2IFxcdTAwMjYgZmllbGRfbWFzayhmaWVsZCkpICogZmllbGRfbXVsdGlwbGllcihmaWVsZCkpO1xcdFxcXFxcXG4gfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfcmVwbGFjZV9iaXRzKF9fIyN0eXBlIG9sZCxcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVxcdFxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsXFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdHJldHVybiAob2xkIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbitcXHRyZXR1cm4gKG9sZCBcXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1xcdFxcXFxcXG4gfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHR5cGUjI3BfcmVwbGFjZV9iaXRzKF9fIyN0eXBlICpwLFxcdFxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsXFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcXHRcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCpwID0gKCpwIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbitcXHQqcCA9ICgqcCBcXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1xcdFxcXFxcXG4gfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVxcdFxcXFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIG5hbWUjI19nZXRfYml0cyh0eXBlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbiB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyZXR1cm4gKGZyb20odikgXFx1MDAyNiBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XFx0XFx0XFxcXFxcbiB9XFxuLSNkZWZpbmUgX19NQUtFX09QKHNpemUpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcXHRcXFxcXFxuLVxcdF9fX19NQUtFX09QKGJlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4tXFx0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLCwpXFxuLV9fX19NQUtFX09QKHU4LHU4LCwpXFxuKyNkZWZpbmUgX19NQUtFX09QKHNpemUpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX19fTUFLRV9PUChsZSMjc2l6ZSxfX2xlIyNzaXplLHUjI3NpemUsY3B1X3RvX2xlIyNzaXplLGxlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4rXFx0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcXHRcXFxcXFxuK1xcdF9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpXFxuK19fX19NQUtFX09QKHU4LHU4LHU4LCwpXFxuIF9fTUFLRV9PUCgxNilcXG4gX19NQUtFX09QKDMyKVxcbiBfX01BS0VfT1AoNjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuaW5kZXggMjIyMjMzOTU5NjllMGYuLmI1ZjhjZThkMzQ1MWYyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuQEAgLTI1LDYgKzI1LDE0IEBAXFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0J3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXFxuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFxcdFxcdDMxXFxuIFxcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTU5cXG4rI2RlZmluZSBNRENSX0VMMl9IUE1OXFx0XFx0XFx0R0VOTUFTS19VTEwoNCwgMClcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcXG4rI2RlZmluZSBNRENSX0VMMl9IUE1FXFx0XFx0XFx0QklUX1VMTCg3KVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCB2cG11X3ZtIHtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG5AQCAtNDAzLDEyICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XFxuIFxcdHU4IHBtdXZlciwgZWM7XFxuLVxcdHU2NCBkZnIwLCBpcnEgPSAyMztcXG4tXFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcXG4tXFx0XFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbi1cXHRcXHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxcbi1cXHRcXHQuYWRkciA9ICh1NjQpXFx1MDAyNmlycSxcXG4tXFx0fTtcXG4rXFx0dTY0IGRmcjA7XFxuIFxcbiBcXHQvKiBUaGUgdGVzdCBjcmVhdGVzIHRoZSB2cG11X3ZtIG11bHRpcGxlIHRpbWVzLiBFbnN1cmUgYSBjbGVhbiBzdGF0ZSAqL1xcbiBcXHRtZW1zZXQoXFx1MDAyNnZwbXVfdm0sIDAsIHNpemVvZih2cG11X3ZtKSk7XFxuQEAgLTQzNCw4ICs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiBcXHRURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBwbXV2ZXIgXFx1MDAzZT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVAsXFxuIFxcdFxcdCAgICBcXFwiVW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcXFwiLCBwbXV2ZXIpO1xcbi1cXG4tXFx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFxcdTAwMjZpcnFfYXR0cik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxcbkBAIC00NjEsMTUgKzQ2MiwxNyBAQCBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZV9kb25lKHZvaWQpXFxuK3tcXG4rXFx0R1VFU1RfRE9ORSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0dW5zaWduZWQgaW50IHByZXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4tXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4tXFxuIFxcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XFxuIFxcbiBcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG5AQCAtNDgxLDYgKzQ4NCwyNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXFxuIFxcdFxcdFxcdCAgICBucl9jb3VudGVycywgcHJldik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0VEVTVF9BU1NFUlQoIXJldCwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYm9vbCBleHBlY3RfZmFpbClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbitcXG4rXFx0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFxuK1xcdHNldF9ucl9jb3VudGVycyh2Y3B1LCBucl9jb3VudGVycywgZXhwZWN0X2ZhaWwpO1xcbiBcXG4gXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbiB9XFxuQEAgLTQ4OSwxNSArNTEyLDE1IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2xcXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxcbiAgKiBhbmQgcnVuIHRoZSB0ZXN0LlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXFxuK3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuIHtcXG4gXFx0dTY0IHNwO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiVGVzdCB3aXRoIHBtY3JfbiAlbHVcXFxcblxcXCIsIHBtY3Jfbik7XFxuK1xcdHByX2RlYnVnKFxcXCJUZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcXFxuXFxcIiwgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4gXFxuLVxcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcXG4rXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpO1xcbiBcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbiBcXG4gXFx0LyogU2F2ZSB0aGUgaW5pdGlhbCBzcCB0byByZXN0b3JlIHRoZW0gbGF0ZXIgdG8gcnVuIHRoZSBndWVzdCBhZ2FpbiAqL1xcbkBAIC01MzEsMTQgKzU1NCwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcXG4gICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mXFxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcXG4gXFx0dTY0IHZhbGlkX2NvdW50ZXJzX21hc2ssIG1heF9jb3VudGVyc19tYXNrO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xcbitcXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XFxuIFxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuIFxcbiBcXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcXG5AQCAtNTgzLDE2ICs2MDYsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXG4rXFx0cHJfZGVidWcoXFxcIk1EQ1JfRUwyIHRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXHRpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkge1xcbitcXHRcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxcbitcXHRcXHRcXHRcXHRcXHQgTURDUl9FTDJfSFBNTik7XFxuK1xcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxcbitcXHRcXHQgICAgIGV4cGVjdGVkX21kY3IpO1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KSB7XFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0XFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0XFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXHR9XFxuK1xcbitcXHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXFx1MDAyNmlycSk7XFxuK1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcXG4rXFx0XFx0ICAgIFxcXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19JTklUIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcXG4rXFx0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXFxuK1xcdFxcdCAgICAgZXhwZWN0ZWRfbWRjcik7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXG4rXFx0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFxcdTAwMjZpbml0KTtcXG4rXFx0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcXG4rXFx0YWFyY2g2NF92Y3B1X3NldHVwKHZjcHUsIFxcdTAwMjZpbml0KTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSA9PSBwbWNyX24sXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KVxcXCIsXFxuK1xcdFxcdCAgICBwbWNyX24sIEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSk7XFxuK1xcbitcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rfVxcbitcXG4gLypcXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgYW5kIGF0dGVtcHQgdG8gc2V0IHRoZSBQTUNSX0VMMC5OIGZvclxcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cXG4gICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuIHtcXG4gXFx0cHJfZGVidWcoXFxcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXFxcblxcXCIsIHBtY3Jfbik7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTtcXG4rXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbkBAIC02MjIsMjIgKzcyMywxNDcgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcXG4gXFx0cmV0dXJuIHN1cHBvcnRlZDtcXG4gfVxcbiBcXG4taW50IG1haW4odm9pZClcXG4rc3RhdGljIHZvaWQgdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4odm9pZClcXG4ge1xcbi1cXHR1NjQgaSwgcG1jcl9uO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdSwgKnN0b3BwZWRfdmNwdTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlKDIpO1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcXHUwMDI2aW5pdCk7XFxuK1xcdGluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFx0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5yX2NvdW50ZXJzKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuIFxcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuLVxcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZyh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0dTY0IGk7XFxuIFxcbi1cXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcXG4tXFx0XFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xcbi1cXHRcXHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFx0XFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbitcXHRcXHRydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcXHUwMDNjIEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcXG4tXFx0XFx0cnVuX2Vycm9yX3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3BtdV9ldmVudF9maWx0ZXIgZmlsdGVyID0geyAubmV2ZW50cyA9IDAgfTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnN0b3BwZWRfdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXG4rXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuK1xcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0hBU19ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcdFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVOWElPLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHN1Y2NlZWRzLiAqL1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0aW5nIGFuIGV2ZW50IGZpbHRlciB3aGVuIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4rXFx0ICogcmVzdWx0cyBpbiBFQlVTWS5cXG4rXFx0ICovXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFxcdTAwMjZmaWx0ZXIpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1ksXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYW4gZXZlbnQgZmlsdGVyIGhhc1xcbitcXHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXFx1MDAyNmZpbHRlcik7XFxuK1xcbitcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4rXFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFxuK1xcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxcbitcXHQgKiByZXN1bHRzIGluIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0dm0gPSB2bV9jcmVhdGUoMik7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFxcdTAwMjZpbml0KTtcXG4rXFx0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcXG4rXFx0cnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFxcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xcbitcXHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFx0dmNwdV9ydW4ocnVubmluZ192Y3B1KTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXG4rXFx0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XFxuK31cXG4rXFxuK2ludCBtYWluKHZvaWQpXFxuK3tcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcXG4rXFxuK1xcdHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKCk7XFxuK1xcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xcbitcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkoKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE0OjQ2LjY2ODM1ODI4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MDQwMTExMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9wbXVfaGFuZGxlX21kY3JcIixcbiAgICBcImt2bV92Y3B1X2xvYWRfcG11XCIsXG4gICAgXCJrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHlcIixcbiAgICBcImt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVyc1wiLFxuICAgIFwia3ZtX3BtdV9wcm9iZV9hcm1wbXVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBBUk02NCBQTVUgZW11bGF0aW9uIGZlYXR1cmUgKEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSkgYW5kIG1vZGlmaWVzIFBNVSBldmVudCBjcmVhdGlvbiwgbG9hZGluZywgYW5kIHJlbG9hZGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIG1vZGlmaWVzIGNvcmUgS1ZNIFBNVSBlbXVsYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTNhOGM3MDc0YjUwYjE2NWE1NTE5MGZlMjliYWM2MDRmYWYyNmRlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDA2OjE0OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5pbmRleCA2NmU3MTRmMmZjZmE3Zi4uMWQ1OTJlNzBiZGVhM2QgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuQEAgLTc0LDcgKzc0LDggQEAgaXJxY2hpcC5cbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5YSU8gICBQTVV2MyBub3QgcHJvcGVybHkgY29uZmlndXJlZCBvciBpbi1rZXJuZWwgaXJxY2hpcCBub3RcbiBcdCBcdCAgY29uZmlndXJlZCBhcyByZXF1aXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgYXR0cmlidXRlXG4tXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCBvciBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXG4rXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuK1x0XHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZVxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuQEAgLTExNiwxNCArMTE3LDE0IEBAIHVzaW5nIGV2ZW50IDB4MTEgKENQVV9DWUNMRVMpLlxuIFxuIDpSZXR1cm5zOlxuIFxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3Jcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcbisgICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgb3IgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIFx0IC1FRkFVTFQgIEVycm9yIGFjY2Vzc2luZyB0aGUgUE1VIGlkZW50aWZpZXJcbiBcdCAtRU5YSU8gICBQTVUgbm90IGZvdW5kXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOT01FTSAgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuLVx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzXG4gZm9yIHRoZSBwdXJwb3NlIG9mIFBNVSBlbXVsYXRpb24uIFRoZSBQTVUgaWRlbnRpZmllciBjYW4gYmUgcmVhZCBmcm9tIHRoZSBcInR5cGVcIlxuQEAgLTE2NSw2ICsxNjYsMjcgQEAgZXhwbGljaXRseSBzZWxlY3RlZCwgb3IgdGhlIG51bWJlciBvZiBjb3VudGVycyBpcyBvdXQgb2YgcmFuZ2UgZm9yIHRoZVxuIHNlbGVjdGVkIFBNVS4gU2VsZWN0aW5nIGEgbmV3IFBNVSBjYW5jZWxzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGlzXG4gYXR0cmlidXRlLlxuIFxuKzEuNiBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpQYXJhbWV0ZXJzOiBubyBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbiBrdm1fZGV2aWNlX2F0dHIuYWRkclxuK1xuKzpSZXR1cm5zOlxuK1xuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1bixcbitcdFx0ICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQgb3JcbitcdFx0ICBhIGhhcmR3YXJlIFBNVSBoYXMgYWxyZWFkeSBiZWVuIHNwZWNpZmllZFxuK1x0IC1FTlhJTyAgIEF0dGVtcHRlZCB0byBnZXQgYmVmb3JlIHNldHRpbmdcbitcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcbitcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0lmIHNldCwgS1ZNIGVtdWxhdGVzIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLlxuK1xuK1doZW4gdGhpcyBhdHRyaWJ1dGUgaXMgZW5hYmxlZCwgdGhlIHZDUFUgY2FuIHJ1biBvbiBhbnkgcGh5c2ljYWwgQ1BVXG4rdGhhdCBoYXMgYSBQTVUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFRoaXNcbithdHRyaWJ1dGUgaXMgVk0tc2NvcGVkLlxuK1xuIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYmFlMmM0ZjkyZWY1YzAuLjM5OThlNjZjNjU3MTUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0zNjcsNiArMzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXHRcdDEwXG4gXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXHRcdFx0XHQxMVxuK1x0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aCBhbiBleHBsaWNpdGx5IHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgKi9cbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lUXHRcdFx0MTJcbitcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzICovXG4rI2RlZmluZSBLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQxM1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdC8qIFZNLXdpZGUgdkNQVSBmZWF0dXJlIHNldCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuaW5kZXggMTk5NWUxMTk4NjQ4ZTguLmE1YWU2MjgyMDRhMTIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9lcnJhdGFbXSA9IHtcbiBcdHtcbiBcdFx0LmRlc2MgPSBcIkFwcGxlIElNUERFRiBQTVV2MyBUcmFwc1wiLFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X1dPUktBUk9VTkRfUE1VVjNfSU1QREVGX1RSQVBTLFxuLVx0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9MT0NBTF9DUFVfRVJSQVRVTSxcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXG4gXHRcdC5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MyxcbiBcdFx0LmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcyxcbiBcdH0sXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLmE4NjZiZWI4ZDg3M2QzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtNjUxLDYgKzY1MSw3IEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xuK1x0aW50IGxhc3RfY3B1ID0gdmNwdS1cdTAwM2VjcHU7XG4gXHRpbnQgKmxhc3RfcmFuO1xuIFxuIFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuQEAgLTcwMCw2ICs3MDEsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRpZiAoaGFzX3ZoZSgpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbitcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUsIGxhc3RfY3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuIFx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG5AQCAtNzQ5LDcgKzc1MSw2IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xuIFxuIFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XG4tXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2t2bV9hcm1fdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTE2NTIsMjkgKzE2NTMsMjYgQEAgc3RhdGljIGludCBfX2t2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBpbml0LVx1MDAzZWZlYXR1cmVzWzBdO1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbitcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0aWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAga3ZtX3ZjcHVfaW5pdF9jaGFuZ2VkKHZjcHUsIGluaXQpKVxuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Yml0bWFwX2NvcHkoa3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcywgXHUwMDI2ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7XG4gXG4gXHRyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE5vdyB3ZSBrbm93IHdoYXQgaXQgaXMsIHdlIGNhbiByZXNldCBpdC4gKi9cbiBcdGt2bV9yZXNldF92Y3B1KHZjcHUpO1xuIFxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuIFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBWQ1BVX0lOSVRJQUxJWkVEKTtcbi1cdHJldCA9IDA7XG4tb3V0X3VubG9jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTY5MCw2ICsxNjg4LDggQEAgc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4rXHRndWFyZChtdXRleCkoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4gXHRpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKVxuIFx0XHRyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5pbmRleCA5ODMwNWJiZmMwOTVhYi4uZmY1ZDVmNjZhOWMwOWYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5AQCAtNyw5ICs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiArMTcsMTMgQEBcbiBcbiAjZGVmaW5lIFBFUkZfQVRUUl9DRkcxX0NPVU5URVJfNjRCSVRcdEJJVCgwKVxuIFxuKyNkZWZpbmUgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0tcdChNRENSX0VMMl9IUE1OIHwgTURDUl9FTDJfSFBNRCB8IFxcXG4rXHRcdFx0XHRcdCBNRENSX0VMMl9ITFApXG4rXG4rLypcbisgKiBhcm1fcG11cyBpcyBhcHBlbmQtb25seS4ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkgZmVlZHMgcGVyc2lzdGVudFxuKyAqIFZNIHN0YXRlLCBzbyBhIHRydWUgcmVzdWx0IG11c3QgcmVtYWluIHZhbGlkIGFmdGVyIHRoZSBjaGVjay5cbisgKi9cbiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKGFybV9wbXVzX2xvY2spO1xuIFxuQEAgLTI2LDcgKzMzLDYgQEAgc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XG4gXG4gYm9vbCBrdm1fc3VwcG9ydHNfZ3Vlc3RfcG11djModm9pZClcbiB7XG4tXHRndWFyZChtdXRleCkoXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2YXJtX3BtdXMpO1xuIH1cbiBcbkBAIC04MCw2ICs4NiwxMSBAQCB1NjQga3ZtX3BtdV9ldnR5cGVyX21hc2soc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIG1hc2s7XG4gfVxuIFxuK3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICoga3ZtX3BtY19pc182NGJpdCAtIGRldGVybWluZSBpZiBjb3VudGVyIGlzIDY0Yml0XG4gICogQHBtYzogY291bnRlciBjb250ZXh0XG5AQCAtMzE3LDE3ICszMjgsMjIgQEAgdTY0IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dTY0IHZhbCA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCBrdm1fdmNwdV9yZWFkX3BtY3IodmNwdSkpO1xuK1x0dTY0IG4gPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycztcbiBcbi1cdGlmICh2YWwgPT0gMClcbitcdGlmIChuID09IDApXG4gXHRcdHJldHVybiBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBHRU5NQVNLKHZhbCAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuK1x0XHRyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiB7XG4tXHRpZiAoIXBtYy1cdTAwM2VwZXJmX2V2ZW50KSB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbitcbitcdGlmICghcG1jLVx1MDAzZXBlcmZfZXZlbnQgfHxcbitcdCAgICAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSxcbitcdFx0XHQgICAgICAgXHUwMDI2dG9fYXJtX3BtdShwbWMtXHUwMDNlcGVyZl9ldmVudC1cdTAwM2VwbXUpLVx1MDAzZXN1cHBvcnRlZF9jcHVzKSkpIHtcbiBcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChwbWMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtNjA2LDYgKzYyMiwyMSBAQCB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIFx0fVxuIH1cbiBcbit2b2lkIGt2bV9wbXVfaGFuZGxlX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKVxuK3tcbitcdHU2NCBjaGFuZ2VkID0gb2xkIF4gdmFsO1xuK1xuK1x0LypcbitcdCAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG9cbitcdCAqIHRoZXNlIGZpZWxkcyByZXF1aXJlIG5ldyBwZXJmIGV2ZW50IGZpbHRlcnMgYW5kIHNhbXBsZSBwZXJpb2RzLlxuK1x0ICovXG4rXHRpZiAoY2hhbmdlZCBcdTAwMjYgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0spXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbXUuZXZlbnRzX25lZWRfcmVjcmVhdGUgPSB0cnVlO1xuK1xuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IChNRENSX0VMMl9IUE1FIHwgTURDUl9FTDJfUE1VX1JFQ1JFQVRFX01BU0spKVxuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG5AQCAtNjQ5LDEwICs2ODAsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbitzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJ3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDE0ICs2OTIsMjcgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG4tLyoqXG4tICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuLSAqL1xuLXN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4re1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbitcbitcdGd1YXJkKHJjdSkoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiBwbXU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcbiBcdGludCBldmVudHNlbDtcbkBAIC03MDQsNyArNzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0ICogRG9uJ3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJ3JlIHJ1bm5pbmcgb24gaGFyZHdhcmUgdGhhdCByZXF1aXJlc1xuIFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxuIFx0ICovXG4tXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KHZjcHUtXHUwMDNla3ZtLCBldmVudHNlbCk7XG4rXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KGFybV9wbXUsIGV2ZW50c2VsKTtcbiBcdGlmIChldmVudHNlbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc0OSw2ICs3OTEsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0cG1jLVx1MDAzZXBlcmZfZXZlbnQgPSBldmVudDtcbiB9XG4gXG4rLyoqXG4rICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuKyAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuKyAqL1xuK3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbitcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuK1xuK1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0ZG8ge1xuK1x0XHRcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpKTtcbitcbitcdFx0XHRpZiAoIWFybV9wbXUpIHtcbitcdFx0XHRcdHByX3dhcm5fb25jZShcImt2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXG5cIik7XG4rXHRcdFx0XHRhZGRfdGFpbnQoVEFJTlRfQ1BVX09VVF9PRl9TUEVDLCBMT0NLREVQX1NUSUxMX09LKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXG4rXHRcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xuK1x0XHR9IHdoaWxlICghY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNzg5LDQzICs4NTcsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGVudHJ5LVx1MDAzZWFybV9wbXUgPSBwbXU7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcbi17XG4tXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuLVx0aW50IGNwdTtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZhcm1fcG11c19sb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuLVx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbi1cdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4tXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4tXHQgKlxuLVx0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4tXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbi1cdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4tXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuLVx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4tXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4tXHQgKlxuLVx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4tXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4tXHQgKiBjYXJyaWVkIGhlcmUuXG4tXHQgKi9cbi1cdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbi1cdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbi1cbi1cdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuLVx0XHRcdHJldHVybiBwbXU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gTlVMTDtcbitcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4gfVxuIFxuIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpXG5AQCAtODcwLDYgKzkwMiwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0dTY0IHZhbCwgbWFzayA9IDA7XG4gXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xuIFxuK1x0LypcbitcdCAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSdzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXG4rXHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxuK1x0ICovXG4rXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoIXBtY2VpZDEpIHtcbiBcdFx0dmFsID0gY29tcHV0ZV9wbWNlaWQwKGNwdV9wbXUpO1xuIFx0XHRiYXNlID0gMDtcbkBAIC04OTcsOSArOTM2LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHRyZXR1cm4gdmFsIFx1MDAyNiBtYXNrO1xuIH1cbiBcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxuK3tcbitcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fCB2Y3B1LVx1MDAzZWNwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbit9XG4rXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnBtdTtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4rXHRpbnQgaTtcbitcbitcdGlmIChwbXUtXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1ZNX0FSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcbitcdFx0XHRrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTtcbitcbitcdFx0cG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlID0gZmFsc2U7XG4rXHR9XG4gXG4gXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1PVlNTRVRfRUwwLCBcdTAwMjY9LCBtYXNrKTtcbiBcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTUlOVEVOU0VUX0VMMSwgXHUwMDI2PSwgbWFzayk7XG5AQCAtMTAwOCw2ICsxMDY1LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFxuK1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdC8qXG4gXHQgKiBQTVV2MyByZXF1aXJlcyB0aGF0IGFsbCBldmVudCBjb3VudGVycyBhcmUgY2FwYWJsZSBvZiBjb3VudGluZyBhbnlcbiBcdCAqIGV2ZW50LCB0aG91Z2ggdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9mIG5vbi1QTVV2MyBoYXJkd2FyZS5cbkBAIC0xMDIyLDMwICsxMDgyLDEyIEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIGJpdG1hcF93ZWlnaHQoYXJtX3BtdS1cdTAwM2VjbnRyX21hc2ssIEFSTVY4X1BNVV9NQVhfR0VORVJBTF9DT1VOVEVSUyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yKVxuLXtcbi1cdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG5yO1xuLVxuLVx0LyogUmVzZXQgTURDUl9FTDIuSFBNTiBiZWhpbmQgdGhlIHZjcHVzJyBiYWNrLi4uICovXG4tXHRpZiAodGVzdF9iaXQoS1ZNX0FSTV9WQ1BVX0hBU19FTDIsIGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMpKSB7XG4tXHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdFx0dW5zaWduZWQgbG9uZyBpO1xuLVxuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbi1cdFx0XHR1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xuLVx0XHRcdHZhbCBcdTAwMjY9IH5NRENSX0VMMl9IUE1OO1xuLVx0XHRcdHZhbCB8PSBGSUVMRF9QUkVQKE1EQ1JfRUwyX0hQTU4sIGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XG4tXHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0a3ZtLVx1MDAzZWFyY2guYXJtX3BtdSA9IGFybV9wbXU7XG4tXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSk7XG4rXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEwNjIsNyArMTEwNCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiAgKi9cbiBpbnQga3ZtX2FybV9zZXRfZGVmYXVsdF9wbXUoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoKTtcbitcdC8qXG4rXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuK1x0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbitcdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4rXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4rXHQgKlxuK1x0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4rXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbitcdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4rXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuK1x0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4rXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4rXHQgKlxuK1x0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4rXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseSwgb3IgcmVxdWVzdCBmaXhlZC1jb3VudGVycy1vbmx5XG4rXHQgKiBlbXVsYXRpb24uIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZyBjYXJyaWVkIGhlcmUuXG4rXHQgKi9cbitcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XG4gXG4gXHRpZiAoIWFybV9wbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuQEAgLTEwNzksMTcgKzExMzgsMTkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbiBcdGludCByZXQgPSAtRU5YSU87XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiBcdFx0YXJtX3BtdSA9IGVudHJ5LVx1MDAzZWFybV9wbXU7XG4gXHRcdGlmIChhcm1fcG11LVx1MDAzZXBtdS50eXBlID09IHBtdV9pZCkge1xuIFx0XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHxcbitcdFx0XHQgICAga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkgfHxcbiBcdFx0XHQgICAgKGt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLmFybV9wbXUgIT0gYXJtX3BtdSkpIHtcbiBcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHRcdFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XG4gXHRcdFx0Y3B1bWFza19jb3B5KGt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcbiBcdFx0XHRyZXQgPSAwO1xuQEAgLTEwOTcsMjEgKzExNTgsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcbitcdCAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4rXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSAwO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXG4rXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5hcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChuIFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcbitcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTE3NSw3ICsxMjU0LDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdFx0ICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkpXG4rXHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyKSB7XG5AQCAtMTIyMCw2ICsxMjk5LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcbiBcdH1cbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuK1x0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xuIFx0fVxuQEAgLTEyNDYsNiArMTMyNyw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdGlycSA9IHZjcHUtXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcbiBcdFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xuIFx0fVxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4rXHRcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xMjU5LDYgKzEzNDMsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuIFx0XHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuaW5kZXggYjk2M2ZkOTc1YWFjYWYuLjZiZmIyMWYwMDQ0NDI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuQEAgLTE5MCw3ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xuLVx0Ym9vbCBsb2FkZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmc7XG4rXHRib29sIGxvYWRlZCA9IGZhbHNlO1xuIFx0dTMyIHBzdGF0ZTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGVfbG9jayk7XG5AQCAtMTk4LDEwICsxOTksMTYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2Y3B1LVx1MDAzZWFyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHByZWVtcHRfZGlzYWJsZSgpO1xuLVx0bG9hZGVkID0gKHZjcHUtXHUwMDNlY3B1ICE9IC0xKTtcbi1cdGlmIChsb2FkZWQpXG4rXHRndWFyZChwcmVlbXB0KSgpO1xuK1xuK1x0cnVubmluZyA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4rXHRpZiAocnVubmluZykge1xuK1x0XHRpZiAoS1ZNX0JVR19PTihydW5uaW5nICE9IHZjcHUsIHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdGxvYWRlZCA9IHRydWU7XG4gXHRcdGt2bV9hcmNoX3ZjcHVfcHV0KHZjcHUpO1xuK1x0fVxuIFxuIFx0aWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkge1xuIFx0XHRpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSlcbkBAIC0yNjksNyArMjc2LDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAobG9hZGVkKVxuIFx0XHRrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbi1cdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuIFxuIHUzMiBrdm1fZ2V0X3BhX2JpdHMoc3RydWN0IGt2bSAqa3ZtKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5pbmRleCA1ZDVjNTc5ZDQ1NzkwMi4uOWU5MDVkOWJlOWY2N2UgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5AQCAtMzAyMCwxNyArMzAyMCwyMiBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXG4tXHQvKlxuLVx0ICogUmVxdWVzdCBhIHJlbG9hZCBvZiB0aGUgUE1VIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBjb3VudGVyc1xuLVx0ICogYWZmZWN0ZWQgYnkgSFBNRS5cbi1cdCAqL1xuLVx0aWYgKChvbGQgXiB2YWwpIFx1MDAyNiBNRENSX0VMMl9IUE1FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rXHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IHNldF9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsXG4rXHRcdCAgICB1NjQgdmFsKVxuK3tcbitcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4rXG4rXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4rXHRrdm1fcG11X2hhbmRsZV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgYm9vbCBhY2Nlc3NfcmFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ICAgICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG5AQCAtMzE3Nyw4ICszMTgyLDEzIEBAIHN0YXRpYyBpbnQgc2V0X2ltcF9pZF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLFxuIFxuIHN0YXRpYyB1NjQgcmVzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG4ge1xuLVx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4rXHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcpO1xuK1x0dTY0IHZhbCA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzO1xuK1xuK1x0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwpO1xuK1x0a3ZtX3BtdV9oYW5kbGVfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XG4rXG4rXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiAvKlxuQEAgLTM3NDEsNyArMzc1MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcbiBcdEVMMl9SRUdfRklMVEVSRUQoU0NUTFIyX0VMMiwgYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCAwLFxuIFx0XHRcdCBzY3RscjJfZWwyX3Zpc2liaWxpdHkpLFxuIFx0RUwyX1JFR19WTkNSKEhDUl9FTDIsIHJlc2V0X2hjciwgMCksXG4tXHRFTDJfUkVHKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCksXG4rXHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcbitcdFx0XHQgICAgTlVMTCwgc2V0X21kY3IsIGVsMl92aXNpYmlsaXR5KSxcbiBcdEVMMl9SRUcoQ1BUUl9FTDIsIGFjY2Vzc19ydywgcmVzZXRfdmFsLCBDUFRSX05WSEVfRUwyX1JFUzEpLFxuIFx0RUwyX1JFR19WTkNSKEhTVFJfRUwyLCByZXNldF92YWwsIDApLFxuIFx0RUwyX1JFR19WTkNSX0ZJTFQoSEZHUlRSX0VMMiwgZmd0X3Zpc2liaWxpdHkpLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuaW5kZXggYjVlNTk0MjIwNGZjNjkuLjBjMzFiNzJlMzQzNWE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbkBAIC0zMiw2ICszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHtcbiBcdHN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107XG4gXHRpbnQgaXJxX251bTtcbiBcdGJvb2wgY3JlYXRlZDtcbitcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTYsOCArNTcsMTAgQEAgYm9vbCBrdm1fcG11X3Nob3VsZF9ub3RpZnlfdXNlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuK3ZvaWQga3ZtX3BtdV9oYW5kbGVfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXG4gXHRcdFx0XHQgICAgdTY0IHNlbGVjdF9pZHgpO1xuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpO1xuIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuQEAgLTEzMyw2ICsxMzYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBkYXRhLCB1NjQgc2VsZWN0X2lkeCkge31cbiBzdGF0aWMgaW5saW5lIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTYzLDYgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV91cGRhdGVfdmNwdV9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYWQuLjM5YTFhMWU0MTJlNjZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiArNDM3LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuaW5kZXggZGRmODFmMjQ5NTZiYTAuLjFjNjMzMzQzZDU3NjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmhcbkBAIC0xNDIsMzIgKzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZClcbiBcdHJldHVybiBmaWVsZCAvIGZpZWxkX211bHRpcGxpZXIoZmllbGQpO1xuIH1cbiAjZGVmaW5lIGZpZWxkX21heChmaWVsZClcdCgodHlwZW9mKGZpZWxkKSlmaWVsZF9tYXNrKGZpZWxkKSlcbi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4rI2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXHUwMDI2XHUwMDI2ICh2IFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVx0XFxcbiBcdFx0X19maWVsZF9vdmVyZmxvdygpO1x0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIHRvKCh2IFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XHRcXFxuIH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsXHRcXFxuLVx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX3JlcGxhY2VfYml0cyh0eXBlIG9sZCxcdFx0XFxcbitcdFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRyZXR1cm4gKG9sZCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuK1x0cmV0dXJuIChvbGQgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXHRcdFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsXHRcdFxcXG4gXHRcdFx0XHRcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVx0XHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0KnAgPSAoKnAgXHUwMDI2IH50byhmaWVsZCkpIHwgdHlwZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbitcdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRyZXR1cm4gKGZyb20odikgXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcdFx0XFxcbiB9XG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcbi1fX19fTUFLRV9PUCh1OCx1OCwsKVxuKyNkZWZpbmUgX19NQUtFX09QKHNpemUpXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuK1x0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4rXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsdSMjc2l6ZSwsKVxuK19fX19NQUtFX09QKHU4LHU4LHU4LCwpXG4gX19NQUtFX09QKDE2KVxuIF9fTUFLRV9PUCgzMilcbiBfX01BS0VfT1AoNjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbmluZGV4IDIyMjIzMzk1OTY5ZTBmLi5iNWY4Y2U4ZDM0NTFmMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbkBAIC0yNSw2ICsyNSwxNCBAQFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0J3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBUk1WOF9QTVVfQ1lDTEVfSURYXHRcdDMxXG4gXG4rI2lmbmRlZiBNRENSX0VMMl9IUE1OXG4rI2RlZmluZSBNRENSX0VMMl9IUE1OXHRcdFx0R0VOTUFTS19VTEwoNCwgMClcbisjZW5kaWZcbitcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcbisjZGVmaW5lIE1EQ1JfRUwyX0hQTUVcdFx0XHRCSVRfVUxMKDcpXG4rI2VuZGlmXG4rXG4gc3RydWN0IHZwbXVfdm0ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtNDAzLDEyICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4gXHR1OCBwbXV2ZXIsIGVjO1xuLVx0dTY0IGRmcjAsIGlycSA9IDIzO1xuLVx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcbi1cdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuLVx0XHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxuLVx0XHQuYWRkciA9ICh1NjQpXHUwMDI2aXJxLFxuLVx0fTtcbitcdHU2NCBkZnIwO1xuIFxuIFx0LyogVGhlIHRlc3QgY3JlYXRlcyB0aGUgdnBtdV92bSBtdWx0aXBsZSB0aW1lcy4gRW5zdXJlIGEgY2xlYW4gc3RhdGUgKi9cbiBcdG1lbXNldChcdTAwMjZ2cG11X3ZtLCAwLCBzaXplb2YodnBtdV92bSkpO1xuQEAgLTQzNCw4ICs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIFx0VEVTVF9BU1NFUlQocG11dmVyICE9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QX0RFRiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBtdXZlciBcdTAwM2U9IElEX0FBNjRERlIwX0VMMV9QTVVWZXJfSU1QLFxuIFx0XHQgICAgXCJVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1wiLCBwbXV2ZXIpO1xuLVxuLVx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmlycV9hdHRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpXG5AQCAtNDYxLDE1ICs0NjIsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxuK3tcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbiBcbi1cdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuLVx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbi1cbiBcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XG4gXG4gXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbkBAIC00ODEsNiArNDg0LDI2IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2xcbiBcdFx0XHQgICAgbnJfY291bnRlcnMsIHByZXYpO1xuIFx0ZWxzZVxuIFx0XHRURVNUX0FTU0VSVCghcmV0LCBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4rXHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbitcdFx0XHRcdFx0XHQgYm9vbCBleHBlY3RfZmFpbClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4rXG4rXHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbitcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXG4rXHRzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTtcbiBcbiBcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiB9XG5AQCAtNDg5LDE1ICs1MTIsMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbixcbiAgKiBhbmQgcnVuIHRoZSB0ZXN0LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHVcXG5cIiwgcG1jcl9uKTtcbitcdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXG5cIiwgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG5AQCAtNTMxLDE0ICs1NTQsMTQgQEAgc3RhdGljIHN0cnVjdCBwbXJlZ19zZXRzIHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gPSB7XG4gICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mXG4gICogdGhlIFBNVSByZWdpc3RlciBzZXRzIGluIEB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdIGNvcnJlY3RseS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbitzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0dTY0IHNldF9yZWdfaWQsIGNscl9yZWdfaWQsIHJlZ192YWw7XG4gXHR1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7XG4gXG4tXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XG4rXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XG4gXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuIFxuIFx0dmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7XG5AQCAtNTgzLDE2ICs2MDYsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnVuX21kY3JfZWwyX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcbitcdHU2NCBpcnEgPSAyMztcbitcbitcdHByX2RlYnVnKFwiTURDUl9FTDIgdGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXG5cIixcbitcdFx0IHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdGlmICghdm1fc3VwcG9ydHNfZWwyKHZwbXVfdm0udm0pKSB7XG4rXHRcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdGV4cGVjdGVkX21kY3IgPSB1NjRfcmVwbGFjZV9iaXRzKG1kY3IsIEZJRUxEX01BWChNRENSX0VMMl9IUE1OKSxcbitcdFx0XHRcdFx0IE1EQ1JfRUwyX0hQTU4pO1xuK1x0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXG4rXHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuK1x0XHQgICAgXCJNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNTiB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpIHtcbitcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0XHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdFx0ICAgIFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4rXHR9XG4rXG4rXHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuK1x0XHQgICAgXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19TRVRfTlJfQ09VTlRFUlMgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCIsXG4rXHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcbitcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdCAgICBcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0lOSVQgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCIsXG4rXHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcbitcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcbitcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxuK1x0XHQgICAgIGV4cGVjdGVkX21kY3IpO1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbitcdFx0ICAgIFwiTURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCIsXG4rXHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcbitcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2cG11X3ZtLnZtLCBcdTAwMjZpbml0KTtcbitcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuK1x0YWFyY2g2NF92Y3B1X3NldHVwKHZjcHUsIFx1MDAyNmluaXQpO1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdFRFU1RfQVNTRVJUKEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSA9PSBwbWNyX24sXG4rXHRcdCAgICBcIk1EQ1JfRUwyLkhQTU4gaXMgbm90IHJlc2V0IGFmdGVyIElOSVQgKGV4cGVjdGVkICVsdSwgZ290ICVsdSlcIixcbitcdFx0ICAgIHBtY3JfbiwgRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpKTtcbitcbitcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK31cbitcbiAvKlxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIGFuZCBhdHRlbXB0IHRvIHNldCB0aGUgUE1DUl9FTDAuTiBmb3JcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cbiAgKiBUaGUgYXR0ZW1wdCBzaG91bGQgZmFpbCBhcyBAcG1jcl9uIGlzIHRvbyBiaWcgdG8gc2V0IGZvciB0aGUgdkNQVS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiB7XG4gXHRwcl9kZWJ1ZyhcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXG5cIiwgcG1jcl9uKTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIHRydWUpO1xuK1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XG4gXHRkZXN0cm95X3ZwbXVfdm0oKTtcbiB9XG4gXG5AQCAtNjIyLDIyICs3MjMsMTQ3IEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbi1pbnQgbWFpbih2b2lkKVxuK3N0YXRpYyB2b2lkIHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKHZvaWQpXG4ge1xuLVx0dTY0IGksIHBtY3JfbjtcbitcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1LCAqc3RvcHBlZF92Y3B1O1xuK1x0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcbitcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCByZXQ7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZSgyKTtcbitcdHZtX2lvY3RsKHZtLCBLVk1fQVJNX1BSRUZFUlJFRF9UQVJHRVQsIFx1MDAyNmluaXQpO1xuK1x0aW5pdC5mZWF0dXJlc1swXSB8PSBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7XG4rXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbitcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbitcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4rXHR2Y3B1X3J1bihydW5uaW5nX3ZjcHUpO1xuK1xuK1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsXG4rXHRcdFx0XHQgICAgIFx1MDAyNm5yX2NvdW50ZXJzKTtcbitcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4rXHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rXG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rfVxuIFxuLVx0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuLVx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuK3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbit7XG4rXHR1NjQgaTtcbiBcbi1cdHBtY3JfbiA9IGdldF9wbWNyX25fbGltaXQoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBwbWNyX247IGkrKykge1xuLVx0XHRydW5fYWNjZXNzX3Rlc3QoaSk7XG4tXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpKTtcbitcdFx0cnVuX2FjY2Vzc190ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuK1x0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rXHRcdHJ1bl9tZGNyX2VsMl92YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcdTAwM2MgQVJNVjhfUE1VX01BWF9DT1VOVEVSUzsgaSsrKVxuLVx0XHRydW5fZXJyb3JfdGVzdChpKTtcbitcdFx0cnVuX2Vycm9yX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdGludCByZXQ7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4rXHRcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcbitcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSBzdWNjZWVkcy4gKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgc2V0LiAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0LypcbitcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuK1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcbitcdC8qXG4rXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXG4rXHQgKiBhbHJlYWR5IGJlZW4gc2V0IHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGRlc3Ryb3lfdnBtdV92bSgpO1xuK1xuK1x0LypcbitcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGEgVkNQVSBoYXMgYWxyZWFkeSBydW5cbitcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4rXHQgKi9cbitcdHZtID0gdm1fY3JlYXRlKDIpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbitcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdHZjcHVfcnVuKHJ1bm5pbmdfdmNwdSk7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcbitcdHRlc3RfY29uZmlnKDAsIHRydWUpO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdFRFU1RfUkVRVUlSRShrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjMpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbitcbitcdHRlc3Rfc2V0X25yX2NvdW50ZXJzX2FmdGVyX3ZjcHVfcnVuKCk7XG4rXHR0ZXN0X2NvbmZpZyhnZXRfcG1jcl9uX2xpbWl0KCksIGZhbHNlKTtcbitcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTQ6NDYuNjY4Mzk1Mjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzOTM0MTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQVJNNjQgUE1VIEVtdWxhdGlvbiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggcmV2aWV3aW5nIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmluZyBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0d2Vha3MgdGhlIEtWTSBBUk02NCBQTVUgZW11bGF0aW9uLiBJIHNlZSBpdCBpbnRyb2R1Y2VzIGEgbmV3IGF0dHJpYnV0ZSwgYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAsIGFuZCBhbHRlcnMgaG93IFBNVSBldmVudHMgYXJlIHJlY3JlYXRlZCBhbmQgdGhlIG92ZXJhbGwgUE1VIGxvYWRpbmcvcmVsb2FkaW5nIHByb2Nlc3MuXG5cbkxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZpbGVzIOKAkyBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AsIGBhcmNoL2FybTY0L2t2bS9hcm0uY2AsIGBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jYCwgYW5kIGBhcmNoL2FybTY0L2t2bS9yZXNldC5jYCDigJMgdGhpcyBpcyB1bmRvdWJ0ZWRseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIEtWTSBvbiBBUk02NC4gQW5kLCBpbXBvcnRhbnRseSwgc2luY2UgdGhpcyBpcyBLVk0sIHRoaXMgY2FuIGRlZmluaXRlbHkgYmUgYWNjZXNzZWQgYW5kIGluZmx1ZW5jZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMuIEknbSB0aGlua2luZyBhYm91dCBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgY2FsbHMgd2l0aCB0aGUgbmV3IGF0dHJpYnV0ZSBgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZYCwgYW5kIGFsc28gYEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTYCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGFyY2gvYXJtNjQva3ZtL2AsIHNvIGBDT05GSUdfS1ZNYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuIEl0J3MgYWxzbyBBUk02NC1zcGVjaWZpYywgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhbiBBUk02NCBzeXN0ZW0uXG5cblRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0J3MgbGlzdCB0aGVzZSBvdXQ6IGBrdm1fcG11X2hhbmRsZV9tZGNyYCwgYGt2bV92Y3B1X2xvYWRfcG11YCwgYGt2bV92Y3B1X3JlbG9hZF9wbXVgLCBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YCwgYGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVyc2AsIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAsIGBrdm1fYXJtX3BtdV92M19nZXRfYXR0cmAsIGBrdm1fYXJtX3BtdV92M19oYXNfYXR0cmAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50YCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXVgLCBhbmQgYGt2bV9wbXVfcHJvYmVfYXJtcG11YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgZnVuY3Rpb25zIHdoaWNoIGFyZSBoYW5kbGluZyB0aGUgY29yZSBjaGFuZ2VzLlxuXG5GaW5hbGx5LCBJJ2xsIGRvIGEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGBhcmNoL2FybTY0L2t2bS9gIGRpcmVjdG9yeSB0byBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNjYW5uaW5nIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCBzaG93cyBgQ09ORklHX0tWTWAgaXMgaW5kZWVkIHRoZSBtYWluIHJlcXVpcmVtZW50LiBJIHN1c3BlY3QgYENPTkZJR19IV19QRVJGX0VWRU5UU2AgbWlnaHQgYWxzbyBiZSBuZWVkZWQsIHNpbmNlIFBNVSBlbXVsYXRpb24gb2Z0ZW4gcmVsaWVzIG9uIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW5mcmFzdHJ1Y3R1cmUuIExldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBgYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTQ6NTUuODA3NzQwNTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM3ODQwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSFdfUEVSRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjgtXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6Mjk6a3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUub1xcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTMwLWt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICs9IHBhdXRoLm9cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jPTEyOT1zdGF0aWMgdm9pZCBfX2h5cF92Z2ljX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ1LSAqL1xcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jOjE0NjojaWZkZWYgQ09ORklHX0hXX1BFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQ3LXN0YXRpYyBib29sIF9fcG11X3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE0OjU1LjkyODEyNzcwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzE3NzQxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipLVk0gUE1VIEVtdWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBwbXUtZW11bC5vYCBuZWNlc3NpdGF0ZXMgYENPTkZJR19IV19QRVJGX0VWRU5UU2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEhXX1BFUkZfRVZFTlRTYCwgYnV0IGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBpbmRlZWQgc3VmZmljaWVudC4gWWVzLCBgS1ZNYCBhbmQgYEhXX1BFUkZfRVZFTlRTYCBhcmUgYm90aCBuZWNlc3NhcnkuXG5cbk5vdywgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiBjYWxscyB0aGlzIGludHJvZHVjZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHJldmlldzogYGt2bV9wbXVfaGFuZGxlX21kY3JgLCBga3ZtX3ZjcHVfbG9hZF9wbXVgLCBga3ZtX3ZjcHVfcmVsb2FkX3BtdWAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11YCwgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAsIGFuZCBga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzYC5cblxuRmluYWxseSwgdG8gZ2V0IGEgdHJ1bHkgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgY2hlY2sgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgIGRpcmVjdGx5IHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgYW5kIGFsc28gdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTczMCwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTowMC45NTk5MDUzNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzgxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGt2bV9wbXVfaGFuZGxlX21kY3J8XnZvaWQga3ZtX3ZjcHVfbG9hZF9wbXV8XnN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz01OTU9dm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNjI0LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6NjI1OnZvaWQga3ZtX3BtdV9oYW5kbGVfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy02MjYte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz04OTg9dTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtOTM4LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6OTM5OnZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy05NDAte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMTMzPXN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExNjMtXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMTY0OnN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTExNjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTowMS4wNjM2OTM5ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM1MTU4OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgS1ZNIFBNVSBFbXVsYXRpb24gb24gQVJNNjQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gS1ZNJ3MgUE1VIGVtdWxhdGlvbiBmb3IgQVJNNjQsIHdoaWNoIG1lYW5zIGl0J3MgZGVmaW5pdGVseSB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzOiBga3ZtX3BtdV9oYW5kbGVfbWRjcmAsIGBrdm1fdmNwdV9sb2FkX3BtdWAsIGBrdm1fdmNwdV9yZWxvYWRfcG11YCwgYGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXVgLCBga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5YCwgYGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVyc2AsIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAsIGFuZCBga3ZtX3BtdV9wcm9iZV9hcm1wbXVgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB0aGF0IG5lZWQgdGhvcm91Z2ggdGVzdGluZy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiByaWdodCBmb3IgdGhpcy4gSSBuZWVkIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgLiBKdXN0IHF1aWNrbHksIGxldCBtZSBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzLiBZZXAsIGBDT05GSUdfSFdfUEVSRl9FVkVOVFNgIGFuZCBgQ09ORklHX0tWTWAgYXJlIHRoZSByaWdodCBvbmVzLlxuXG5BbmQgbm93IEkgd2lsbCBxdWlja2x5IGNoZWNrIGBrdm1fYXJtX3BtdV92M19zZXRfYXR0cmAgYW5kIGBrdm1fYXJtX3BtdV92M19nZXRfYXR0cmAgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc2OSwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTowNi41OTg4NTg4MTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2NjUwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJ8XmludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9MTE4MD1zdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMTk2LVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTE5NzppbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTE5OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTEzMTAtXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMzExOmludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMzEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTU6MDcuMTc1NTQ4OTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYwNTQ5NTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQVJNNjQgUE1VIEVtdWxhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNhcGFiaWxpdHkgZm9yIHRoZSBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbjogYEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIGV4aXN0aW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiBhbmQgS1ZNJ3MgY29yZSBQTVUgZW11bGF0aW9uIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gYWZmZWN0IHRoZSBga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHJgLCBga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHJgLCBhbmQgYGt2bV9hcm1fcG11X3YzX2hhc19hdHRyYCBmdW5jdGlvbnMsIHdoaWNoIGlzIHdoZXJlIHRoZSBuZXcgZmxhZyBpcyBiZWluZyBpbnRlZ3JhdGVkLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyBhZmZlY3RlZCBieSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlOiBga3ZtX3BtdV9oYW5kbGVfbWRjcmAsIGBrdm1fdmNwdV9sb2FkX3BtdWAsIGBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11YCwgYGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seWAsIGBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNgLCBhbmQgYGt2bV9wbXVfcHJvYmVfYXJtcG11YC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgY2FyZWZ1bGx5OyB0aGUgUE1VIGV2ZW50IGNyZWF0aW9uLCBsb2FkaW5nLCBhbmQgcmVsb2FkaW5nIGFyZSBrZXkgcG9pbnRzIGhlcmUgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoZXNlIHByb2JhYmx5IG5lZWQgc29tZSBleHRyYSBzY3J1dGlueSwgYXMgdGhleSBhcmUgbGlrZWx5IHRvIGludGVyYWN0IHdpdGggdGhlIG5ldyBjYXBhYmlsaXR5LlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgZmVhdHVyZSByZWxhdGVkIHRvIFBNVSBlbXVsYXRpb24sIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLiBUaGF0IG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgdGhlIHVzZXItdmlzaWJsZSBiZWhhdmlvciBhbmQgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgd2l0aCB0aGF0IGluIG1pbmQuIFRoZSBtZW50aW9uIG9mIGBLVk1gIGFuZCBgSFdfUEVSRl9FVkVOVFNgIGluIHRoZSBjb25maWdzIGlzIGltcG9ydGFudC5cblxuRmluYWxseSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgXCJzZXQtcmVzdWx0c1wiIGFyZSwgdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gd2lsbCBhY3R1YWxseSB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcxMCwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTU6MTUuNzgxMDQ3ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUxMDcwMTYsIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEhXX1BFUkZfRVZFTlRTIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiSFdfUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBIV19QRVJGX0VWRU5UU1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNToxNS45NjYxNzg3OTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMDI2ODUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQVJNNjQgSGFyZHdhcmUgUGVyZm9ybWFuY2UgRXZlbnRzIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYEhXX1BFUkZfRVZFTlRTYC4uLiB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIEFSTTY0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIGhvdyBpdCdzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSBpdCdzIGVpdGhlciBnb2luZyB0byBiZSB0dWNrZWQgYXdheSBpbiBgYXJjaC9hcm02NC9LY29uZmlnYCDigJMgbWFrZXMgdGhlIG1vc3Qgc2Vuc2Ug4oCTIG9yIHBlcmhhcHMgbGlua2VkIGluIGBpbml0L0tjb25maWdgIGlmIGl0J3MgZ290IHNvbWUgYnJvYWRlciBkZXBlbmRlbmN5IG9yIGdsb2JhbCBpbmZsdWVuY2UuIEdvdHRhIHF1aWNrbHkgY2hlY2sgYm90aC4gSXQncyBhYm91dCBrbm93aW5nIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgYW5kIGNvbW1vbiBsb2NhdGlvbnMuIE5vIHBvaW50IGluIHdhc3RpbmcgdGltZSB3aXRoIGEgYmxpbmQgc2VhcmNoIGlmIEkgY2FuIG5hcnJvdyBpdCBkb3duIHdpdGggdGhpcyBiYXNpYyBrbm93bGVkZ2Ugb2YgdGhlIHRyZWUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Njg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE1OjE5LjI5NjQ1MDY5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzOTY4NjYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFdfUEVSRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9MTI1Mz1jb25maWcgQ1BVX1RUQlIwX1BBTlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xMjU5LVxcbmFyY2gvYXJtL0tjb25maWc6MTI2MDpjb25maWcgSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybS9LY29uZmlnLTEyNjEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTE2MDY9Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MDktXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2MTA6Y29uZmlnIEhXX1BFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MjY4MD1jb25maWcgTk9ERVNfU0hJRlRcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTI2ODQtXFxuYXJjaC9taXBzL0tjb25maWc6MjY4NTpjb25maWcgSFdfUEVSRl9FVkVOVFNcXG5hcmNoL21pcHMvS2NvbmZpZy0yNjg2LVxcdGJvb2wgXFxcIkVuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzXFxcIlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTYyNj1jb25maWcgR1VTQV9SQlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTYzNS1cXG5hcmNoL3NoL0tjb25maWc6NjM2OmNvbmZpZyBIV19QRVJGX0VWRU5UU1xcbmFyY2gvc2gvS2NvbmZpZy02MzctXFx0Ym9vbCBcXFwiRW5hYmxlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3IgcGVyZiBldmVudHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE1OjIxLjkzNjE1MDc5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYxMTU5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IEltcGxpY2l0IEZlYXR1cmUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0ICpmZWVscyogbGlrZSBpdCBzaG91bGQgYmUgdGhlcmUsIGJ1dCB0aGUgdG9vbCBpc24ndCBleHBsaWNpdGx5IHNob3dpbmcgaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5LCBsZXQncyBjYWxsIGl0IHRoZSBlbHVzaXZlIFwiaXQsXCIgaXMgYWN0dWFsbHkgaW1wbGljaXRseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHBlcmhhcHMgYXMgYGRlZl9ib29sIHlgLCBhbmQgdGhlIGN1cnJlbnQgc2V0dXAganVzdCBkb2Vzbid0IHN1cmZhY2UgaXQuIFRoZSB0b29sIG1pZ2h0IHNpbXBseSBub3QgYmUgY29uZmlndXJlZCB0byByZWNvZ25pemUgaXQgY29ycmVjdGx5LCBtYXliZSBiZWNhdXNlIGl0J3Mgbm90IGEgc3RhbmRhcmQgcHJvbXB0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5TbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgdGhlIHNwZWNpZmljIGRlZmluaXRpb25zLCBhbmQgdGhlIGxpa2VseSBjYW5kaWRhdGUsIGF0IGxlYXN0IGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgaXMgYFBFUkZfRVZFTlRTYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgUEVSRl9FVkVOVFNgIGlzIHRoZSBrZXkgdG8gdW5sb2NraW5nIG9yIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIEknbSBvYnNlcnZpbmcuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyB0byBjaGVjaywgc28gbGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjcyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDY6MTU6MjUuNTk3MzE1MjA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTg1ODIzNTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFxcXCJQZXJmb3JtYW5jZSBtb25pdG9yaW5nXFxcIlxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjEyOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9SQVBMXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIkludGVsL0FNRCByYXBsIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzozNzpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuaW5pdC9LY29uZmlnPTIxMzg9bWVudSBcXFwiS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcXFwiXFxuaW5pdC9LY29uZmlnLTIxMzktXFxuaW5pdC9LY29uZmlnOjIxNDA6Y29uZmlnIFBFUkZfRVZFTlRTXFxuaW5pdC9LY29uZmlnLTIxNDEtXFx0Ym9vbCBcXFwiS2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA2OjE1OjI4LjE4MzE1MzkzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM5NTUyNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBcInRob3VnaHRzLFwiIHJlZmxlY3RpbmcgbXkgdW5kZXJzdGFuZGluZyBhcyBhbiBleHBlcnQ6XG5cbioqRm9jdXNpbmcgb24gS1ZNIGFuZCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nKipcblxuQWxyaWdodCwgZ2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBjb3JlIHRob3VnaHQgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBsZXQncyBpbW1lZGlhdGVseSBuYXJyb3cgdGhlIHNjb3BlIHRvIHR3byBrZXkgdG9vbHMsIGBLVk1gIGFuZCBgUEVSRl9FVkVOVFNgLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgcGVyZm9ybWFuY2UtcmVsYXRlZCBpbnZlc3RpZ2F0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdXNlIG9mIGBLVk1gIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgaHlwZXJ2aXNvci1iYXNlZCB2aXJ0dWFsaXphdGlvbiBzZXR1cCwgbWVhbmluZyB3ZSdyZSBkaXJlY3RseSBkZWFsaW5nIHdpdGggdmlydHVhbCBtYWNoaW5lcyAoVk1zKSBhbmQgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaG9zdCBoYXJkd2FyZS4gQW5kLCB0aGUgaW5jbHVzaW9uIG9mIGBQRVJGX0VWRU5UU2AgaXMga2V5IGJlY2F1c2UgaXQgbWVhbnMgd2UnbGwgYmUgZGl2aW5nIGRlZXAgaW50byBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycy4gV2UncmUgdGFsa2luZyBkZXRhaWxlZCBtZWFzdXJlbWVudHMgb2YgQ1BVIGN5Y2xlcywgY2FjaGUgbWlzc2VzLCBicmFuY2ggcHJlZGljdGlvbnMsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMg4oCTIHRoZSBuaXR0eS1ncml0dHkgb2Ygd2hhdCdzIGhhcHBlbmluZyAqaW5zaWRlKiB0aG9zZSBWTXMuIFRoaXMgYXBwcm9hY2ggYWxsb3dzIGZvciBkZXRhaWxlZCBhbmQgbnVhbmNlZCBldmFsdWF0aW9uIG9mIHNwZWNpZmljIHBlcmZvcm1hbmNlIGlzc3Vlcy4gSXTigJlzIGFuIGVmZmljaWVudCB3YXkgdG8gY3V0IHRocm91Z2ggdGhlIG5vaXNlIGFuZCBnZXQgcmlnaHQgdG8gdGhlIHNvdXJjZSBvZiBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcy4gVGhpcyBpc24ndCBqdXN0IGEgaGlnaC1sZXZlbCBvdmVydmlldzsgdGhpcyBpcyBhIGRpYWdub3N0aWMgZGVlcCBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA4MiwiT3V0cHV0VG9rZW5zIjoyMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwNjoxNTozMi45MjI3MTE3MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2NTA3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcG11X2hhbmRsZV9tZGNyXCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX3BtdVwiLFxuICAgIFwia3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdVwiLFxuICAgIFwia3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5XCIsXG4gICAgXCJrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnNcIixcbiAgICBcImt2bV9wbXVfcHJvYmVfYXJtcG11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gQVJNNjQgUE1VIGVtdWxhdGlvbiBmZWF0dXJlIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpIGFuZCBtb2RpZmllcyBQTVUgZXZlbnQgY3JlYXRpb24sIGxvYWRpbmcsIGFuZCByZWxvYWRpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBQTVUgZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[1] Phase: Succeeded StartedAt: 2026-07-20 06:15:45 +0000 UTC FinishedAt: 2026-07-20 06:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 06:15:45 +0000 UTC FinishedAt: 2026-07-20 06:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2] Phase: Succeeded StartedAt: 2026-07-20 06:15:45 +0000 UTC FinishedAt: 2026-07-20 08:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 06:15:45 +0000 UTC FinishedAt: 2026-07-20 08:00:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 06:15:45 +0000 UTC FinishedAt: 2026-07-20 06:15:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 06:15:45 +0000 UTC FinishedAt: 2026-07-20 06:15:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow62ps2/series-workflow62ps2-convert-artifact-2260671017/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 06:15:55 +0000 UTC FinishedAt: 2026-07-20 07:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 06:15:55 +0000 UTC FinishedAt: 2026-07-20 07:07:46 +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:*665fa5ba-aa7b-4d7b-bfb3-ea8cfa485c56,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-workflow62ps2/series-workflow62ps2-convert-artifact-2260671017/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": "d67c99c9-a553-4722-b904-80bde92cd9db", "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-workflow62ps2/series-workflow62ps2-build-action-2142601863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 06:15:55 +0000 UTC FinishedAt: 2026-07-20 07:07:36 +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:*665fa5ba-aa7b-4d7b-bfb3-ea8cfa485c56,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-workflow62ps2/series-workflow62ps2-convert-artifact-2260671017/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": "d67c99c9-a553-4722-b904-80bde92cd9db", "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-workflow62ps2/series-workflow62ps2-build-action-2142601863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 07:07:46 +0000 UTC FinishedAt: 2026-07-20 07:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 07:07:46 +0000 UTC FinishedAt: 2026-07-20 07:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 07:07:46 +0000 UTC FinishedAt: 2026-07-20 07:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 07:07:46 +0000 UTC FinishedAt: 2026-07-20 07:07:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow62ps2/series-workflow62ps2-convert-artifact-3562937788/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 07:07:56 +0000 UTC FinishedAt: 2026-07-20 07:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 07:07:56 +0000 UTC FinishedAt: 2026-07-20 07:09:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d67c99c9-a553-4722-b904-80bde92cd9db,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-workflow62ps2/series-workflow62ps2-build-action-2142601863/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-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 07:09:58 +0000 UTC FinishedAt: 2026-07-20 07:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 07:09:58 +0000 UTC FinishedAt: 2026-07-20 07:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 07:09:58 +0000 UTC FinishedAt: 2026-07-20 07:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 07:09:58 +0000 UTC FinishedAt: 2026-07-20 07:57:21 +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:*665fa5ba-aa7b-4d7b-bfb3-ea8cfa485c56,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-workflow62ps2/series-workflow62ps2-convert-artifact-3562937788/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": "518ac61e-082f-4cd9-b9e5-6e9a7a27e24f", "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-workflow62ps2/series-workflow62ps2-build-action-2756831256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 07:09:58 +0000 UTC FinishedAt: 2026-07-20 07:57:11 +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:*665fa5ba-aa7b-4d7b-bfb3-ea8cfa485c56,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-workflow62ps2/series-workflow62ps2-convert-artifact-3562937788/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": "518ac61e-082f-4cd9-b9e5-6e9a7a27e24f", "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-workflow62ps2/series-workflow62ps2-build-action-2756831256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 07:57:21 +0000 UTC FinishedAt: 2026-07-20 07:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 07:57:21 +0000 UTC FinishedAt: 2026-07-20 07:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 07:57:21 +0000 UTC FinishedAt: 2026-07-20 07:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 07:57:21 +0000 UTC FinishedAt: 2026-07-20 07:59:19 +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:*518ac61e-082f-4cd9-b9e5-6e9a7a27e24f,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-workflow62ps2/series-workflow62ps2-build-action-2756831256/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-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 07:59:28 +0000 UTC FinishedAt: 2026-07-20 08:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 07:59:28 +0000 UTC FinishedAt: 2026-07-20 08:00:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"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:*d67c99c9-a553-4722-b904-80bde92cd9db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*518ac61e-082f-4cd9-b9e5-6e9a7a27e24f,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-workflow62ps2/series-workflow62ps2-build-action-2142601863/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-workflow62ps2/series-workflow62ps2-build-action-2756831256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 07:59:28 +0000 UTC FinishedAt: 2026-07-20 07:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 07:59:28 +0000 UTC FinishedAt: 2026-07-20 07:59:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"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-workflow62ps2/series-workflow62ps2-convert-artifact-3433661061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 07:59:28 +0000 UTC FinishedAt: 2026-07-20 07:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 07:59:28 +0000 UTC FinishedAt: 2026-07-20 07:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 07:59:28 +0000 UTC FinishedAt: 2026-07-20 07:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 07:59:38 +0000 UTC FinishedAt: 2026-07-20 08:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow62ps2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_pmu_handle_mdcr","kvm_vcpu_load_pmu","kvm_pmu_create_perf_event_with_pmu","kvm_arm_pmu_v3_set_pmu_fixed_counters_only","kvm_arm_pmu_v3_set_nr_counters","kvm_pmu_probe_armpmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb9360ae6549120975f20887840fb33d47c13898","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","PERF_EVENTS"],"series_id":"1632846b-448e-4fb6-bf91-13fd6ba99eae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 07:59:38 +0000 UTC FinishedAt: 2026-07-20 08:00:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d67c99c9-a553-4722-b904-80bde92cd9db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*518ac61e-082f-4cd9-b9e5-6e9a7a27e24f,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-workflow62ps2/series-workflow62ps2-build-action-2142601863/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-workflow62ps2/series-workflow62ps2-build-action-2756831256/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-workflow62ps2/series-workflow62ps2-convert-artifact-3433661061/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,}