Name: series-workflowqltcn Phase: Succeeded StartedAt: 2026-09-07 21:29:35 +0000 UTC FinishedAt: 2026-09-08 02:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[0] Phase: Succeeded StartedAt: 2026-09-07 21:29:35 +0000 UTC FinishedAt: 2026-09-07 22:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 21:29:35 +0000 UTC FinishedAt: 2026-09-07 22:20:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "aa0e38da-2215-4e11-b6b4-9b43cd93dcba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_nan_set_non_evac_channels", "nl80211_parse_non_evac_channel", "cfg80211_nan_set_non_evac_channels", "ieee80211_set_nan_non_evac_channels", "ieee80211_nan_set_non_evac_channels", "ieee80211_nan_find_evac_chan" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyBhbmQgbWFjODAyMTEvY2ZnODAyMTEgaGFuZGxlcnMgdG8gbWFyayBjZXJ0YWluIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlLlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChpdCBpcyBhIHNldHRlciBjb21tYW5kIHJldHVybmluZyBvbmx5IGFuIGVycm9yIHN0YXR1cyksIHByZWNsdWRpbmcga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy5cbjIuIEFsbCBkeW5hbWljIGFsbG9jYXRpb25zIChzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzLCBubGF0dHIgYXJyYXkpIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChremFsbG9jLCBrY2FsbG9jKSBhbmQgYXV0b21hdGljYWxseSBtYW5hZ2VkIHZpYSBfX2ZyZWUoa2ZyZWUpLlxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cbjQuIE5vIGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE3MTlhMmFhYzFkNzM5MjlkNmJhYTA1N2I4MWE5ZTlkZmU0Y2M3YzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIyOjE4OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCA2NDYxYTdiZDAxNjlkLi41OWQ3NmEwZGFmMmNiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTQyNTYsNiAmIzQzOzQyNTYsMjEgQEAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzIC0gTkFOIG5vbi1ldmFjdWFibGUgY2hhbm5lbHNcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90XG4mIzQzOyAqIGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLlxuJiM0MzsgKlxuJiM0MzsgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLlxuJiM0MzsgKiBAY2hhbmRlZnM6IGFycmF5IG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIEVhY2hcbiYjNDM7ICpcdG11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyB7XG4mIzQzO1x0dTggbl9jaGFubmVscztcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9tYXAgLSBOQU4gcGVlciBzY2hlZHVsZSBtYXBcbiAgKlxuQEAgLTUyMDQsNiAmIzQzOzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7XG4gICpcdHNjaGVkdWxlLCB0aGUgZnVsbCBuZXcgc2NoZWR1bGUgaXMgcHJvdmlkZWQgLSBwYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdFxuICAqXHRzdXBwb3J0ZWQsIGFuZCB0aGUgbmV3IHNjaGVkdWxlIGNvbXBsZXRlbHkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZS5cbiAgKlxuJiM0MzsgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXRcbiYjNDM7ICpcdG11c3Qgbm90IGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLiBUaGUgcHJvdmlkZWQgbGlzdFxuJiM0MzsgKlx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldDsgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmVcbiYjNDM7ICpcdG5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlXG4mIzQzOyAqXHRndWFyYW50ZWVkIGJ5IGNmZzgwMjExIHRvIGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS5cbiYjNDM7ICpcbiAgKiBAc2V0X211bHRpY2FzdF90b191bmljYXN0OiBjb25maWd1cmUgbXVsdGljYXN0IHRvIHVuaWNhc3QgY29udmVyc2lvbiBmb3IgQlNTXG4gICpcbiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpc1xuQEAgLTU1OTAsNiAmIzQzOzU2MTEsOSBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHtcbiBcdGludFx0KCpuYW5fc2V0X3BlZXJfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4mIzQzO1x0aW50XHQoKm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiBcdGludFx0KCpzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgICAgY29uc3QgYm9vbCBlbmFibGVkKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuaW5kZXggN2JiNDYxODA2NWI2Ny4uMzNmZjAxOGMzM2VjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC05MjMsMTIgJiM0Mzs5MjMsMTQgQEAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiB7XG4gICogQGNoYW5uZWxfZW50cnk6IHRoZSBDaGFubmVsIEVudHJ5IGJsb2IgYXMgZGVmaW5lZCBpbiBXaS1GaSBBd2FyZVxuICAqXHQoVE0pIDQuMCBzcGVjaWZpY2F0aW9uIFRhYmxlIDEwMCAoQ2hhbm5lbCBFbnRyeSBmb3JtYXQgZm9yIHRoZSBOQU5cbiAgKlx0QXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuXG4mIzQzOyAqIEBub19ldmFjdWF0ZTogaWYgc2V0LCB0aGlzIGNoYW5uZWwgbXVzdCBub3QgYmUgZXZhY3VhdGVkXG4gICovXG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5fcmVxIGNoYW5yZXE7XG4gXHR1OCBuZWVkZWRfcnhfY2hhaW5zO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjtcbiBcdHU4IGNoYW5uZWxfZW50cnlbNl07XG4mIzQzO1x0Ym9vbCBub19ldmFjdWF0ZTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5pbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuQEAgLTEzODMsNiAmIzQzOzEzODMsMTMgQEBcbiAgKlx0ZnJvbSB0aGUgZGV2aWNlIHRvIHBlcmZvcm0gYW4gYW5ub3VuY2VkIHNjaGVkdWxlIHVwZGF0ZS4gU2VlXG4gICpcdCVOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEIGZvciBtb3JlIGRldGFpbHMuXG4gICpcdElmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS5cbiYjNDM7ICpcdFNldHRpbmcgYSBuZXcgc2NoZWR1bGUgaXMgYWx3YXlzIGFsbG93ZWQgYW5kIGlzIG5ldmVyIHRyZWF0ZWQgYXMgYW5cbiYjNDM7ICpcdGV2YWN1YXRpb24sIGV2ZW4gaWYgaXQgcmVtb3ZlcyBjaGFubmVscyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXJrZWQgYXNcbiYjNDM7ICpcdG5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlXG4mIzQzOyAqXHRub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgc2NoZWR1bGU6XG4mIzQzOyAqXHRjaGFubmVscyB0aGF0IHJlbWFpbiBpbiB0aGUgbmV3IHNjaGVkdWxlIGtlZXAgdGhlaXIgbWFya2luZywgY2hhbm5lbHNcbiYjNDM7ICpcdHRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmVcbiYjNDM7ICpcdGV2YWN1YWJsZSBieSBkZWZhdWx0LlxuICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdFxuICAqXHRhIGRlZmVycmVkIGxvY2FsIE5BTiBzY2hlZHVsZSB1cGRhdGUgKHJlcXVlc3RlZCB3aXRoXG4gICpcdCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGFuZCAlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRClcbkBAIC0xNDI3LDYgJiM0MzsxNDM0LDI4IEBAXG4gICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieVxuICAqXHRpdHMgJU5MODAyMTFfQVRUUl9XREVWIGludGVyZmFjZS5cbiAgKlxuJiM0MzsgKiBATkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUzogU2V0IHRoZSBsaXN0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZVxuJiM0MzsgKlx0Y2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsXG4mIzQzOyAqXHQoJU5MODAyMTFfQ01EX1NUQVJUX05BTiB3YXMgZXhlY3V0ZWQpIGFuZCBhIGxvY2FsIHNjaGVkdWxlIG11c3QgaGF2ZVxuJiM0MzsgKlx0YmVlbiBzZXQgKCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEKS4gVGhlIGNvbW1hbmQgY2FycmllcyB6ZXJvXG4mIzQzOyAqXHRvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYVxuJiM0MzsgKlx0Y2hhbm5lbCAoYnkgaXRzIGNoYW5uZWwgZGVmaW5pdGlvbikgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgdGhhdFxuJiM0MzsgKlx0bXVzdCBub3QgYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBwcm92aWRlZCBsaXN0XG4mIzQzOyAqXHRyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZVxuJiM0MzsgKlx0Y3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsXG4mIzQzOyAqXHRwcm92aWRlZCBjaGFubmVscyBtdXN0IGV4aXN0IGluIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLCBvdGhlcndpc2VcbiYjNDM7ICpcdHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3JcbiYjNDM7ICpcdGltbXV0YWJsZSBzY2hlZHVsZXMsIHdob3NlIGV2YWN1YXRpb24gd291bGQgYnJlYWsgZXhpc3RpbmcgTkRQXG4mIzQzOyAqXHRjb25uZWN0aW9ucy5cbiYjNDM7ICpcdFRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudFxuJiM0MzsgKlx0bG9jYWwgc2NoZWR1bGUgYW5kIG9ubHkgYWZmZWN0cyBldmFjdWF0aW9uIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnM7XG4mIzQzOyAqXHRpdCBkb2VzIG5vdCBwcmV2ZW50IHRoZSBzY2hlZHVsZSBpdHNlbGYgZnJvbSBiZWluZyBjaGFuZ2VkLiBSZW1vdmluZyBhXG4mIzQzOyAqXHRjaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYVxuJiM0MzsgKlx0dXNlci1pbml0aWF0ZWQgY2hhbmdlLCBub3QgYW4gZXZhY3VhdGlvbiwgYW5kIGlzIGFsbG93ZWQgZXZlbiBmb3IgYVxuJiM0MzsgKlx0bm9uLWV2YWN1YWJsZSBjaGFubmVsLiBBY3Jvc3MgYSBzY2hlZHVsZSB1cGRhdGUsIGNoYW5uZWxzIHRoYXQgcmVtYWluXG4mIzQzOyAqXHRrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHlcbiYjNDM7ICpcdGFkZGVkIGNoYW5uZWxzIGFyZSBldmFjdWFibGUgYnkgZGVmYXVsdDsgaXNzdWUgdGhpcyBjb21tYW5kIGFnYWluIHRvXG4mIzQzOyAqXHRjaGFuZ2UgdGhlIG5vbi1ldmFjdWFibGUgc2V0LlxuICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlclxuICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxuICAqL1xuQEAgLTE3MDUsNiAmIzQzOzE3MzQsOCBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMge1xuIFx0Tkw4MDIxMV9DTURfU1RBUlRfUEQsXG4gXHROTDgwMjExX0NNRF9TVE9QX1BELFxuIFxuJiM0MztcdE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsXG4mIzQzO1xuIFx0LyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovXG4gXG4gXHQvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi9cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbmluZGV4IDIzZjRmOWVjODZkMGEuLmNkY2YxZjA1NzcwNzcgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuQEAgLTU5NzMsNiAmIzQzOzU5NzMsMTggQEAgaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc2RhdGEsIHNjaGVkKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7aWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4gXHQuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsXG4gXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsXG5AQCAtNjA5MSw0ICYjNDM7NjEwMyw1IEBAIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbiBcdC5zZXRfZXBjcyA9IGllZWU4MDIxMV9zZXRfZXBjcyxcbiBcdC5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsXG4gXHQubmFuX3NldF9wZWVyX3NjaGVkID0gaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZCxcbiYjNDM7XHQubmFuX3NldF9ub25fZXZhY19jaGFubmVscyA9IGllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggNTNiMGIwOGQzNDU5Ny4uOTI5ZmM4OTMwYTM1ZSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTIwODcsNiAmIzQzOzIwODcsOCBAQCBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbiYjNDM7aW50IGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpO1xuIHZvaWQgaWVlZTgwMjExX25hbl9mcmVlX3BlZXJfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpO1xuIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTtcbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsICpcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbmFuLmMgYi9uZXQvbWFjODAyMTEvbmFuLmNcbmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbmFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9uYW4uY1xuQEAgLTI0OCw2ICYjNDM7MjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO2ludFxuJiM0MztpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNmZzgwMjExIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgYWxsIHByb3ZpZGVkIGNoYW5uZWxzIGJlbG9uZyB0byB0aGVcbiYjNDM7XHQgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlXG4mIzQzO1x0ICogb25lcyBpbiB0aGUgbGlzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cdTAwM2VjaGFubmVscyk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3Blci5jaGFuKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2c2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3BlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldKSkge1xuJiM0MztcdFx0XHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IHRydWU7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4ge1xuQEAgLTc4Niw2ICYjNDM7ODE1LDEwIEBAIGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXG4gXHRcdHVzYWJsZV9jaGFubmVscyYjNDM7JiM0Mzs7XG4gXG4mIzQzO1x0XHQvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqL1xuJiM0MztcdFx0aWYgKGNoYW4tXHUwMDNlbm9fZXZhY3VhdGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0Y2hhbl9jdHggPSBjb250YWluZXJfb2YoY2hhbi1cdTAwM2VjaGFuY3R4X2NvbmYsXG4gXHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMzI1LDYgJiM0MzszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5Lm10eCk7XG4mIzQzO1xuJiM0MztcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gfHwgIXdkZXZfcnVubmluZyh3ZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERvbiYjMzk7dCBhbGxvdyB1cGRhdGluZyB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscyB3aGlsZSBhIGRlZmVycmVkXG4mIzQzO1x0ICogc2NoZWR1bGUgdXBkYXRlIGlzIHBlbmRpbmcsIGFzIHRoZSBzZXQgb2YgY2hhbm5lbHMgbWF5IHN0aWxsIGNoYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2Mgd2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldKSkge1xuJiM0MztcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZm91bmQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjRlZTQ4YjkzNzA4MDAgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtNTY1LDYgJiM0Mzs1NjUsMTAgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xuIFxuJiM0MztpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiYjNDM7XG4gc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXG4gY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICp0bXAsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IGU1ODVkYTFkNzljOWUuLmY0NDAzNmFkNDNmYjUgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTc3NjMsNiAmIzQzOzE3NzYzLDY5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpjaGFubmVsLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPVxuJiM0MztcdFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxuJiM0MztcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXG4mIzQzO1x0XHRcdCAgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuJiM0MztcdFx0XHRcdCAgICAgY2hhbmRlZiwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbiYjNDM7XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiYjNDM7XHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RDT05OO1xuJiM0MztcbiYjNDM7XHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4mIzQzO1x0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbiYjNDM7XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbiYjNDM7XHRcdG5fY2hhbm5lbHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID1cbiYjNDM7XHRcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcbiYjNDM7XHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjaGFubmVscylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcbiYjNDM7XG4mIzQzO1x0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbiYjNDM7XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBubDgwMjExX2dldF9wcm90b2NvbF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjA2MTksNiAmIzQzOzIwNjgyLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbiBcdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuIFx0XHQuaW50ZXJuYWxfZmxhZ3MgPSBJRkxBR1MoTkw4MDIxMV9GTEFHX05FRURfV0RFVl9VUCksXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5jbWQgPSBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLFxuJiM0MztcdFx0LmRvaXQgPSBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMsXG4mIzQzO1x0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4mIzQzO1x0XHQuaW50ZXJuYWxfZmxhZ3MgPSBJRkxBR1MoTkw4MDIxMV9GTEFHX05FRURfV0RFVl9VUCksXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmw4MDIxMV9mYW0gX19yb19hZnRlcl9pbml0ID0ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLjI2OTI1OGM5NGE0MmEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbkBAIC0xMDkzLDYgJiM0MzsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dHJhY2VfcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGNoYW5uZWxzKTtcbiYjNDM7XHRpZiAocmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9ub25fZXZhY19jaGFubmVscylcbiYjNDM7XHRcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBjaGFubmVscyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X3N0YXJ0X3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbmluZGV4IDhjMmE5MWI4NWMzOTYuLjQzNWRjNThjYWZiZWQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbkBAIC0yNDgzLDYgJiM0MzsyNDgzLDMxIEBAIFRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkLFxuIFx0KVxuICk7XG4gXG4mIzQzO1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyxcbiYjNDM7XHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuJiM0MztcdFx0IHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKSxcbiYjNDM7XHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBjaGFubmVscyksXG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdFdJUEhZX0VOVFJZXG4mIzQzO1x0XHRXREVWX0VOVFJZXG4mIzQzO1x0XHRfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKVxuJiM0MztcdFx0X19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHMpXG4mIzQzO1x0KSxcbiYjNDM7XHRUUF9mYXN0X2Fzc2lnbihcbiYjNDM7XHRcdHUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTtcbiYjNDM7XG4mIzQzO1x0XHRXSVBIWV9BU1NJR047XG4mIzQzO1x0XHRXREVWX0FTU0lHTjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbl9jaGFubmVscyA9IGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGZyZXFzW2ldID0gY2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0uY2hhbi1cdTAwM2VjZW50ZXJfZnJlcTtcbiYjNDM7XHQpLFxuJiM0MztcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCYjMzQ7LCBcJiMzNDsgV0RFVl9QUl9GTVQgXCYjMzQ7LCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzXCYjMzQ7LFxuJiM0MztcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZW5fY2hhbm5lbHMsXG4mIzQzO1x0XHQgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksXG4mIzQzO1x0XHRcdFx0X19lbnRyeS1cdTAwM2VuX2NoYW5uZWxzLCBzaXplb2YodTMyKSkpXG4mIzQzOyk7XG4mIzQzO1xuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X21hY19hY2wsXG4gXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHQgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBnZW5lcmljIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIHRvIGNvbmZpZ3VyZSBub24tZXZhY3VhYmxlIE5BTiBzY2hlZHVsZSBjaGFubmVscy4gSXQgYWRkcyBuZXRsaW5rIGF0dHJpYnV0ZSBwYXJzaW5nLCB2ZXJpZmljYXRpb24gbG9naWMgYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSBpbiBjZmc4MDIxMSwgZHJpdmVyL3N0YWNrIG9wcyBpbiBtYWM4MDIxMSwgYW5kIG1vZGlmaWVzIGNoYW5uZWwgZXZhY3VhdGlvbiBzZWxlY3Rpb24gaW4gbWFjODAyMTEuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIHNvY2tldHMgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzE5YTJhYWMxZDczOTI5ZDZiYWEwNTdiODFhOWU5ZGZlNGNjN2M3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaApAQCAtNDI1Niw2ICYjNDM7NDI1NiwyMSBAQCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVscwomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90CiYjNDM7ICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLgomIzQzOyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaAomIzQzOyAqCW11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgewomIzQzOwl1OCBuX2NoYW5uZWxzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX21hcCAtIE5BTiBwZWVyIHNjaGVkdWxlIG1hcAogICoKQEAgLTUyMDQsNiAmIzQzOzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7CiAgKglzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3QKICAqCXN1cHBvcnRlZCwgYW5kIHRoZSBuZXcgc2NoZWR1bGUgY29tcGxldGVseSByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLgogICoKJiM0MzsgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0OyBjaGFubmVscyBvZiB0aGUgY3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZQomIzQzOyAqCW5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlCiYjNDM7ICoJZ3VhcmFudGVlZCBieSBjZmc4MDIxMSB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuCiYjNDM7ICoKICAqIEBzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Q6IGNvbmZpZ3VyZSBtdWx0aWNhc3QgdG8gdW5pY2FzdCBjb252ZXJzaW9uIGZvciBCU1MKICAqCiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpcwpAQCAtNTU5MCw2ICYjNDM7NTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMgewogCWludAkoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpOwomIzQzOwlpbnQJKCpuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiAJaW50CSgqc2V0X211bHRpY2FzdF90b191bmljYXN0KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgIGNvbnN0IGJvb2wgZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTkyMywxMiAmIzQzOzkyMywxNCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIHsKICAqIEBjaGFubmVsX2VudHJ5OiB0aGUgQ2hhbm5lbCBFbnRyeSBibG9iIGFzIGRlZmluZWQgaW4gV2ktRmkgQXdhcmUKICAqCShUTSkgNC4wIHNwZWNpZmljYXRpb24gVGFibGUgMTAwIChDaGFubmVsIEVudHJ5IGZvcm1hdCBmb3IgdGhlIE5BTgogICoJQXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuCiYjNDM7ICogQG5vX2V2YWN1YXRlOiBpZiBzZXQsIHRoaXMgY2hhbm5lbCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQKICAqLwogc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxOwogCXU4IG5lZWRlZF9yeF9jaGFpbnM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjsKIAl1OCBjaGFubmVsX2VudHJ5WzZdOwomIzQzOwlib29sIG5vX2V2YWN1YXRlOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAppbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKQEAgLTEzODMsNiAmIzQzOzEzODMsMTMgQEAKICAqCWZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIGFuIGFubm91bmNlZCBzY2hlZHVsZSB1cGRhdGUuIFNlZQogICoJJU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQgZm9yIG1vcmUgZGV0YWlscy4KICAqCUlmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS4KJiM0MzsgKglTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuCiYjNDM7ICoJZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhcwomIzQzOyAqCW5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlCiYjNDM7ICoJbm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOgomIzQzOyAqCWNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVscwomIzQzOyAqCXRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmUKJiM0MzsgKglldmFjdWFibGUgYnkgZGVmYXVsdC4KICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdAogICoJYSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aAogICoJJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgYW5kICVOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEKQpAQCAtMTQyNyw2ICYjNDM7MTQzNCwyOCBAQAogICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieQogICoJaXRzICVOTDgwMjExX0FUVFJfV0RFViBpbnRlcmZhY2UuCiAgKgomIzQzOyAqIEBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTOiBTZXQgdGhlIGxpc3Qgb2YgTkFOIGxvY2FsIHNjaGVkdWxlCiYjNDM7ICoJY2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsCiYjNDM7ICoJKCVOTDgwMjExX0NNRF9TVEFSVF9OQU4gd2FzIGV4ZWN1dGVkKSBhbmQgYSBsb2NhbCBzY2hlZHVsZSBtdXN0IGhhdmUKJiM0MzsgKgliZWVuIHNldCAoJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpLiBUaGUgY29tbWFuZCBjYXJyaWVzIHplcm8KJiM0MzsgKglvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYQomIzQzOyAqCWNoYW5uZWwgKGJ5IGl0cyBjaGFubmVsIGRlZmluaXRpb24pIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZQomIzQzOyAqCWN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJlY29tZSBldmFjdWFibGUgYWdhaW4uIEFsbAomIzQzOyAqCXByb3ZpZGVkIGNoYW5uZWxzIG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUsIG90aGVyd2lzZQomIzQzOyAqCXRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3IKJiM0MzsgKglpbW11dGFibGUgc2NoZWR1bGVzLCB3aG9zZSBldmFjdWF0aW9uIHdvdWxkIGJyZWFrIGV4aXN0aW5nIE5EUAomIzQzOyAqCWNvbm5lY3Rpb25zLgomIzQzOyAqCVRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudAomIzQzOyAqCWxvY2FsIHNjaGVkdWxlIGFuZCBvbmx5IGFmZmVjdHMgZXZhY3VhdGlvbiBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zOwomIzQzOyAqCWl0IGRvZXMgbm90IHByZXZlbnQgdGhlIHNjaGVkdWxlIGl0c2VsZiBmcm9tIGJlaW5nIGNoYW5nZWQuIFJlbW92aW5nIGEKJiM0MzsgKgljaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYQomIzQzOyAqCXVzZXItaW5pdGlhdGVkIGNoYW5nZSwgbm90IGFuIGV2YWN1YXRpb24sIGFuZCBpcyBhbGxvd2VkIGV2ZW4gZm9yIGEKJiM0MzsgKglub24tZXZhY3VhYmxlIGNoYW5uZWwuIEFjcm9zcyBhIHNjaGVkdWxlIHVwZGF0ZSwgY2hhbm5lbHMgdGhhdCByZW1haW4KJiM0MzsgKglrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHkKJiM0MzsgKglhZGRlZCBjaGFubmVscyBhcmUgZXZhY3VhYmxlIGJ5IGRlZmF1bHQ7IGlzc3VlIHRoaXMgY29tbWFuZCBhZ2FpbiB0bwomIzQzOyAqCWNoYW5nZSB0aGUgbm9uLWV2YWN1YWJsZSBzZXQuCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0xNzA1LDYgJiM0MzsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHsKIAlOTDgwMjExX0NNRF9TVEFSVF9QRCwKIAlOTDgwMjExX0NNRF9TVE9QX1BELAogCiYjNDM7CU5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsCiYjNDM7CiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCAyM2Y0ZjllYzg2ZDBhLi5jZGNmMWYwNTc3MDc3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC01OTczLDYgJiM0Mzs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzZGF0YSwgc2NoZWQpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiYjNDM7CQkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpOwomIzQzOwomIzQzOwlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2RlbF9pZmFjZSwKQEAgLTYwOTEsNCAmIzQzOzYxMDMsNSBAQCBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLAogCS5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsCiAJLm5hbl9zZXRfcGVlcl9zY2hlZCA9IGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQsCiYjNDM7CS5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzID0gaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA1M2IwYjA4ZDM0NTk3Li45MjlmYzg5MzBhMzVlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjA4Nyw2ICYjNDM7MjA4Nyw4IEBAIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIGludCBpZWVlODAyMTFfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKJiM0MztpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiYjNDM7CQkJCQlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiB2b2lkIGllZWU4MDIxMV9uYW5fZnJlZV9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTsKIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL25hbi5jIGIvbmV0L21hYzgwMjExL25hbi5jCmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9uYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbmFuLmMKQEAgLTI0OCw2ICYjNDM7MjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztpbnQKJiM0MztpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKJiM0MzsJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSAmYW1wO3NkYXRhLSZndDt2aWYuY2ZnLm5hbl9zY2hlZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogY2ZnODAyMTEgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBhbGwgcHJvdmlkZWQgY2hhbm5lbHMgYmVsb25nIHRvIHRoZQomIzQzOwkgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlCiYjNDM7CSAqIG9uZXMgaW4gdGhlIGxpc3QuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGludCBqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoc2NoZWRfY2ZnLSZndDtjaGFubmVscyk7IGomIzQzOyYjNDM7KQomIzQzOwkJc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpbnQgaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKHNjaGVkX2NmZy0mZ3Q7Y2hhbm5lbHMpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIuY2hhbikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJaWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKCZhbXA7c2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7Y2hhbm5lbHMtJmd0O2NoYW5kZWZzW2ldKSkgewomIzQzOwkJCQlzY2hlZF9jZmctJmd0O2NoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKQogewpAQCAtNzg2LDYgJiM0Mzs4MTUsMTAgQEAgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAogCQl1c2FibGVfY2hhbm5lbHMmIzQzOyYjNDM7OwogCiYjNDM7CQkvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqLwomIzQzOwkJaWYgKGNoYW4tJmd0O25vX2V2YWN1YXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQljaGFuX2N0eCA9IGNvbnRhaW5lcl9vZihjaGFuLSZndDtjaGFuY3R4X2NvbmYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMzI1LDYgJiM0MzszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkZXYtJmd0O3dpcGh5Lm10eCk7CiYjNDM7CiYjNDM7CWlmICh3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWQKJiM0MzsJICogc2NoZWR1bGUgdXBkYXRlIGlzIHBlbmRpbmcsIGFzIHRoZSBzZXQgb2YgY2hhbm5lbHMgbWF5IHN0aWxsIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CWlmICh3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVsczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoJmFtcDt3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmc1tqXSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pKSB7CiYjNDM7CQkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFmb3VuZCkKJiM0MzsJCQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHJkZXYsIHdkZXYsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC01NjUsNiAmIzQzOzU2NSwxMCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIAomIzQzO2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiYjNDM7CiBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKIGNmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggZTU4NWRhMWQ3OWM5ZS4uZjQ0MDM2YWQ0M2ZiNSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xNzc2Myw2ICYjNDM7MTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPQomIzQzOwkJa2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLAomIzQzOwkJCUdGUF9LRVJORUwpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWNoYW5uZWxfcGFyc2VkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsCiYjNDM7CQkJICAgICAgIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tJmd0O2V4dGFjaywgY2hhbm5lbF9wYXJzZWQsCiYjNDM7CQkJCSAgICAgY2hhbmRlZiwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKJiM0MzsJaW50IHJlbSwgaSA9IDAsIG5fY2hhbm5lbHMgPSAwOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpjaGFubmVsOwomIzQzOwomIzQzOwlpZiAod2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVOT1RDT05OOwomIzQzOwomIzQzOwkvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovCiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkKJiM0MzsJCW5fY2hhbm5lbHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID0KJiM0MzsJCWt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSwKJiM0MzsJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjaGFubmVscykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljaGFubmVscy0mZ3Q7bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CiYjNDM7CiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChyZGV2LCBjaGFubmVsLCBpbmZvLAomIzQzOwkJCQkJCSAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CkBAIC0yMDYxOSw2ICYjNDM7MjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0gewogCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJCS5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUywKJiM0MzsJCS5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLAomIzQzOwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAomIzQzOwkJLmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLAomIzQzOwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLjI2OTI1OGM5NGE0MmEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCkBAIC0xMDkzLDYgJiM0MzsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0MztyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXRyYWNlX3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscygmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBjaGFubmVscyk7CiYjNDM7CWlmIChyZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpCiYjNDM7CQlyZXQgPSByZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwKJiM0MzsJCQkJCQkJICAgY2hhbm5lbHMpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgcmRldl9zdGFydF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKaW5kZXggOGMyYTkxYjg1YzM5Ni4uNDM1ZGM1OGNhZmJlZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKQEAgLTI0ODMsNiAmIzQzOzI0ODMsMzEgQEAgVFJBQ0VfRVZFTlQocmRldl9uYW5fc2V0X3BlZXJfc2NoZWQsCiAJKQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscywKJiM0MzsJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksCiYjNDM7CVRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSwKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSgKJiM0MzsJCVdJUEhZX0VOVFJZCiYjNDM7CQlXREVWX0VOVFJZCiYjNDM7CQlfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKQomIzQzOwkJX19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzKQomIzQzOwkpLAomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCXUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTsKJiM0MzsKJiM0MzsJCVdJUEhZX0FTU0lHTjsKJiM0MzsJCVdERVZfQVNTSUdOOwomIzQzOwkJX19lbnRyeS0mZ3Q7bl9jaGFubmVscyA9IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOwomIzQzOwkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZnJlcXNbaV0gPSBjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0uY2hhbi0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CSksCiYjNDM7CVRQX3ByaW50ayhXSVBIWV9QUl9GTVQgJiMzNDssICYjMzQ7IFdERVZfUFJfRk1UICYjMzQ7LCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzJiMzNDssCiYjNDM7CQkgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktJmd0O25fY2hhbm5lbHMsCiYjNDM7CQkgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksCiYjNDM7CQkJCV9fZW50cnktJmd0O25fY2hhbm5lbHMsIHNpemVvZih1MzIpKSkKJiM0MzspOwomIzQzOwogVFJBQ0VfRVZFTlQocmRldl9zZXRfbWFjX2FjbCwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCB0YXJnZXQgZm9yIHN5emthbGxlci4gRnJvbSB0aGUgZmlsZSBsaXN0LCBJIHNlZSBhIGZldyBrZXkgYXJlYXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcgdG8gbWU6CgpGaXJzdCwgaXQgdG91Y2hlcyBgY2ZnODAyMTFgIGFuZCBgbWFjODAyMTFgIGhlYXZpbHksIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGJvdGggYXJlIGNvcmUgd2lyZWxlc3MgbmV0d29ya2luZyBjb21wb25lbnRzLCB3aGljaCBhcmUgbm90b3Jpb3VzIGZvciBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgYnVncy4gSSYjMzk7bSBzZWVpbmcgc3RydWN0dXJlcyBsaWtlIGBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgLCBjYWxsYmFja3MsIGFuZCBgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMU2AuIFRoaXMgYE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFNgIGlzIGtleSBiZWNhdXNlIG5ldGxpbmsgaW50ZXJmYWNlcyBhcmUgcHJpbWUgc3l6a2FsbGVyIHRhcmdldHMuCgpUaGUgcHJlc2VuY2Ugb2YgYG1hYzgwMjExX2h3c2ltYCBpcyBpbnRyaWd1aW5nLiBUaGF0IHZpcnR1YWwgV2lGaSBkcml2ZXIgaXMgY3J1Y2lhbCBmb3Igc3l6a2FsbGVyLiBJZiB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIGBtYWM4MDIxMV9od3NpbWAsIHRoZW4gd2UmIzM5O3JlIGluIGx1Y2sgYmVjYXVzZSB3ZSBjYW4gcmVhZGlseSB0ZXN0IGl0IHdpdGhvdXQgbmVlZGluZyBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYG1hYzgwMjExX2h3c2ltYCBzdXBwb3J0cyBOQU4sIG9yIGlmIG1hYzgwMjExIGV2ZW4gc3VwcG9ydHMgdGhvc2UgTkFOIGNvbW1hbmRzIHZpYSBubDgwMjExLiBJIHNob3VsZCBhbHNvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBtYWtlIHRoaXMgY29kZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG90aGVyd2lzZSBub3QgcmVhY2hhYmxlLgoKVGhlIGZhY3QgdGhhdCBgbmw4MDIxMWAgaXMgYWxzbyBpbnZvbHZlZCBpcyBhIGJpZyBwbHVzLiBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCBgbmw4MDIxMWAsIHNvIGdldHRpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkIHRocm91Z2ggdGhhdCBpbnRlcmZhY2UgaXMgYSBnb29kIHNpZ24uIFRoZSBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYCBhbmQgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgZnVuY3Rpb25zIGxvb2sgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKVG8gcXVpY2tseSBhc3Nlc3MgcmVhY2hhYmlsaXR5LCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkbyBzb21lIGdyZXBzIG9uIHRoZSBrZXJuZWwgc291cmNlIHRvIGlkZW50aWZ5IGNhbGwgc2l0ZXMgYW5kIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NGRzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToyOm9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zLW9iai15ICYjNDM7PSB0ZXN0cy9cbi0tXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE3LVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTIzPSQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMyOiQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzM6XHRcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zNC1cdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzAyLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNzAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIHx8XG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDQtXHQgICAgISh3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz01ODQ9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy02NzEtXHRcdFx0ICBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmspO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo2NzI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY3My1cdHJkZXYtXHUwMDNld2lwaHkud2V4dCA9IFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY5My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6Njk0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL2NvcmUuYy02OTUtXHRyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIHw9IFdJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0NDM9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ4My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ4NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ4NS1cdGtmcmVlX3NlbnNpdGl2ZSh3ZGV2LVx1MDAzZXdleHQua2V5cyk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNTM4PXZvaWQgY2ZnODAyMTFfbGVhdmVfbG9ja2VkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NjItXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE1NjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NjQtXHRcdGtmcmVlKHdkZXYtXHUwMDNld2V4dC5pZSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjQ5PXZvaWQgY2ZnODAyMTFfaW5pdF93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjU3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjU4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjU5LVx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfa2V5ID0gLTE7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzQyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE4MTYtXHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTgxNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgxOC1cdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU3OD1jZmc4MDIxMV9nZXRfNmdoel9wb3dlcl90eXBlKGNvbnN0IHU4ICplbGVtcywgc2l6ZV90IGVsZW1zX2xlbixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4MC1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NTgxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4Mi0jZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXHRXQVJOX09OKGNvbmQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD02Mjg9c3RydWN0IGNmZzgwMjExX2NvbG9jYXRlZF9hcCB7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDQtXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfS1VOSVRfVEVTVClcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ2LSNkZWZpbmUgRVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChzeW0pIEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc3ltKVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NjUzPXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNjU4LSNkZWZpbmUgVklTSUJMRV9JRl9DRkc4MDIxMV9LVU5JVCBzdGF0aWNcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjU5OiNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAqL1xubmV0L3dpcmVsZXNzL2NvcmUuaC02NjAtXG4tLVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC02LXZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xubmV0L3dpcmVsZXNzL2lic3MuYzoyNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL2lic3MuYzo1MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXHRtZW1zZXQoXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTQyLVx0d2Rldi1cdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cdTAwM2VjaGFuZGVmO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cdG1lbXNldChcdTAwMjZ3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xubmV0L3dpcmVsZXNzL2lic3MuYzoxODU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cdGlmICghbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxMy1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yODItXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL21sbWUuYy0yODQtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDY3PXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA5LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTEwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTExLVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzNC1cdFx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0NT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5My1cdGlmICghZXJyKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgxNz1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg1OC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA4NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA4NjAtc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJlZ19ydWxlX3BvbGljeVtOTDgwMjExX1JFR19SVUxFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA5MTA9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTg4LX1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5ODk6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5OTAtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTgwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTk4Mi1cdH0sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5OTg0LVx0e1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjM0ODg9dm9pZCBjZmc4MDIxMV9zY2hlZHVsZV9jaGFubmVsc19jaGVjayhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0OTUtXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfREZTX0NPTkNVUlJFTlQpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzNDk2Olx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQ5Ny1cdCAgICAgd2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTUxNi1cbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9yZWcuYy01MTgtLyogTWF4IG51bWJlciBvZiBjb25zZWN1dGl2ZSBhdHRlbXB0cyB0byBjb21tdW5pY2F0ZSB3aXRoIENSREEgICovXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy01ODktfVxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTU5MS1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03MjktXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9yZWcuYy03MzEtI2luY2x1ZGUgXHUwMDNja2V5cy9hc3ltbWV0cmljLXR5cGUuaFx1MDAzZVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03MzU9c3RhdGljIGludCBfX2luaXQgbG9hZF9idWlsdGluX3JlZ2RiX2tleXModm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ3LVxubmV0L3dpcmVsZXNzL3JlZy5jOjc0ODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KHNoaXBwZWRfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTQ6XHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAmIzM5O1xcMCYjMzk7KVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1NS1cdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTc5OD1zdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAwLX1cbm5ldC93aXJlbGVzcy9yZWcuYzo4MDE6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQiAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjAzOD1ib29sIHJlZ19sYXN0X3JlcXVlc3RfY2VsbF9iYXNlKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDItXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjA0MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MTExNz12b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTIyLVx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyNC1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjUtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExNjY6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjctXHRpZiAod2Rldi1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2ICFyZXF1ZXN0LVx1MDAzZWluZm8uYWJvcnRlZCkge1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MzQ0Mz12b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTYtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTgtc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTczNT12b2lkIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVx0dTggY291bnRyeV9kYXRhbGVuO1xubmV0L3dpcmVsZXNzL3NtZS5jOjc0NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cbm5ldC93aXJlbGVzcy9zbWUuYzo3NzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzc2LVx0aWYgKHdleHRldiBcdTAwMjZcdTAwMjYgIWNyLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEwNzk9dm9pZCBfX2NmZzgwMjExX3JvYW1lZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgxLXtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMDgyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTEzNTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMTM2LVx0aWYgKCFpbmZvLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNDgtXHRpbnQgaTtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNTAtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzOTQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk2LVx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tLVxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlPTE9Y2ZnODAyMTEtdGVzdHMteSAmIzQzOz0gbW9kdWxlLm8gZnJhZ21lbnRhdGlvbi5vIHNjYW4ubyB1dGlsLm8gY2hhbi5vXG5uZXQvd2lyZWxlc3MvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAmIzQzOz0gY2ZnODAyMTEtdGVzdHMub1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02MzgtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU2LVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nj1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDEtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwMy1cdGlmIChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM9Mjg9c3RhdGljIHZvaWQgd2lyZWxlc3Nfc2VxX3ByaW50Zl9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDAtI2VuZGlmXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM6NDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMVxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jLTQyLVx0XHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSBmb3IgTUFDODAyMTEgYW5kIENGRzgwMjExKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcgZmVlbHMgb2ZmIHdpdGggdGhlIE1BQzgwMjExIGFuZCBDRkc4MDIxMSBzZXR1cCwgYW5kIHRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQsIHdoaWNoIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGFueSByZWNlbnQgY2hhbmdlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IHJlbGF0aW9uc2hpcHMgdGhleSBoYXZlIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSBvciBldmVuIHRoZSBrZXJuZWwgYXMgYSB3aG9sZS4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB1bnVzdWFsIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgbGVhZCB0byBhIGNvbmZpZ3VyYXRpb24gaXNzdWUgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQgcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGRzgwMjExfGNvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgODAyLjExIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0gbGl2ZSwgc28gaXQmIzM5O3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQgYW55IGludmVzdGlnYXRpb24gb3IgbW9kaWZpY2F0aW9uIHJlbGF0ZWQgdG8gaXRzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHZhcmlhYmxlcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdHMgdGhhdCBtaWdodCBpbmZvcm0gdGhlIG5leHQgc3RlcHMuIEl0JiMzOTtzIHRpbWUgdG8gc2lmdCB0aHJvdWdoIHRoZSBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gbWFjODAyMTFfaHdzaW0gYW5kIE5BTioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBtYWM4MDIxMV9od3NpbWAgYW5kIE5BTiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoZXRoZXIgaXQmIzM5O3MgY29ycmVjdGx5IGhhbmRsaW5nIHRoZXNlIGZlYXR1cmVzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgcmVsaWVzIG9uIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoYXQmIzM5O3MgYmVpbmcgdXNlZCBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYC5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBsaW5rcyB0byBgaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgLCBpcyBiZWluZyBoYW5kbGVkLiBJcyBpdCBiZWluZyBzZXQgY29ycmVjdGx5PyBJcyBpdCBiZWluZyBjYWxsZWQgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWVzPyBJ4oCZbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byBzZWUgaWYgdGhlIE5BTiBub24tZXZhY3VhdGlvbiBjaGFubmVscyBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGBtYWM4MDIxMV9od3NpbWAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBob3cgYG1hYzgwMjExYCB1c2VzIHRoZSBgbWFjODAyMTFfY29uZmlnX29wc2AgaW4gZ2VuZXJhbC4gSXMgYGh3c2ltYCBvciBgY2ZnODAyMTFgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBidWlsZHM/IFRoaXMgaXMgc29tZXRoaW5nIEkgc2hvdWxkIGFsc28gYmVhciBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWM4MDIxMV9jb25maWdfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01OTc3PWllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU5ODctXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk4ODpjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk4OS1cdC5hZGRfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2FkZF9pZmFjZSxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0zOC1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjM5OmV4dGVybiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHM7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC00MC1cbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTc5Mz1zdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXG4tLVxubmV0L21hYzgwMjExL21haW4uYy04NTItXG5uZXQvbWFjODAyMTEvbWFpbi5jOjg1MzpcdHdpcGh5ID0gd2lwaHlfbmV3X25tKFx1MDAyNm1hYzgwMjExX2NvbmZpZ19vcHMsIHByaXZfc2l6ZSwgcmVxdWVzdGVkX25hbWUpO1xubmV0L21hYzgwMjExL21haW4uYy04NTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyB0aGUgbWFjODAyMTEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgbWFjODAyMTFfY29uZmlnX29wc2AuLi4gdGhhdCYjMzk7cyB0aGUgc2hhcmVkIG9wZXJhdGlvbmFsIHN0cnVjdHVyZSB1c2VkIGFjcm9zcyAqYWxsKiB0aGUgbWFjODAyMTEgZHJpdmVycy4gIFRoYXQgbWVhbnMgaXQmIzM5O3MgZnVuZGFtZW50YWwuIEFuZCBJIGtub3cgYG1hYzgwMjExX2h3c2ltYCBsZXZlcmFnZXMgaXQgdG9vLCBuYXR1cmFsbHkuIE5vdywgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIGdldCB0aGF0IGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIHNldHRpbmcgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBhbmQgYmVoYXZpb3Igb2YgdGhlIGhhcmR3YXJlIHNpbXVsYXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gVmlydHVhbCBXaXJlbGVzcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBkcml2ZXIuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUganVpY3kgZGV0YWlscyBhYm91dCBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFyZSBrZXB0LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kdWxlIGZpdHMgaW50byB0aGUgYnJvYWRlciB3aXJlbGVzcyBsYW5kc2NhcGUgYW5kIHdoYXQmIzM5O3MgY29uZmlndXJhYmxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOQU4gSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uIG9mIE5BTiwgc3BlY2lmaWNhbGx5IHRoZSBldmFjdWF0aW9uIGNoYW5uZWwgbG9naWMuIFRvIGRvIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBtYWM4MDIxMWAgY29kZSBiYXNlLiBNeSBmaXJzdCBzdGVwIGlzIGEgY29kZSByZXZpZXcgb2YgYG5sODAyMTEuY2AsIGBjb3JlLmNgLCBhbmQgYG5hbi5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZmlsZXMgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub24tZXZhY3VhdGlvbiBjaGFubmVscyBhcmUgbWFuYWdlZC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgLCBhbmQgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBhbmQgaG93IHRoZXkgdGllIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBgbmw4MDIxMS5jYCwgYW5kIEkmIzM5O20gdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDE3NzYzIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgd2lsbCBiZSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NzYwOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xuMTc3NjE6XHRcdH1cbjE3NzYyOlx0XG4xNzc2MzpcdFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xuMTc3NjQ6XHR9XG4xNzc2NTpcdFxuMTc3NjY6XHRzdGF0aWMgaW50XG4xNzc2NzpcdG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4xNzc2ODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpjaGFubmVsLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuMTc3Njk6XHRcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuMTc3NzA6XHR7XG4xNzc3MTpcdFx0c3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPVxuMTc3NzI6XHRcdFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxuMTc3NzM6XHRcdFx0XHRHRlBfS0VSTkVMKTtcbjE3Nzc0Olx0XHRpbnQgcmV0O1xuMTc3NzU6XHRcbjE3Nzc2Olx0XHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxuMTc3Nzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzc3ODpcdFxuMTc3Nzk6XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXG4xNzc4MDpcdFx0XHRcdCAgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4xNzc4MTpcdFx0aWYgKHJldClcbjE3NzgyOlx0XHRcdHJldHVybiByZXQ7XG4xNzc4MzpcdFxuMTc3ODQ6XHRcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuMTc3ODU6XHRcdFx0XHRcdCAgICAgY2hhbmRlZiwgZmFsc2UpO1xuMTc3ODY6XHR9XG4xNzc4NzpcdFxuMTc3ODg6XHRzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTc3ODk6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTc3OTA6XHR7XG4xNzc5MTpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE3NzkyOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE3NzkzOlx0XHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XG4xNzc5NDpcdFx0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcbjE3Nzk1Olx0XG4xNzc5NjpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjE3Nzk3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3Nzk4Olx0XG4xNzc5OTpcdFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4xNzgwMDpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTc4MDE6XHRcbjE3ODAyOlx0XHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4xNzgwMzpcdFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbjE3ODA0Olx0XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbjE3ODA1Olx0XHRcdG5fY2hhbm5lbHMmIzQzOyYjNDM7O1xuMTc4MDY6XHRcbjE3ODA3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID1cbjE3ODA4Olx0XHRcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcbjE3ODA5Olx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4xNzgxMDpcdFx0aWYgKCFjaGFubmVscylcbjE3ODExOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTc4MTI6XHRcbjE3ODEzOlx0XHRjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcbjE3ODE0Olx0XG4xNzgxNTpcdFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbjE3ODE2Olx0XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xuMTc4MTc6XHRcdFx0aW50IHJldDtcbjE3ODE4Olx0XG4xNzgxOTpcdFx0XHRyZXQgPSBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcbjE3ODIwOlx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSk7XG4xNzgyMTpcdFx0XHRpZiAocmV0KVxuMTc4MjI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTc4MjM6XHRcdFx0aSYjNDM7JiM0Mzs7XG4xNzgyNDpcdFx0fVxuMTc4MjU6XHRcbjE3ODI2Olx0XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4xNzgyNzpcdH1cbjE3ODI4Olx0XG4xNzgyOTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE3ODMwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTc4MzE6XHR7XG4xNzgzMjpcdFx0dm9pZCAqaGRyO1xuMTc4MzM6XHRcdHN0cnVjdCBza19idWZmICptc2c7XG4xNzgzNDpcdFxuMTc4MzU6XHRcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuMTc4MzY6XHRcdGlmICghbXNnKVxuMTc4Mzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzgzODpcdFxuMTc4Mzk6XHRcdGhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsIDAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gV2lyZWxlc3MgQ29yZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDMyMCB0byAzNzAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIGNyaXRpY2FsLCBmb3VuZGF0aW9uYWwgYXNwZWN0cyBvZiB0aGUgd2lyZWxlc3MgY29yZSDigJMgcHJvYmFibHkgdGhlIGluaXRpYWxpemF0aW9uLCByZWdpc3RyYXRpb24sIG9yIGhhbmRsaW5nIG9mIHNvbWUgY29yZSB3aXJlbGVzcyBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aG9zZSBjb21wb25lbnRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgY29yZSBvZiBzb21lIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBvciB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbW9zdCBiYXNpYyB3aXJlbGVzcyBmdW5jdGlvbnMuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gcmVndWxhdG9yeSBoYW5kbGluZyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiwgb3IgZXZlbiBzb21lIGFzcGVjdHMgb2YgbmV0IGRldmljZSBpbnRlZ3JhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyBiYXNpYywgbGlrZSBhIG11dGV4IGluaXQsIG9yIGlmIHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOylcbiAzMjE6XHRcdFx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuIDMyMjpcdFxuIDMyMzpcdFx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbiAzMjQ6XHRcbiAzMjU6XHRcdHJldHVybiAwO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHRpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMzI5Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiAzMzA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcbiAzMzE6XHR7XG4gMzMyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkubXR4KTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gfHwgIXdkZXZfcnVubmluZyh3ZGV2KSlcbiAzMzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzM2Olx0XG4gMzM3Olx0XHQvKlxuIDMzODpcdFx0ICogRG9uJiMzOTt0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWRcbiAzMzk6XHRcdCAqIHNjaGVkdWxlIHVwZGF0ZSBpcyBwZW5kaW5nLCBhcyB0aGUgc2V0IG9mIGNoYW5uZWxzIG1heSBzdGlsbCBjaGFuZ2UuXG4gMzQwOlx0XHQgKi9cbiAzNDE6XHRcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuIDM0MjpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDM0MzpcdFxuIDM0NDpcdFx0LyogQWxsIHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLiAqL1xuIDM0NTpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkmIzQzOyYjNDM7KSB7XG4gMzQ2Olx0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiAzNDc6XHRcbiAzNDg6XHRcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVsczsgaiYjNDM7JiM0MzspIHtcbiAzNDk6XHRcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcbiAzNTA6XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pKSB7XG4gMzUxOlx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG4gMzUyOlx0XHRcdFx0XHRicmVhaztcbiAzNTM6XHRcdFx0XHR9XG4gMzU0Olx0XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRcdFx0aWYgKCFmb3VuZClcbiAzNTc6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAzNTg6XHRcdH1cbiAzNTk6XHRcbiAzNjA6XHRcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xuIDM2MTpcdH1cbiAzNjI6XHRcbiAzNjM6XHR2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIDM2NDpcdFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIDM2NTpcdHtcbiAzNjY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuIDM2NzpcdFxuIDM2ODpcdFx0aWYgKFdBUk5fT04od2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUEQpKVxuIDM2OTpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDI0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIE5BTiBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOQU4gaW1wbGVtZW50YXRpb24uIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgdGFzayBhdCBoYW5kLCBpcyB1bmRvdWJ0ZWRseSBgbmV0L21hYzgwMjExL25hbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nIChOQU4pIHNob3VsZCBiZS4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9uYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKlxuIDI0MTpcdGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpXG4gMjQyOlx0e1xuIDI0MzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbiAyNDQ6XHRcdFx0aWYgKCFzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbaV0uY2hhbnJlcS5vcGVyLmNoYW4pXG4gMjQ1Olx0XHRcdFx0cmV0dXJuIFx1MDAyNnNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tpXTtcbiAyNDY6XHRcdH1cbiAyNDc6XHRcbiAyNDg6XHRcdHJldHVybiBOVUxMO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHRpbnRcbiAyNTI6XHRpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiAyNTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcbiAyNTQ6XHR7XG4gMjU1Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuIDI1NjpcdFxuIDI1NzpcdFx0LypcbiAyNTg6XHRcdCAqIGNmZzgwMjExIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgYWxsIHByb3ZpZGVkIGNoYW5uZWxzIGJlbG9uZyB0byB0aGVcbiAyNTk6XHRcdCAqIGN1cnJlbnQgc2NoZWR1bGUsIHNvIGp1c3QgY2xlYXIgYWxsIG5vbi1ldmFjdWFibGUgZmxhZ3MgYW5kIHNldCB0aGVcbiAyNjA6XHRcdCAqIG9uZXMgaW4gdGhlIGxpc3QuXG4gMjYxOlx0XHQgKi9cbiAyNjI6XHRcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cdTAwM2VjaGFubmVscyk7IGomIzQzOyYjNDM7KVxuIDI2MzpcdFx0XHRzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcbiAyNjQ6XHRcbiAyNjU6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykge1xuIDI2NjpcdFx0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqJiM0MzsmIzQzOykge1xuIDI2NzpcdFx0XHRcdGlmICghc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3Blci5jaGFuKVxuIDI2ODpcdFx0XHRcdFx0Y29udGludWU7XG4gMjY5Olx0XHRcdFx0aWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKFx1MDAyNnNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIsXG4gMjcwOlx0XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldKSkge1xuIDI3MTpcdFx0XHRcdFx0c2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTtcbiAyNzI6XHRcdFx0XHRcdGJyZWFrO1xuIDI3MzpcdFx0XHRcdH1cbiAyNzQ6XHRcdFx0fVxuIDI3NTpcdFx0fVxuIDI3NjpcdFxuIDI3NzpcdFx0cmV0dXJuIDA7XG4gMjc4Olx0fVxuIDI3OTpcdFxuIDI4MDpcdGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiAyODE6XHRcdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4gMjgyOlx0e1xuIDI4MzpcdFx0c3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqc2NoZWRfaWR4X3RvX2NoYW5bSUVFRTgwMjExX05BTl9NQVhfQ0hBTk5FTFNdID0ge307XG4gMjg0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuIDI4NTpcdFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpiYWNrdXBfc2NoZWQgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKCpiYWNrdXBfc2NoZWQpO1xuIDI4NjpcdFx0aW50IHJldDtcbiAyODc6XHRcbiAyODg6XHRcdGlmICghYmFja3VwX3NjaGVkKVxuIDI4OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOQU4gRXZhY3VhdGlvbiBDaGFubmVsIFNlYXJjaCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOQU4gY29kZSBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2UgaGFuZGxlIGNoYW5uZWwgZXZhY3VhdGlvbiBpbiB0aGUgODAyLjExIE5BTiBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAgZnVuY3Rpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyBpbiBgbmV0L21hYzgwMjExL25hbi5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGNvcmUgb2Ygd2hlcmUgdGhlIGNoYW5uZWwgc2VsZWN0aW9uIGxvZ2ljIGZvciBldmFjdWF0aW9uIHJlc2lkZXMuIEkmIzM5O20gaG9waW5nIEkgY2FuIGVpdGhlciBpZGVudGlmeSB0aGUgZXhhY3QgYWxnb3JpdGhtIGluIHVzZSwgb3IgZGV0ZXJtaW5lIHRoZSBpbnB1dHMgaXQgbGV2ZXJhZ2VzLiBNeSBndWVzcyBpcyBpdCYjMzk7cyBoYW5kbGluZyBhIGxvdCBvZiB0aGUgY2hhbm5lbC1ob3BwaW5nIGFuZCBwb3RlbnRpYWxseSBkeW5hbWljIGNvbmZpZ3VyYXRpb24gdGhhdCYjMzk7cyBpbnZvbHZlZCwgYW5kIGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyBzb3BoaXN0aWNhdGVkIHRoZSBzZWxlY3Rpb24gaXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY29uc2lkZXJhdGlvbnMgZm9yIGludGVyZmVyZW5jZSBtaXRpZ2F0aW9uLCB0aHJvdWdocHV0IG9wdGltaXphdGlvbiwgYW5kIHBlcmhhcHMgZXZlbiBwb3dlciBtYW5hZ2VtZW50IGluIHRoaXMgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbmFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFxuIDgwMTpcdFx0aWYgKFdBUk5fT04oc2RhdGEtXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKSlcbiA4MDI6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODAzOlx0XG4gODA0Olx0XHRzY2hlZF9jZmcgPSBcdTAwMjZzZGF0YS1cdTAwM2V2aWYuY2ZnLm5hbl9zY2hlZDtcbiA4MDU6XHRcbiA4MDY6XHRcdC8qIEZpbmQgdGhlIGNoYW5uZWwgdG8gZXZhY3VhdGUgYW5kIGNvdW50IHVzYWJsZSBjaGFubmVscyAqL1xuIDgwNzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElFRUU4MDIxMV9OQU5fTUFYX0NIQU5ORUxTOyBpJiM0MzsmIzQzOykge1xuIDgwODpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsICpjaGFuID1cbiA4MDk6XHRcdFx0XHRcdTAwMjZzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbaV07XG4gODEwOlx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCAqY2hhbl9jdHg7XG4gODExOlx0XHRcdGludCBzbG90X2NvdW50ID0gMDtcbiA4MTI6XHRcbiA4MTM6XHRcdFx0aWYgKCFjaGFuLVx1MDAzZWNoYW5yZXEub3Blci5jaGFuIHx8ICFjaGFuLVx1MDAzZWNoYW5jdHhfY29uZilcbiA4MTQ6XHRcdFx0XHRjb250aW51ZTtcbiA4MTU6XHRcbiA4MTY6XHRcdFx0dXNhYmxlX2NoYW5uZWxzJiM0MzsmIzQzOztcbiA4MTc6XHRcbiA4MTg6XHRcdFx0LyogTm8tZXZhY3VhdGUgY2hhbm5lbCBpcyB1c2FibGUgYnV0IGNhbm5vdCBiZSBldmFjdWF0ZWQgKi9cbiA4MTk6XHRcdFx0aWYgKGNoYW4tXHUwMDNlbm9fZXZhY3VhdGUpXG4gODIwOlx0XHRcdFx0Y29udGludWU7XG4gODIxOlx0XG4gODIyOlx0XHRcdGNoYW5fY3R4ID0gY29udGFpbmVyX29mKGNoYW4tXHUwMDNlY2hhbmN0eF9jb25mLFxuIDgyMzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHgsIGNvbmYpO1xuIDgyNDpcdFxuIDgyNTpcdFx0XHQvKiBJZiBjdHggc3BlY2lmaWVkLCBvbmx5IGNvbnNpZGVyIHRoYXQgc3BlY2lmaWMgY2hhbmN0eCAqL1xuIDgyNjpcdFx0XHRpZiAoY3R4KSB7XG4gODI3Olx0XHRcdFx0aWYgKGNoYW5fY3R4ID09IGN0eClcbiA4Mjg6XHRcdFx0XHRcdGV2YWNfY2hhbiA9IGNoYW47XG4gODI5Olx0XHRcdFx0Y29udGludWU7XG4gODMwOlx0XHRcdH1cbiA4MzE6XHRcbiA4MzI6XHRcdFx0LyogQ2FuIG9ubHkgZXZhY3VhdGUgY2hhbm5lbHMgd2hvc2UgY2hhbmN0eCBpcyBOQU4tb25seSAqL1xuIDgzMzpcdFx0XHRpZiAoaWVlZTgwMjExX2NoYW5jdHhfcmVmY291bnQobG9jYWwsIGNoYW5fY3R4KSBcdTAwM2UgMSlcbiA4MzQ6XHRcdFx0XHRjb250aW51ZTtcbiA4MzU6XHRcbiA4MzY6XHRcdFx0LyogQ291bnQgaG93IG1hbnkgdGltZSBzbG90cyB1c2UgdGhpcyBjaGFubmVsICovXG4gODM3Olx0XHRcdGZvciAoaW50IHMgPSAwOyBzIFx1MDAzYyBDRkc4MDIxMV9OQU5fU0NIRURfTlVNX1RJTUVfU0xPVFM7IHMmIzQzOyYjNDM7KVxuIDgzODpcdFx0XHRcdGlmIChzY2hlZF9jZmctXHUwMDNlc2NoZWR1bGVbc10gPT0gY2hhbilcbiA4Mzk6XHRcdFx0XHRcdHNsb3RfY291bnQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA3NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFJhZGFyIGlzIEJsaW5raW5nISoqCgpPa2F5LCB0aGlzIGxvb2tzICp2ZXJ5KiBwcm9taXNpbmcgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBpdC4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbmV3IGBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTYCBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciwgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IEkmIzM5O20gbG9va2luZyBmb3IuIFdoYXQgY2F0Y2hlcyBteSBleWUgaW1tZWRpYXRlbHkgYXJlIHRoZXNlIGNyaXRpY2FsIGZhY3RvcnM6CgoqICAgKipVc2Vyc3BhY2UgSW50ZXJmYWNlOioqIEl0JiMzOTtzIGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgc2V0dXAgc2lnbmlmaWNhbnRseS4gTm8gY29tcGxleCBkZXZpY2UgZHJpdmVycyB0byBkZWFsIHdpdGggaW5pdGlhbGx5LgoqICAgKipEeW5hbWljIEFsbG9jYXRpb25zIGFuZCBQYXJzaW5nOioqIE5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2l0aCBkeW5hbWljIGFsbG9jYXRpb25zPyBQZXJmZWN0ISBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZSBwYXJzaW5nIGxvZ2ljIGlzIHJpcGUgZm9yIG1hbGZvcm1lZCBpbnB1dCBleHBsb2l0YXRpb24uCiogICAqKldpZGVzcHJlYWQgSW1wYWN0OioqIEl0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIChgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGFuZCBldmFjdWF0aW9uIGxvZ2ljIGluIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCksIHdoaWNoIGJyb2FkZW5zIHRoZSBzY29wZSBmb3IgdnVsbmVyYWJpbGl0aWVzIHRvIGJlIGZvdW5kLgoqICAgKipWaXJ0dWFsaXphdGlvbiBGcmllbmRseToqKiBGdWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobmw4MDIxMSBhbmQgbWFjODAyMTEgLyBtYWM4MDIxMVxfaHdzaW0pLiBUaGlzIG1lYW5zIEkgY2FuIHJ1biB0aGlzIHdpdGggZWFzZSBpbiBhbiBhdXRvbWF0ZWQgZnV6emVyLiBUaGlzIHdpbGwgbWFrZSB0ZXN0aW5nIGVhc2llci4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbiwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2V0IHVwIGNvcnJlY3RseS4gSSBuZWVkIHRvIGNvbmZpcm06CgoqICAgYENGRzgwMjExYAoqICAgYE1BQzgwMjExYAoqICAgYE1BQzgwMjExX0hXU0lNYAoKQW5kIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yICYjMzQ7TkFOJiMzNDsgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgTkFOLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBtaXNzaW5nLiBHb3QgdG8gaGF2ZSBhbGwgbXkgYmFzZXMgY292ZXJlZCBmb3IgdGhlIGZ1enppbmcgcnVuLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGZ1biEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBzYXlzIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIHdpcmVsZXNzIHN0YWNrIHdhcnJhbnRzIGEgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhhdCBmaWxlIHRvIGNoZWNrIHdoYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmUsIGFuZCBpZiBhbnkgYXJlIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBwcm9ibGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiBhIHNpbXBsZSBrZXJuZWwgcmVjb25maWd1cmUgaXMgdGhlIHNvbHV0aW9uIG9yIGlmIHRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFdpcmVsZXNzIERyaXZlciBCdWlsZCBQcm9jZXNzZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGJ1aWx0LCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlcy4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgY29yZSBidWlsZCBsb2dpYyBmb3IgdGhlIG1hYzgwMjExIGZyYW1ld29yayBhbmQgYW55IGdlbmVyYWwgd2lyZWxlc3MgY29tcG9uZW50cyB3aWxsIHByb2JhYmx5IHJlc2lkZSBpbiB0aG9zZSB0b3AtbGV2ZWwgYE1ha2VmaWxlYCBmaWxlcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9NYWtlZmlsZWAgYW5kIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLiBUaG9zZSBhcmUgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzOyBJIGNhbiBwcm9iYWJseSBmaW5kIHRoZSBpbmNsdXNpb24gb2YgdGhvc2UgZmlsZXMgYW5kIHNlZSBob3cgdGhvc2UgY29tcG9uZW50IHBhcnRzIGFyZSB0aWVkIHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aG9zZSBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciB0aGlzIGFuZCBzZWUgd2hlcmUgdGhlIGFjdHVhbCBkcml2ZXJzIGZpdCBpbnRvIHRoaXMgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBob3cgdGhlIGRyaXZlcnMgYXJlIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19NQUM4MDIxMSkgJiM0Mzs9IG1hYzgwMjExLm9cbiAgIDM6XHRcbiAgIDQ6XHQjIG1hYzgwMjExIG9iamVjdHNcbiAgIDU6XHRtYWM4MDIxMS15IDo9IFxcXG4gICA2Olx0XHRtYWluLm8gc3RhdHVzLm8gXFxcbiAgIDc6XHRcdGRyaXZlci1vcHMubyBcXFxuICAgODpcdFx0c3RhX2luZm8ubyBcXFxuICAgOTpcdFx0d2VwLm8gXFxcbiAgMTA6XHRcdGFlYWRfYXBpLm8gXFxcbiAgMTE6XHRcdHdwYS5vIFxcXG4gIDEyOlx0XHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXG4gIDEzOlx0XHRodC5vIGFnZy10eC5vIGFnZy1yeC5vIFxcXG4gIDE0Olx0XHR2aHQubyBcXFxuICAxNTpcdFx0aGUubyBcXFxuICAxNjpcdFx0czFnLm8gXFxcbiAgMTc6XHRcdGlic3MubyBcXFxuICAxODpcdFx0aWZhY2UubyBcXFxuICAxOTpcdFx0bGluay5vIFxcXG4gIDIwOlx0XHRyYXRlLm8gXFxcbiAgMjE6XHRcdHRraXAubyBcXFxuICAyMjpcdFx0YWVzX2NtYWMubyBcXFxuICAyMzpcdFx0YWVzX2dtYWMubyBcXFxuICAyNDpcdFx0Zmlsc19hZWFkLm8gXFxcbiAgMjU6XHRcdGNmZy5vIFxcXG4gIDI2Olx0XHRldGh0b29sLm8gXFxcbiAgMjc6XHRcdHJ4Lm8gXFxcbiAgMjg6XHRcdHNwZWN0bWdtdC5vIFxcXG4gIDI5Olx0XHR0eC5vIFxcXG4gIDMwOlx0XHRrZXkubyBcXFxuICAzMTpcdFx0dXRpbC5vIHBhcnNlLm8gXFxcbiAgMzI6XHRcdHdtZS5vIFxcXG4gIDMzOlx0XHRjaGFuLm8gYXAubyBcXFxuICAzNDpcdFx0dHJhY2UubyBtbG1lLm8gXFxcbiAgMzU6XHRcdHRkbHMubyBcXFxuICAzNjpcdFx0b2NiLm8gXFxcbiAgMzc6XHRcdGFpcnRpbWUubyBcXFxuICAzODpcdFx0ZWh0Lm8gdWhyLm8gbmFuLm9cbiAgMzk6XHRcbiAgNDA6XHRtYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9MRURTKSAmIzQzOz0gbGVkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MTYKCQkJCQkJCW91dHB1dDogMzAwCgkJCQkJCQl0aG91Z2h0czogODg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOQU4gQ2hhbm5lbCBFdmFjdWF0aW9uIExvZ2ljIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O3ZlIGJlZW4gd29ya2luZyB0aHJvdWdoLiBGaXJzdCwgSSBrbm93IHRoYXQgYG5hbi5vYCBpcyBpbmhlcmVudGx5IHBhcnQgb2YgYG1hYzgwMjExLm9gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gU2ltaWxhcmx5LCBgbmw4MDIxMS5vYCBhbmQgYGNvcmUub2AgYXJlIGJ1aWx0IGludG8gYGNmZzgwMjExLm9gIHdoZW4gYENPTkZJR19DRkc4MDIxMWAgaXMgYWN0aXZlLiBUaGlzIGRpY3RhdGVzIHRoZSBjb3JlIG1vZHVsZXMgaW4gcGxheS4KCk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0OiBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAsIGBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzYCwgYW5kIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYC4KCk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlaXIgdmlzaWJpbGl0eS4gQSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIHJldmVhbHMgdGhhdCBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBhbmQgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgaXMgbG9jYXRlZCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIHdoaWxlIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AgaXMgc3RhdGljIGluIGBuZXQvbWFjODAyMTEvY2ZnLmNgIGFuZCBib3RoIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgYW5kIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCBhcmUgaW4gYG5ldC9tYWM4MDIxMS9uYW4uY2AuIEkgaGF2ZSB0byByZW1lbWJlciB0byBmaWx0ZXIgb3V0IGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMgc3VjaCBhcyBgcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC93aXJlbGVzcy9yZGV2LW9wcy5oYCwgc2luY2UgdGhvc2UgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IGNhbGxlZC4KClRoZSBlc3NlbnRpYWwgYEVuYWJsZUNvbmZpZ3NgIGZvciB0aGlzIGFyZSBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4KCk5vdywgSSYjMzk7bSByZWFkeSB0byBjcmFmdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBUaGUgZnV6emluZyB0YXJnZXQgaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nYCBkdWUgdG8gdGhlIGhhbmRsaW5nIG9mIGEgbmV3IG5ldGxpbmsgY29tbWFuZCwgY2hhbm5lbCBldmFjdWF0aW9uIGxvZ2ljIGZvciBOQU4sIHRoZSBwYXJzaW5nIG9mIG5lc3RlZCBubDgwMjExIGF0dHJpYnV0ZXMsIGFuZCB0aGUgZmFjdCB0aGF0IHRoZXNlIGFyZSByZWFjaGFibGUgdmlhIGJvdGggbmV0bGluayBhbmQgbWFjODAyMTEgdmlydHVhbCBpbnRlcmZhY2VzLgoKVGhlcmVmb3JlLCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBoaWdobGlnaHQgdGhpcyBuZXcgY29kZSBwYXRoLCBpbmNsdWRpbmcgaXRzIG5lc3RlZCBwYXJzaW5nIGxvZ2ljLiBUaGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSB0aGF0IGZ1bGwgbGlzdCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucy4gYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgdGhlIHRocmVlIGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZC4KCkJlZm9yZSBJIGFjdHVhbGx5IG1ha2UgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYCwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgYWxsIG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhbmQgY29uZmlncyBhcmUgY29ycmVjdC4KCkZ1bmN0aW9uczoKMS4gYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AKMi4gYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAKMy4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgCjQuIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AKNS4gYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYAo2LiBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAKCkNvbmZpZ3M6Ci0gYENGRzgwMjExYAotIGBNQUM4MDIxMWAKLSBgTUFDODAyMTFfSFdTSU1gCgpPa2F5LCBldmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIGFuZCBtYWM4MDIxMS9jZmc4MDIxMSBoYW5kbGVycyB0byBtYXJrIGNlcnRhaW4gTkFOIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIGFzIG5vbi1ldmFjdWFibGUuXG5cbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGl0IGlzIGEgc2V0dGVyIGNvbW1hbmQgcmV0dXJuaW5nIG9ubHkgYW4gZXJyb3Igc3RhdHVzKSwgcHJlY2x1ZGluZyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLlxuMi4gQWxsIGR5bmFtaWMgYWxsb2NhdGlvbnMgKHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsIG5sYXR0ciBhcnJheSkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGt6YWxsb2MsIGtjYWxsb2MpIGFuZCBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgdmlhIF9fZnJlZShrZnJlZSkuXG4zLiBUaGUgbmV3IGJvb2wgZmllbGQgYG5vX2V2YWN1YXRlYCBpbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGNsZWFyZWQgdG8gZmFsc2UgYW5kIHNldCB0byB0cnVlIHdoZW4gbWF0Y2hpbmcpLlxuNC4gTm8gYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9ja2luZyBpc3N1ZXMgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVycywgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzE5YTJhYWMxZDczOTI5ZDZiYWEwNTdiODFhOWU5ZGZlNGNjN2M3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaApAQCAtNDI1Niw2ICYjNDM7NDI1NiwyMSBAQCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVscwomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90CiYjNDM7ICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLgomIzQzOyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaAomIzQzOyAqCW11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgewomIzQzOwl1OCBuX2NoYW5uZWxzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX21hcCAtIE5BTiBwZWVyIHNjaGVkdWxlIG1hcAogICoKQEAgLTUyMDQsNiAmIzQzOzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7CiAgKglzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3QKICAqCXN1cHBvcnRlZCwgYW5kIHRoZSBuZXcgc2NoZWR1bGUgY29tcGxldGVseSByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLgogICoKJiM0MzsgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0OyBjaGFubmVscyBvZiB0aGUgY3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZQomIzQzOyAqCW5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlCiYjNDM7ICoJZ3VhcmFudGVlZCBieSBjZmc4MDIxMSB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuCiYjNDM7ICoKICAqIEBzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Q6IGNvbmZpZ3VyZSBtdWx0aWNhc3QgdG8gdW5pY2FzdCBjb252ZXJzaW9uIGZvciBCU1MKICAqCiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpcwpAQCAtNTU5MCw2ICYjNDM7NTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMgewogCWludAkoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpOwomIzQzOwlpbnQJKCpuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiAJaW50CSgqc2V0X211bHRpY2FzdF90b191bmljYXN0KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgIGNvbnN0IGJvb2wgZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTkyMywxMiAmIzQzOzkyMywxNCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIHsKICAqIEBjaGFubmVsX2VudHJ5OiB0aGUgQ2hhbm5lbCBFbnRyeSBibG9iIGFzIGRlZmluZWQgaW4gV2ktRmkgQXdhcmUKICAqCShUTSkgNC4wIHNwZWNpZmljYXRpb24gVGFibGUgMTAwIChDaGFubmVsIEVudHJ5IGZvcm1hdCBmb3IgdGhlIE5BTgogICoJQXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuCiYjNDM7ICogQG5vX2V2YWN1YXRlOiBpZiBzZXQsIHRoaXMgY2hhbm5lbCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQKICAqLwogc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxOwogCXU4IG5lZWRlZF9yeF9jaGFpbnM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjsKIAl1OCBjaGFubmVsX2VudHJ5WzZdOwomIzQzOwlib29sIG5vX2V2YWN1YXRlOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAppbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKQEAgLTEzODMsNiAmIzQzOzEzODMsMTMgQEAKICAqCWZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIGFuIGFubm91bmNlZCBzY2hlZHVsZSB1cGRhdGUuIFNlZQogICoJJU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQgZm9yIG1vcmUgZGV0YWlscy4KICAqCUlmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS4KJiM0MzsgKglTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuCiYjNDM7ICoJZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhcwomIzQzOyAqCW5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlCiYjNDM7ICoJbm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOgomIzQzOyAqCWNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVscwomIzQzOyAqCXRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmUKJiM0MzsgKglldmFjdWFibGUgYnkgZGVmYXVsdC4KICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdAogICoJYSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aAogICoJJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgYW5kICVOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEKQpAQCAtMTQyNyw2ICYjNDM7MTQzNCwyOCBAQAogICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieQogICoJaXRzICVOTDgwMjExX0FUVFJfV0RFViBpbnRlcmZhY2UuCiAgKgomIzQzOyAqIEBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTOiBTZXQgdGhlIGxpc3Qgb2YgTkFOIGxvY2FsIHNjaGVkdWxlCiYjNDM7ICoJY2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsCiYjNDM7ICoJKCVOTDgwMjExX0NNRF9TVEFSVF9OQU4gd2FzIGV4ZWN1dGVkKSBhbmQgYSBsb2NhbCBzY2hlZHVsZSBtdXN0IGhhdmUKJiM0MzsgKgliZWVuIHNldCAoJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpLiBUaGUgY29tbWFuZCBjYXJyaWVzIHplcm8KJiM0MzsgKglvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYQomIzQzOyAqCWNoYW5uZWwgKGJ5IGl0cyBjaGFubmVsIGRlZmluaXRpb24pIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZQomIzQzOyAqCWN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJlY29tZSBldmFjdWFibGUgYWdhaW4uIEFsbAomIzQzOyAqCXByb3ZpZGVkIGNoYW5uZWxzIG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUsIG90aGVyd2lzZQomIzQzOyAqCXRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3IKJiM0MzsgKglpbW11dGFibGUgc2NoZWR1bGVzLCB3aG9zZSBldmFjdWF0aW9uIHdvdWxkIGJyZWFrIGV4aXN0aW5nIE5EUAomIzQzOyAqCWNvbm5lY3Rpb25zLgomIzQzOyAqCVRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudAomIzQzOyAqCWxvY2FsIHNjaGVkdWxlIGFuZCBvbmx5IGFmZmVjdHMgZXZhY3VhdGlvbiBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zOwomIzQzOyAqCWl0IGRvZXMgbm90IHByZXZlbnQgdGhlIHNjaGVkdWxlIGl0c2VsZiBmcm9tIGJlaW5nIGNoYW5nZWQuIFJlbW92aW5nIGEKJiM0MzsgKgljaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYQomIzQzOyAqCXVzZXItaW5pdGlhdGVkIGNoYW5nZSwgbm90IGFuIGV2YWN1YXRpb24sIGFuZCBpcyBhbGxvd2VkIGV2ZW4gZm9yIGEKJiM0MzsgKglub24tZXZhY3VhYmxlIGNoYW5uZWwuIEFjcm9zcyBhIHNjaGVkdWxlIHVwZGF0ZSwgY2hhbm5lbHMgdGhhdCByZW1haW4KJiM0MzsgKglrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHkKJiM0MzsgKglhZGRlZCBjaGFubmVscyBhcmUgZXZhY3VhYmxlIGJ5IGRlZmF1bHQ7IGlzc3VlIHRoaXMgY29tbWFuZCBhZ2FpbiB0bwomIzQzOyAqCWNoYW5nZSB0aGUgbm9uLWV2YWN1YWJsZSBzZXQuCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0xNzA1LDYgJiM0MzsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHsKIAlOTDgwMjExX0NNRF9TVEFSVF9QRCwKIAlOTDgwMjExX0NNRF9TVE9QX1BELAogCiYjNDM7CU5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsCiYjNDM7CiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCAyM2Y0ZjllYzg2ZDBhLi5jZGNmMWYwNTc3MDc3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC01OTczLDYgJiM0Mzs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzZGF0YSwgc2NoZWQpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiYjNDM7CQkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpOwomIzQzOwomIzQzOwlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2RlbF9pZmFjZSwKQEAgLTYwOTEsNCAmIzQzOzYxMDMsNSBAQCBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLAogCS5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsCiAJLm5hbl9zZXRfcGVlcl9zY2hlZCA9IGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQsCiYjNDM7CS5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzID0gaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA1M2IwYjA4ZDM0NTk3Li45MjlmYzg5MzBhMzVlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjA4Nyw2ICYjNDM7MjA4Nyw4IEBAIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIGludCBpZWVlODAyMTFfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKJiM0MztpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiYjNDM7CQkJCQlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiB2b2lkIGllZWU4MDIxMV9uYW5fZnJlZV9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTsKIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL25hbi5jIGIvbmV0L21hYzgwMjExL25hbi5jCmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9uYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbmFuLmMKQEAgLTI0OCw2ICYjNDM7MjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztpbnQKJiM0MztpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKJiM0MzsJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSAmYW1wO3NkYXRhLSZndDt2aWYuY2ZnLm5hbl9zY2hlZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogY2ZnODAyMTEgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBhbGwgcHJvdmlkZWQgY2hhbm5lbHMgYmVsb25nIHRvIHRoZQomIzQzOwkgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlCiYjNDM7CSAqIG9uZXMgaW4gdGhlIGxpc3QuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGludCBqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoc2NoZWRfY2ZnLSZndDtjaGFubmVscyk7IGomIzQzOyYjNDM7KQomIzQzOwkJc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpbnQgaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKHNjaGVkX2NmZy0mZ3Q7Y2hhbm5lbHMpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIuY2hhbikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJaWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKCZhbXA7c2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7Y2hhbm5lbHMtJmd0O2NoYW5kZWZzW2ldKSkgewomIzQzOwkJCQlzY2hlZF9jZmctJmd0O2NoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKQogewpAQCAtNzg2LDYgJiM0Mzs4MTUsMTAgQEAgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAogCQl1c2FibGVfY2hhbm5lbHMmIzQzOyYjNDM7OwogCiYjNDM7CQkvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqLwomIzQzOwkJaWYgKGNoYW4tJmd0O25vX2V2YWN1YXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQljaGFuX2N0eCA9IGNvbnRhaW5lcl9vZihjaGFuLSZndDtjaGFuY3R4X2NvbmYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMzI1LDYgJiM0MzszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkZXYtJmd0O3dpcGh5Lm10eCk7CiYjNDM7CiYjNDM7CWlmICh3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWQKJiM0MzsJICogc2NoZWR1bGUgdXBkYXRlIGlzIHBlbmRpbmcsIGFzIHRoZSBzZXQgb2YgY2hhbm5lbHMgbWF5IHN0aWxsIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CWlmICh3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVsczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoJmFtcDt3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmc1tqXSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pKSB7CiYjNDM7CQkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFmb3VuZCkKJiM0MzsJCQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHJkZXYsIHdkZXYsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC01NjUsNiAmIzQzOzU2NSwxMCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIAomIzQzO2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiYjNDM7CiBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKIGNmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggZTU4NWRhMWQ3OWM5ZS4uZjQ0MDM2YWQ0M2ZiNSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xNzc2Myw2ICYjNDM7MTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPQomIzQzOwkJa2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLAomIzQzOwkJCUdGUF9LRVJORUwpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWNoYW5uZWxfcGFyc2VkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsCiYjNDM7CQkJICAgICAgIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tJmd0O2V4dGFjaywgY2hhbm5lbF9wYXJzZWQsCiYjNDM7CQkJCSAgICAgY2hhbmRlZiwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKJiM0MzsJaW50IHJlbSwgaSA9IDAsIG5fY2hhbm5lbHMgPSAwOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpjaGFubmVsOwomIzQzOwomIzQzOwlpZiAod2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVOT1RDT05OOwomIzQzOwomIzQzOwkvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovCiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkKJiM0MzsJCW5fY2hhbm5lbHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID0KJiM0MzsJCWt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSwKJiM0MzsJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjaGFubmVscykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljaGFubmVscy0mZ3Q7bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CiYjNDM7CiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChyZGV2LCBjaGFubmVsLCBpbmZvLAomIzQzOwkJCQkJCSAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CkBAIC0yMDYxOSw2ICYjNDM7MjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0gewogCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJCS5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUywKJiM0MzsJCS5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLAomIzQzOwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAomIzQzOwkJLmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLAomIzQzOwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLjI2OTI1OGM5NGE0MmEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCkBAIC0xMDkzLDYgJiM0MzsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0MztyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXRyYWNlX3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscygmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBjaGFubmVscyk7CiYjNDM7CWlmIChyZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpCiYjNDM7CQlyZXQgPSByZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwKJiM0MzsJCQkJCQkJICAgY2hhbm5lbHMpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgcmRldl9zdGFydF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKaW5kZXggOGMyYTkxYjg1YzM5Ni4uNDM1ZGM1OGNhZmJlZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKQEAgLTI0ODMsNiAmIzQzOzI0ODMsMzEgQEAgVFJBQ0VfRVZFTlQocmRldl9uYW5fc2V0X3BlZXJfc2NoZWQsCiAJKQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscywKJiM0MzsJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksCiYjNDM7CVRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSwKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSgKJiM0MzsJCVdJUEhZX0VOVFJZCiYjNDM7CQlXREVWX0VOVFJZCiYjNDM7CQlfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKQomIzQzOwkJX19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzKQomIzQzOwkpLAomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCXUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTsKJiM0MzsKJiM0MzsJCVdJUEhZX0FTU0lHTjsKJiM0MzsJCVdERVZfQVNTSUdOOwomIzQzOwkJX19lbnRyeS0mZ3Q7bl9jaGFubmVscyA9IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOwomIzQzOwkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZnJlcXNbaV0gPSBjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0uY2hhbi0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CSksCiYjNDM7CVRQX3ByaW50ayhXSVBIWV9QUl9GTVQgJiMzNDssICYjMzQ7IFdERVZfUFJfRk1UICYjMzQ7LCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzJiMzNDssCiYjNDM7CQkgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktJmd0O25fY2hhbm5lbHMsCiYjNDM7CQkgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksCiYjNDM7CQkJCV9fZW50cnktJmd0O25fY2hhbm5lbHMsIHNpemVvZih1MzIpKSkKJiM0MzspOwomIzQzOwogVFJBQ0VfRVZFTlQocmRldl9zZXRfbWFjX2FjbCwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE5BTiBOb24tRXZhY3VhYmxlIENoYW5uZWwgU2V0dGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG1lY2hhbmlzbSB0byBkZXNpZ25hdGUgc3BlY2lmaWMgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZSB3aXRoaW4gdGhlIE5BTiBsb2NhbCBzY2hlZHVsZS4gVGhpcyBpcyBhY2hpZXZlZCB2aWEgYSBuZXcgTmV0bGluayBjb21tYW5kLCBgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMU2AuCgpGaXJzdCwgSSBzZWUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1cGRhdGVkOiBhIG5ldyBgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzYCBzdHJ1Y3QgaXMgZGVmaW5lZCwgZXNzZW50aWFsbHkgYSBjb250YWluZXIgZm9yIGEgbGlzdCBvZiBjaGFubmVsIGRlZmluaXRpb25zLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBgbm9fZXZhY3VhdGVgIGZsYWcgYmVpbmcgYWRkZWQgdG8gdGhlIGBpZWVlODAyMTFfbmFuX2NoYW5uZWxgIHN0cnVjdC4gVGhpcyBpcyB0aGUga2V5IOKAkyBpbmRpY2F0aW5nIHdoZXRoZXIgYSBjaGFubmVsIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGV2YWN1YXRpb24uCgpUaGUgY29kZSBjaGFuZ2VzIGNvbmZpcm0gdGhhdCB0aGUgbmV3IGNvbW1hbmQgd2lsbCBzZXQgdGhlIG5vbi1ldmFjdWF0ZWQgY2hhbm5lbHMuIFRoZSAgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIHRoZSBwcm92aWRlZCBjaGFubmVsIGxpc3QsIGFuZCBzZXRzIHRoZSBgbm9fZXZhY3VhdGVgIGZsYWcgYWNjb3JkaW5nbHkuIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCBpcyBtb2RpZmllZCB0byByZXNwZWN0IHRoZSBuZXcgc2V0dGluZy4KCmBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBpbiBgY29yZS5jYCBwZXJmb3JtcyBpbXBvcnRhbnQgdmFsaWRhdGlvbi4gSXQgbWFrZXMgc3VyZSB3ZSYjMzk7cmUgaW4gTkFOIG1vZGUsIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgYW5kIHRoYXQgdGhlIGNoYW5uZWwgZGVmaW5pdGlvbnMgd2UmIzM5O3JlIGJlaW5nIGdpdmVuIGFjdHVhbGx5IG1hdGNoIHRoZSBjaGFubmVscyB0aGF0IHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCB0byBzdXBwb3J0LCB3aGljaCBpcyBnb29kLiBUaGUgY2FsbCB0byBgcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBzaWduYWxzIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBiZWluZyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIuCgpUaGUgTmV0bGluayBzaWRlIG9mIHRoaW5ncywgaGFuZGxlZCBpbiBgbmw4MDIxMS5jYCwgaXMgcHJldHR5IHN0YW5kYXJkLiAgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAgcGFyc2VzIHRoZSBpbmRpdmlkdWFsIGNoYW5uZWwgZGVmaW5pdGlvbnMgZnJvbSB0aGUgTmV0bGluayBtZXNzYWdlLCBhbmQgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgZG9lcyB0aGUgaGVhdnkgbGlmdGluZzogY291bnRpbmcgdGhlIGNoYW5uZWxzLCBhbGxvY2F0aW5nIG1lbW9yeSwgcG9wdWxhdGluZyB0aGUgYGNoYW5uZWxzYCBzdHJ1Y3QsIGFuZCB1bHRpbWF0ZWx5IGNhbGxpbmcgdGhlIGNvcmUgZnVuY3Rpb24gdG8gc2V0IHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzLiBNZW1vcnkgYWxsb2NhdGlvbiBsb29rcyByZWFzb25hYmxlLCB3aXRoIGBrY2FsbG9jYCBhbmQgYGt6YWxsb2NgIGJlaW5nIHVzZWQsIGFuZCBpbml0aWFsaXphdGlvbiBvY2N1cnJpbmcuCgpOb3csIGEga2V5IGNvbmNlcm46IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIG5vdGhpbmcgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UgYW5kIHRoYXQgYWxsIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgbm8gb3V0cHV0dGluZyBvZiB0aGlzIGluZm9ybWF0aW9uLCB0aGlzIGlzIGEgc2V0dGVyLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZSBhbGxvY2F0aW9ucyBhcmUgYWxsIHplcm9lZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCB0aGUgdXNlIG9mIGEgdHJhY2Vwb2ludCBkb2VzIGNhdGNoIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFkaW5nIGNoYW5uZWwgY2VudGVyIGZyZXF1ZW5jaWVzIGZyb20gdGhlIHBhcnNlZCBgY2hhbmRlZnNgLCBzbyBJIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgYW5kIHRoZSB2YWxpZGF0aW9uIHN0ZXBzLiBUaGUgaW1wb3J0YW50IHZhbGlkYXRpb24gaXMgdGhhdCBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBpbml0aWFsaXplcyBgY2hhbmRlZmAsIGFuZCB0aGF0IHZhbGlkYXRpb24gaW4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIG1ha2VzIHN1cmUgaXQmIzM5O3MgdmFsaWQuIFRoZXJlZm9yZSwgdGhlIHRyYWNlIGV2ZW50IHdpbGwgd29yay4KCk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgd2VsbC1zdHJ1Y3R1cmVkLCBidXQgSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCB0byBlbnN1cmUgY2hhbm5lbCBkZWZpbml0aW9ucyBhcmUgcHJvcGVybHkgaGFuZGxlZCBhbmQgdmFsaWRhdGVkIGJlZm9yZSB0aGUgdHJhY2Vwb2ludCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmIG5sODAyMTFfcGFyc2VfY2hhbmRlZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBubDgwMjExX3BhcnNlX2NoYW5kZWZgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggY2hhbm5lbCBkZWZpbml0aW9uIHBhcnNpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBpcyB0byBqdW1wIHJpZ2h0IGluIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBubDgwMjExX3BhcnNlX2NoYW5kZWZgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgY2hhbm5lbCBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIG5sODAyMTEgZnJhbWV3b3JrLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgcmVzcG9uc2libGUgZm9yIGV4dHJhY3RpbmcgdGhlIGNoYW5uZWwgcGFyYW1ldGVycyBmcm9tIHdoYXRldmVyIGRhdGEgc3RydWN0dXJlIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBubDgwMjExIGludGVyZmFjZSAtIGNvdWxkIGJlIG5ldGxpbmsgYXR0cmlidXRlcyBvciBzb21ldGhpbmcgc2ltaWxhci4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSB0b3VjaCB0aGluZ3MgbGlrZToKKiAgICoqRnJlcXVlbmN5OioqIFRoZSBhY3R1YWwgcmFkaW8gZnJlcXVlbmN5IGluIE1Iei4KKiAgICoqQ2hhbm5lbCBXaWR0aDoqKiBUaGlzIGlzIGNydWNpYWwsIGFzIGl0IGRldGVybWluZXMgdGhlIGJhbmR3aWR0aCB1c2VkIChlLmcuLCAyME1IeiwgNDBNSHosIDgwTUh6LCAxNjBNSHopLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGFyc2luZyBoYW5kbGVzIGFsbCB0aGUgY29tbW9uIChhbmQgZXZlbiBzb21lIGxlc3MgY29tbW9uKSB3aWR0aHMuCiogICAqKkNlbnRlciBGcmVxdWVuY3kgU2VnbWVudHM6KiogSWYgdGhpcyBpcyBhIHdpZGVyIGNoYW5uZWwsIGxpa2UgODBNSHogb3IgMTYwTUh6LCB0aGVuIEkmIzM5O2xsIGxvb2sgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaWRlbnRpZmllcyB0aGUgY2VudGVyIGZyZXF1ZW5jaWVzIG9mIHRoZSBzZWdtZW50cy4KKiAgICoqUmVndWxhdG9yeSBEb21haW4gSGFuZGxpbmc6KiogSG93IGl0IGRlYWxzIHdpdGggZGlmZmVyZW50IHJlZ3VsYXRvcnkgZG9tYWlucyBhbmQgdGhlaXIgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhbm5lbHMgYW5kIHdpZHRocyB3aWxsIGJlIGltcG9ydGFudC4gSSBiZXQgdGhlcmUgYXJlIGNoZWNrcyBhZ2FpbnN0IGEgcmVndWxhdG9yeSBkYXRhYmFzZS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQmIzM5O3MgY3JpdGljYWwgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBpbnZhbGlkIGNoYW5uZWwgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGUgZXJyb3IgY2hlY2tzIGFyZS4gRG9lcyBpdCByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCBwYXJzaW5nIG9mIG1hbGljaW91c2x5IGNyYWZ0ZWQgY2hhbm5lbCBkZWZpbml0aW9ucz8KCk15IGZpcnN0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBncmVwIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgc2VlIHRoZSBkaXJlY3QgdXNhZ2UuIFRoZW4gSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIGl0IGludGVyZmFjZXMgd2l0aCBhbnkgbmw4MDIxMSBtZXNzYWdlIHByb2Nlc3NpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcgYW5kIEkgYW50aWNpcGF0ZSBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggdGhlIGRlZmluaXRpb25zIG9mIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgZW51bXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sODAyMTFfcGFyc2VfY2hhbmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0zOTAzPXN0YXRpYyBib29sIG5sODAyMTFfY2FuX3NldF9kZXZfY2hhbm5lbChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzkyNi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MzkyNzpzdGF0aWMgaW50IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0zOTI4LVx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MDk1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0MDk2OmludCBubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MDk3LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDEwMS17XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQxMDI6XHRyZXR1cm4gX25sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBleHRhY2ssIGF0dHJzLCBmYWxzZSwgY2hhbmRlZixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDEwMy1cdFx0XHRcdCAgICAgIHBlcm1pdF9ucGNhKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQxMDY9c3RhdGljIGludCBfX25sODAyMTFfc2V0X2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDEzNC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NDEzNTpcdHJlc3VsdCA9IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQxMzYtXHRcdFx0XHRcdGlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzIxMD1zdGF0aWMgaW50IG5sODAyMTFfc3RhcnRfYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDctXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcdFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBpbmZvLVx1MDAzZWF0dHJzLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03MzQ5LVx0XHRcdFx0XHQgICAgXHUwMDI2cGFyYW1zLVx1MDAzZWNoYW5kZWYsIHRydWUpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTIwNDQ9c3RhdGljIGludCBubDgwMjExX3N0YXJ0X3JhZGFyX2RldGVjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIwNzUtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDc2Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZjaGFuZGVmLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjA3Ny1cdFx0XHRcdCAgICBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjE0OD1zdGF0aWMgaW50IG5sODAyMTFfbm90aWZ5X3JhZGFyX2RldGVjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIxNjUtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMTY2Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZjaGFuZGVmLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE2Ny1cdFx0XHRcdCAgICBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjIzOT1zdGF0aWMgaW50IG5sODAyMTFfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzA1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMwNjpcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgaW5mby1cdTAwM2VhdHRycyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMDctXHRcdFx0XHQgICAgXHUwMDI2cGFyYW1zLmNoYW5kZWYsIHBlcm1pdF9ucGNhKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEzNTQ0PXN0YXRpYyBpbnQgbmw4MDIxMV9qb2luX2lic3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEzNTkxLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMzU5MjpcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgaW5mby1cdTAwM2VhdHRycyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTM1OTMtXHRcdFx0XHQgICAgXHUwMDI2aWJzcy5jaGFuZGVmLCBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNDU4Mz1zdGF0aWMgaW50IG5sODAyMTFfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NjIyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDYyMzpcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2Y2hhbmRlZixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ2MjQtXHRcdFx0XHQgICAgZmFsc2UpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ3Nzc9c3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0ODUyLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0ODUzOlx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0ODU0LVx0XHRcdFx0XHQgICAgXHUwMDI2Y2hhbmRlZiwgZmFsc2UpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTUyNTU9c3RhdGljIGludCBubDgwMjExX2pvaW5fb2NiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNTI2MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTUyNjI6XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MjYzLVx0XHRcdFx0ICAgIFx1MDAyNnNldHVwLmNoYW5kZWYsIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE1Mjc4PXN0YXRpYyBpbnQgbmw4MDIxMV9qb2luX21lc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MzM3LVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE1MzM4Olx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MzM5LVx0XHRcdFx0XHQgICAgXHUwMDI2c2V0dXAuY2hhbmRlZiwgZmFsc2UpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTczMzU9c3RhdGljIGludCBubDgwMjExX3BhcnNlX25hbl9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3MzU1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzM1NjpcdHJldCA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgY2hhbm5lbF9wYXJzZWQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3MzU3LVx0XHRcdFx0ICAgIFx1MDAyNmNoYW5kZWYsIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NzY3PW5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc4My1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3ODQ6XHRyZXR1cm4gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBjaGFubmVsX3BhcnNlZCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3ODUtXHRcdFx0XHQgICAgIGNoYW5kZWYsIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDAxPXN0YXRpYyBpbnQgbmw4MDIxMV90ZGxzX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQyNy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0Mjg6XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsIFx1MDAyNmNoYW5kZWYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDI5LVx0XHRcdFx0ICAgIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oPTE5PXN0YXRpYyBpbmxpbmUgdTY0IHdkZXZfaWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oLTI0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuaDoyNTppbnQgbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmgtMjYtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L3dpcmVsZXNzL3Btc3IuYz0zMDk9c3RhdGljIGludCBwbXNyX3BhcnNlX3BlZXIoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9wbXNyLmMtMzU0LVxubmV0L3dpcmVsZXNzL3Btc3IuYzozNTU6XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3MvcG1zci5jLTM1Ni1cdFx0XHRcdCAgICBcdTAwMjZvdXQtXHUwMDNlY2hhbmRlZiwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIENoYW5uZWwgUGFyc2luZyBMb2dpYyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBub24tZXZhY3VhdGlvbiBhbmQgTkFOIGNoYW5uZWwgcGFyc2luZyB3aXRoaW4gdGhlIGBubDgwMjExYCBjb250ZXh0LiBMZXQmIzM5O3MgemVybyBpbiBvbiBgbmw4MDIxMV9wYXJzZV9uYW5fY2hhbm5lbGAgYW5kIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHN1YnRsZSBkaWZmZXJlbmNlcyBvciBwb3RlbnRpYWwgb3ZlcmxhcCBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2ltaWxhcml0aWVzIGluIHRoZWlyIGNvcmUgZnVuY3Rpb24gb2YgZGVhbGluZyB3aXRoIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gY29tcGFyZSB0aGVpciBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3MzM1IGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgdG8gZmlndXJlIG91dCBhbnkgbnVhbmNlcy4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlIGhvdyB0aGV5IGhhbmRsZSBjaGFubmVsIHBhcmFtZXRlcnMgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbmNvbnNpc3RlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MzM1Olx0c3RhdGljIGludCBubDgwMjExX3BhcnNlX25hbl9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbjE3MzM2Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmNoYW5uZWwsXG4xNzMzNzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuMTczMzg6XHRcdFx0XHRcdCAgICAgc3RydWN0IGNmZzgwMjExX25hbl9jaGFubmVsICpuYW5fY2hhbm5lbHMsXG4xNzMzOTpcdFx0XHRcdFx0ICAgICB1OCBpbmRleCwgYm9vbCBsb2NhbClcbjE3MzQwOlx0e1xuMTczNDE6XHRcdHN0cnVjdCBubGF0dHIgKipjaGFubmVsX3BhcnNlZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbjE3MzQyOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjE3MzQzOlx0XHR1OCBuX3J4X25zcztcbjE3MzQ0Olx0XHRpbnQgcmV0O1xuMTczNDU6XHRcbjE3MzQ2Olx0XHRjaGFubmVsX3BhcnNlZCA9IGtjYWxsb2MoTkw4MDIxMV9BVFRSX01BWCAmIzQzOyAxLCBzaXplb2YoKmNoYW5uZWxfcGFyc2VkKSxcbjE3MzQ3Olx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4xNzM0ODpcdFx0aWYgKCFjaGFubmVsX3BhcnNlZClcbjE3MzQ5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTczNTA6XHRcbjE3MzUxOlx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGNoYW5uZWxfcGFyc2VkLCBOTDgwMjExX0FUVFJfTUFYLCBjaGFubmVsLCBOVUxMLFxuMTczNTI6XHRcdFx0XHQgICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuMTczNTM6XHRcdGlmIChyZXQpXG4xNzM1NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTczNTU6XHRcbjE3MzU2Olx0XHRyZXQgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuMTczNTc6XHRcdFx0XHRcdCAgICBcdTAwMjZjaGFuZGVmLCBmYWxzZSk7XG4xNzM1ODpcdFx0aWYgKHJldClcbjE3MzU5Olx0XHRcdHJldHVybiByZXQ7XG4xNzM2MDpcdFxuMTczNjE6XHRcdGlmIChjaGFuZGVmLmNoYW4tXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfNkdIWikge1xuMTczNjI6XHRcdFx0TkxfU0VUX0VSUl9NU0coaW5mby1cdTAwM2VleHRhY2ssXG4xNzM2MzpcdFx0XHRcdCAgICAgICBcJiMzNDs2IEdIeiBiYW5kIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMTczNjQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTczNjU6XHRcdH1cbjE3MzY2Olx0XG4xNzM2NzpcdFx0aWYgKCFjZmc4MDIxMV9yZWdfY2FuX2JlYWNvbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBcdTAwMjZjaGFuZGVmLFxuMTczNjg6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9JRlRZUEVfTkFOKSkge1xuMTczNjk6XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgY2hhbm5lbCxcbjE3MzcwOlx0XHRcdFx0XHQgICAgXCYjMzQ7Q2hhbm5lbCBpbiBOQU4gc2NoZWR1bGUgaXMgbm90IGFsbG93ZWQgZm9yIE5BTiBvcGVyYXRpb25cJiMzNDspO1xuMTczNzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzM3MjpcdFx0fVxuMTczNzM6XHRcbjE3Mzc0Olx0XHRpZiAobG9jYWwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NzkKCQkJCQkJCW91dHB1dDogMjkxCgkJCQkJCQl0aG91Z2h0czogMTE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGx1cmtpbmcgYXJvdW5kLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaGFuZGxpbmcgdGhlIHNldHRpbmcgb2Ygbm9uLWV2YWN1YWJsZSBjaGFubmVscyBmb3IgTkFOLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGZsb3c6IEl0IHBhcnNlcyBjaGFubmVsIGF0dHJpYnV0ZXMgZnJvbSBhIE5ldGxpbmsgbWVzc2FnZSwgYWxsb2NhdGVzIGEgc3RydWN0dXJlIChgY2hhbm5lbHNgKSB0byBob2xkIHRoZSBjaGFubmVsIGRlZmluaXRpb25zLCBwb3B1bGF0ZXMgaXQsIGFuZCB0aGVuIHBhc3NlcyBpdCBhbG9uZy4gSSBub3RlZCB0aGF0IGV2ZW4gaWYgYG5fY2hhbm5lbHNgIGlzIHplcm8gKG1lYW5pbmcgbm8gY2hhbm5lbCBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZCksIHRoZSBhbGxvY2F0aW9uIHN0aWxsIHdvcmtzIGNvcnJlY3RseSwgYWxsb2NhdGluZyBhIHN0cnVjdCB3aXRoIGEgemVyby1sZW5ndGggYXJyYXkuIFRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIHdpdGggbm8gaWxsIGVmZmVjdHMuCgpOb3csIEkgcGFpZCBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEJvdGggYGNoYW5uZWxzYCBhbmQgdGhlIGludGVybWVkaWFyeSBgY2hhbm5lbF9wYXJzZWRgIHdpdGhpbiBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYCBhcmUgemVyb2VkIHZpYSBga3phbGxvY2Agb3IgYGtjYWxsb2NgLiBUaGlzIGlzIGdvb2QgcHJhY3RpY2UuIEkgY29uZmlybWVkIHRoYXQgYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgcHJvcGVybHkgcG9wdWxhdGVzIHRoZSBmaWVsZHMgYW5kIHRoYXQgYWxsIGZpZWxkcyBpbiBgc2NoZWRfY2ZnLSZndDtjaGFubmVsc2AgKG9yIGl0cyBlcXVpdmFsZW50cykgYXJlIGV4cGxpY2l0bHkgc2V0LiBUaGVyZSYjMzk7cyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtpbmcgaW50byB1c2VyIHNwYWNlIHZpYSBjb3BpZXMgb3IgcmVzcG9uc2VzLiBDcnVjaWFsbHksIHRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGUgY29yZSBsb2dpYyBoYW5kbGVzIGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIG1lbW9yeSBpbiBhIHNhZmUgbWFubmVyLiBQb3RlbnRpYWwgY29uY3VycmVuY3ksIGluZGV4LXJlbGF0ZWQgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGxpa2VseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gb3IgZGF0YSBsZWFrZWQgYmFjayB0byB1c2Vyc3BhY2UsIGFuZCBubyBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIHdpdGhvdXQgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8ganVzdGlmaWNhdGlvbiB0byBydW4gS01TQU4gZm9yIHRoaXMuIFdlIGNhbiBzYWZlbHkgbWFyayB0aGlzIHBhdGNoIGFzIG5vdCBuZWVkaW5nIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyBhbmQgbWFjODAyMTEvY2ZnODAyMTEgaGFuZGxlcnMgdG8gbWFyayBjZXJ0YWluIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlLlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChpdCBpcyBhIHNldHRlciBjb21tYW5kIHJldHVybmluZyBvbmx5IGFuIGVycm9yIHN0YXR1cyksIHByZWNsdWRpbmcga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy5cbjIuIEFsbCBkeW5hbWljIGFsbG9jYXRpb25zIChzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzLCBubGF0dHIgYXJyYXkpIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChremFsbG9jLCBrY2FsbG9jKSBhbmQgYXV0b21hdGljYWxseSBtYW5hZ2VkIHZpYSBfX2ZyZWUoa2ZyZWUpLlxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cbjQuIE5vIGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgYW5kIG1hYzgwMjExL2NmZzgwMjExIGhhbmRsZXJzIHRvIG1hcmsgY2VydGFpbiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZS5cblxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoaXQgaXMgYSBzZXR0ZXIgY29tbWFuZCByZXR1cm5pbmcgb25seSBhbiBlcnJvciBzdGF0dXMpLCBwcmVjbHVkaW5nIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuXG4yLiBBbGwgZHluYW1pYyBhbGxvY2F0aW9ucyAoc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscywgbmxhdHRyIGFycmF5KSBhcmUgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgYWxsb2NhdG9ycyAoa3phbGxvYywga2NhbGxvYykgYW5kIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCB2aWEgX19mcmVlKGtmcmVlKS5cbjMuIFRoZSBuZXcgYm9vbCBmaWVsZCBgbm9fZXZhY3VhdGVgIGluIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoY2xlYXJlZCB0byBmYWxzZSBhbmQgc2V0IHRvIHRydWUgd2hlbiBtYXRjaGluZykuXG40LiBObyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuXG5cbkFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2NraW5nIGlzc3VlcyBpbiB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXJzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGNvbmZpZ3VyYXRpb25zLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDAuODIwNzUxOTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM2Mjg4MDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxcIixcbiAgICBcImNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgYW5kIG1hYzgwMjExL2NmZzgwMjExIGhhbmRsZXJzIHRvIG1hcmsgY2VydGFpbiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZS5cXG5cXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoaXQgaXMgYSBzZXR0ZXIgY29tbWFuZCByZXR1cm5pbmcgb25seSBhbiBlcnJvciBzdGF0dXMpLCBwcmVjbHVkaW5nIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuXFxuMi4gQWxsIGR5bmFtaWMgYWxsb2NhdGlvbnMgKHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsIG5sYXR0ciBhcnJheSkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGt6YWxsb2MsIGtjYWxsb2MpIGFuZCBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgdmlhIF9fZnJlZShrZnJlZSkuXFxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cXG40LiBObyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyB0byBjb25maWd1cmUgbm9uLWV2YWN1YWJsZSBOQU4gc2NoZWR1bGUgY2hhbm5lbHMuIEl0IGFkZHMgbmV0bGluayBhdHRyaWJ1dGUgcGFyc2luZywgdmVyaWZpY2F0aW9uIGxvZ2ljIGFnYWluc3QgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgaW4gY2ZnODAyMTEsIGRyaXZlci9zdGFjayBvcHMgaW4gbWFjODAyMTEsIGFuZCBtb2RpZmllcyBjaGFubmVsIGV2YWN1YXRpb24gc2VsZWN0aW9uIGluIG1hYzgwMjExLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmw4MDIxMSBzb2NrZXRzIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo0MC44MjA3NjAxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNzYwOTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3MTlhMmFhYzFkNzM5MjlkNmJhYTA1N2I4MWE5ZTlkZmU0Y2M3YzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtNDI1Niw2ICs0MjU2LDIxIEBAIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQge1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVsc1xcbisgKlxcbisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSBzZXQgb2YgTkFOIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXQgbXVzdCBub3RcXG4rICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuXFxuKyAqXFxuKyAqIEBuX2NoYW5uZWxzOiBudW1iZXIgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyBpbiAlY2hhbmRlZnMuXFxuKyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaFxcbisgKlxcdG11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxcbisgKi9cXG4rc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyB7XFxuK1xcdHU4IG5fY2hhbm5lbHM7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBjaGFuZGVmc1tdIF9fY291bnRlZF9ieShuX2NoYW5uZWxzKTtcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfbWFwIC0gTkFOIHBlZXIgc2NoZWR1bGUgbWFwXFxuICAqXFxuQEAgLTUyMDQsNiArNTIxOSwxMiBAQCBzdHJ1Y3QgbWdtdF9mcmFtZV9yZWdzIHtcXG4gICpcXHRzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3RcXG4gICpcXHRzdXBwb3J0ZWQsIGFuZCB0aGUgbmV3IHNjaGVkdWxlIGNvbXBsZXRlbHkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZS5cXG4gICpcXG4rICogQG5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHM6IHNldCB0aGUgbGlzdCBvZiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0XFxuKyAqXFx0bXVzdCBub3QgYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBwcm92aWRlZCBsaXN0XFxuKyAqXFx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldDsgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmVcXG4rICpcXHRub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsIHByb3ZpZGVkIGNoYW5uZWxzIGFyZVxcbisgKlxcdGd1YXJhbnRlZWQgYnkgY2ZnODAyMTEgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxcbisgKlxcbiAgKiBAc2V0X211bHRpY2FzdF90b191bmljYXN0OiBjb25maWd1cmUgbXVsdGljYXN0IHRvIHVuaWNhc3QgY29udmVyc2lvbiBmb3IgQlNTXFxuICAqXFxuICAqIEBnZXRfdHhxX3N0YXRzOiBHZXQgVFhRIHN0YXRzIGZvciBpbnRlcmZhY2Ugb3IgcGh5LiBJZiB3ZGV2IGlzICVOVUxMLCB0aGlzXFxuQEAgLTU1OTAsNiArNTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMge1xcbiBcXHRpbnRcXHQoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XFxuK1xcdGludFxcdCgqbmFuX3NldF9ub25fZXZhY19jaGFubmVscykoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcXG4gXFx0aW50XFx0KCpzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QpKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgYm9vbCBlbmFibGVkKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcXG5pbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuQEAgLTkyMywxMiArOTIzLDE0IEBAIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYge1xcbiAgKiBAY2hhbm5lbF9lbnRyeTogdGhlIENoYW5uZWwgRW50cnkgYmxvYiBhcyBkZWZpbmVkIGluIFdpLUZpIEF3YXJlXFxuICAqXFx0KFRNKSA0LjAgc3BlY2lmaWNhdGlvbiBUYWJsZSAxMDAgKENoYW5uZWwgRW50cnkgZm9ybWF0IGZvciB0aGUgTkFOXFxuICAqXFx0QXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuXFxuKyAqIEBub19ldmFjdWF0ZTogaWYgc2V0LCB0aGlzIGNoYW5uZWwgbXVzdCBub3QgYmUgZXZhY3VhdGVkXFxuICAqL1xcbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxO1xcbiBcXHR1OCBuZWVkZWRfcnhfY2hhaW5zO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xcbiBcXHR1OCBjaGFubmVsX2VudHJ5WzZdO1xcbitcXHRib29sIG5vX2V2YWN1YXRlO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuaW5kZXggZDhmZWZlZmMxMWE5NS4uZmIzMDBiMGM0YTI4NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbkBAIC0xMzgzLDYgKzEzODMsMTMgQEBcXG4gICpcXHRmcm9tIHRoZSBkZXZpY2UgdG8gcGVyZm9ybSBhbiBhbm5vdW5jZWQgc2NoZWR1bGUgdXBkYXRlLiBTZWVcXG4gICpcXHQlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgKlxcdElmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS5cXG4rICpcXHRTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuXFxuKyAqXFx0ZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhc1xcbisgKlxcdG5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlXFxuKyAqXFx0bm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOlxcbisgKlxcdGNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVsc1xcbisgKlxcdHRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmVcXG4rICpcXHRldmFjdWFibGUgYnkgZGVmYXVsdC5cXG4gICogQE5MODAyMTFfQ01EX05BTl9TQ0hFRF9VUERBVEVfRE9ORTogRXZlbnQgc2VudCB0byB1c2VyIHNwYWNlIHRvIG5vdGlmeSB0aGF0XFxuICAqXFx0YSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aFxcbiAgKlxcdCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGFuZCAlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRClcXG5AQCAtMTQyNyw2ICsxNDM0LDI4IEBAXFxuICAqIEBOTDgwMjExX0NNRF9TVE9QX1BEOiBTdG9wIHRoZSBQRCBvcGVyYXRpb24sIGlkZW50aWZpZWQgYnlcXG4gICpcXHRpdHMgJU5MODAyMTFfQVRUUl9XREVWIGludGVyZmFjZS5cXG4gICpcXG4rICogQE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFM6IFNldCB0aGUgbGlzdCBvZiBOQU4gbG9jYWwgc2NoZWR1bGVcXG4rICpcXHRjaGFubmVscyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gTkFOIG11c3QgYmUgb3BlcmF0aW9uYWxcXG4rICpcXHQoJU5MODAyMTFfQ01EX1NUQVJUX05BTiB3YXMgZXhlY3V0ZWQpIGFuZCBhIGxvY2FsIHNjaGVkdWxlIG11c3QgaGF2ZVxcbisgKlxcdGJlZW4gc2V0ICglTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkuIFRoZSBjb21tYW5kIGNhcnJpZXMgemVyb1xcbisgKlxcdG9yIG1vcmUgbmVzdGVkICVOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwgYXR0cmlidXRlcywgZWFjaCBpZGVudGlmeWluZyBhXFxuKyAqXFx0Y2hhbm5lbCAoYnkgaXRzIGNoYW5uZWwgZGVmaW5pdGlvbikgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgdGhhdFxcbisgKlxcdG11c3Qgbm90IGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLiBUaGUgcHJvdmlkZWQgbGlzdFxcbisgKlxcdHJlcGxhY2VzIHRoZSBwcmV2aW91cyBzZXQgb2Ygbm9uLWV2YWN1YWJsZSBjaGFubmVsczsgY2hhbm5lbHMgb2YgdGhlXFxuKyAqXFx0Y3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsXFxuKyAqXFx0cHJvdmlkZWQgY2hhbm5lbHMgbXVzdCBleGlzdCBpbiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSwgb3RoZXJ3aXNlXFxuKyAqXFx0dGhlIGNvbW1hbmQgZmFpbHMuIFRoaXMgaXMgdXNlZCB0byBwcm90ZWN0IGNoYW5uZWxzIGNhcnJ5aW5nIE5EQyBvclxcbisgKlxcdGltbXV0YWJsZSBzY2hlZHVsZXMsIHdob3NlIGV2YWN1YXRpb24gd291bGQgYnJlYWsgZXhpc3RpbmcgTkRQXFxuKyAqXFx0Y29ubmVjdGlvbnMuXFxuKyAqXFx0VGhlIG5vbi1ldmFjdWFibGUgbWFya2luZyBpcyBhIHBlci1jaGFubmVsIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50XFxuKyAqXFx0bG9jYWwgc2NoZWR1bGUgYW5kIG9ubHkgYWZmZWN0cyBldmFjdWF0aW9uIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnM7XFxuKyAqXFx0aXQgZG9lcyBub3QgcHJldmVudCB0aGUgc2NoZWR1bGUgaXRzZWxmIGZyb20gYmVpbmcgY2hhbmdlZC4gUmVtb3ZpbmcgYVxcbisgKlxcdGNoYW5uZWwgZnJvbSB0aGUgc2NoZWR1bGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCBpcyBhXFxuKyAqXFx0dXNlci1pbml0aWF0ZWQgY2hhbmdlLCBub3QgYW4gZXZhY3VhdGlvbiwgYW5kIGlzIGFsbG93ZWQgZXZlbiBmb3IgYVxcbisgKlxcdG5vbi1ldmFjdWFibGUgY2hhbm5lbC4gQWNyb3NzIGEgc2NoZWR1bGUgdXBkYXRlLCBjaGFubmVscyB0aGF0IHJlbWFpblxcbisgKlxcdGtlZXAgdGhlaXIgbm9uLWV2YWN1YWJsZSBtYXJraW5nLCByZW1vdmVkIGNoYW5uZWxzIGxvc2UgaXQsIGFuZCBuZXdseVxcbisgKlxcdGFkZGVkIGNoYW5uZWxzIGFyZSBldmFjdWFibGUgYnkgZGVmYXVsdDsgaXNzdWUgdGhpcyBjb21tYW5kIGFnYWluIHRvXFxuKyAqXFx0Y2hhbmdlIHRoZSBub24tZXZhY3VhYmxlIHNldC5cXG4gICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyXFxuICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxcbiAgKi9cXG5AQCAtMTcwNSw2ICsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHtcXG4gXFx0Tkw4MDIxMV9DTURfU1RBUlRfUEQsXFxuIFxcdE5MODAyMTFfQ01EX1NUT1BfUEQsXFxuIFxcbitcXHROTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLFxcbitcXG4gXFx0LyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovXFxuIFxcbiBcXHQvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXFxuaW5kZXggMjNmNGY5ZWM4NmQwYS4uY2RjZjFmMDU3NzA3NyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcXG5AQCAtNTk3Myw2ICs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc2RhdGEsIHNjaGVkKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbitpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpO1xcbitcXG4rXFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHNkYXRhLCBjaGFubmVscyk7XFxuK31cXG4rXFxuIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4gXFx0LmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLFxcbiBcXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsXFxuQEAgLTYwOTEsNCArNjEwMyw1IEBAIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4gXFx0LnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLFxcbiBcXHQubmFuX3NldF9sb2NhbF9zY2hlZCA9IGllZWU4MDIxMV9zZXRfbG9jYWxfbmFuX3NjaGVkLFxcbiBcXHQubmFuX3NldF9wZWVyX3NjaGVkID0gaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZCxcXG4rXFx0Lm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMgPSBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjkyOWZjODkzMGEzNWUgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG4rKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbkBAIC0yMDg3LDYgKzIwODcsOCBAQCBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpO1xcbitpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcXG4gdm9pZCBpZWVlODAyMTFfbmFuX2ZyZWVfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XFxuIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTtcXG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9uYW4uYyBiL25ldC9tYWM4MDIxMS9uYW4uY1xcbmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL25hbi5jXFxuKysrIGIvbmV0L21hYzgwMjExL25hbi5jXFxuQEAgLTI0OCw2ICsyNDgsMzUgQEAgaWVlZTgwMjExX25hbl9maW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZylcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK2ludFxcbitpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYuY2ZnLm5hbl9zY2hlZDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGNmZzgwMjExIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgYWxsIHByb3ZpZGVkIGNoYW5uZWxzIGJlbG9uZyB0byB0aGVcXG4rXFx0ICogY3VycmVudCBzY2hlZHVsZSwgc28ganVzdCBjbGVhciBhbGwgbm9uLWV2YWN1YWJsZSBmbGFncyBhbmQgc2V0IHRoZVxcbitcXHQgKiBvbmVzIGluIHRoZSBsaXN0LlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHMpOyBqKyspXFxuK1xcdFxcdHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHM7IGkrKykge1xcbitcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVscyk7IGorKykge1xcbitcXHRcXHRcXHRpZiAoIXNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLmNoYW4pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXFx1MDAyNnNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNoYW5uZWxzLVxcdTAwM2VjaGFuZGVmc1tpXSkpIHtcXG4rXFx0XFx0XFx0XFx0c2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcXG4ge1xcbkBAIC03ODYsNiArODE1LDEwIEBAIGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcbiBcXHRcXHR1c2FibGVfY2hhbm5lbHMrKztcXG4gXFxuK1xcdFxcdC8qIE5vLWV2YWN1YXRlIGNoYW5uZWwgaXMgdXNhYmxlIGJ1dCBjYW5ub3QgYmUgZXZhY3VhdGVkICovXFxuK1xcdFxcdGlmIChjaGFuLVxcdTAwM2Vub19ldmFjdWF0ZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRjaGFuX2N0eCA9IGNvbnRhaW5lcl9vZihjaGFuLVxcdTAwM2VjaGFuY3R4X2NvbmYsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcXG5AQCAtMzI1LDYgKzMyNSw0MSBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkubXR4KTtcXG4rXFxuK1xcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgYWxsb3cgdXBkYXRpbmcgdGhlIG5vbi1ldmFjdWFibGUgY2hhbm5lbHMgd2hpbGUgYSBkZWZlcnJlZFxcbitcXHQgKiBzY2hlZHVsZSB1cGRhdGUgaXMgcGVuZGluZywgYXMgdGhlIHNldCBvZiBjaGFubmVscyBtYXkgc3RpbGwgY2hhbmdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHdkZXYtXFx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0LyogQWxsIHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLiAqL1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIGNoYW5uZWxzLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcXG4rXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyB3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqKyspIHtcXG4rXFx0XFx0XFx0aWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKFxcdTAwMjZ3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjaGFubmVscy1cXHUwMDNlY2hhbmRlZnNbaV0pKSB7XFxuK1xcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFmb3VuZClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xcbit9XFxuK1xcbiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXFxuaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbkBAIC01NjUsNiArNTY1LDEwIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCk7XFxuIFxcbitpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpO1xcbitcXG4gc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXFxuIGNmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHQgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbmluZGV4IGU1ODVkYTFkNzljOWUuLmY0NDAzNmFkNDNmYjUgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5AQCAtMTc3NjMsNiArMTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50XFxuK25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpjaGFubmVsLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKipjaGFubmVsX3BhcnNlZCBfX2ZyZWUoa2ZyZWUpID1cXG4rXFx0XFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICsgMSwgc2l6ZW9mKCpjaGFubmVsX3BhcnNlZCksXFxuK1xcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFjaGFubmVsX3BhcnNlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGNoYW5uZWxfcGFyc2VkLCBOTDgwMjExX0FUVFJfTUFYLCBjaGFubmVsLCBOVUxMLFxcbitcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBjaGFubmVsX3BhcnNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBjaGFuZGVmLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4rXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbitcXHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmNoYW5uZWw7XFxuK1xcbitcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXFxuK1xcdFxcdHJldHVybiAtRU5PVENPTk47XFxuK1xcbitcXHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXFxuK1xcdG5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsXFxuK1xcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcXG4rXFx0XFx0bl9jaGFubmVscysrO1xcbitcXG4rXFx0c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMgX19mcmVlKGtmcmVlKSA9XFxuK1xcdFxcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcXG4rXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghY2hhbm5lbHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Y2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzO1xcbitcXG4rXFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcXG4rXFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZW5saGRyLCBHRU5MX0hEUkxFTiwgcmVtKSB7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbm5lbHMtXFx1MDAzZWNoYW5kZWZzW2ldKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aSsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG5AQCAtMjA2MTksNiArMjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbiBcXHRcXHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXFxuIFxcdFxcdC5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyxcXG4rXFx0XFx0LmRvaXQgPSBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMsXFxuK1xcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG4rXFx0XFx0LmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcXG5pbmRleCA0Njg0OWZlOGQwYjM5Li4yNjkyNThjOTRhNDJhIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcXG5AQCAtMTA5Myw2ICsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnRcXG4rcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dHJhY2VfcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgY2hhbm5lbHMpO1xcbitcXHRpZiAocmRldi1cXHUwMDNlb3BzLVxcdTAwM2VuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKVxcbitcXHRcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjaGFubmVscyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfc3RhcnRfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcXG5pbmRleCA4YzJhOTFiODVjMzk2Li40MzVkYzU4Y2FmYmVkIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy90cmFjZS5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcXG5AQCAtMjQ4Myw2ICsyNDgzLDMxIEBAIFRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkLFxcbiBcXHQpXFxuICk7XFxuIFxcbitUUkFDRV9FVkVOVChyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMsXFxuK1xcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksXFxuK1xcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSxcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0V0lQSFlfRU5UUllcXG4rXFx0XFx0V0RFVl9FTlRSWVxcbitcXHRcXHRfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKVxcbitcXHRcXHRfX2R5bmFtaWNfYXJyYXkodTMyLCBmcmVxcywgY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHMpXFxuK1xcdCksXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHR1MzIgKmZyZXFzID0gX19nZXRfZHluYW1pY19hcnJheShmcmVxcyk7XFxuK1xcbitcXHRcXHRXSVBIWV9BU1NJR047XFxuK1xcdFxcdFdERVZfQVNTSUdOO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VuX2NoYW5uZWxzID0gY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHM7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHM7IGkrKylcXG4rXFx0XFx0XFx0ZnJlcXNbaV0gPSBjaGFubmVscy1cXHUwMDNlY2hhbmRlZnNbaV0uY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuK1xcdCksXFxuK1xcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXFxcIiwgXFxcIiBXREVWX1BSX0ZNVCBcXFwiLCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzXFxcIixcXG4rXFx0XFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVxcdTAwM2VuX2NoYW5uZWxzLFxcbitcXHRcXHQgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksXFxuK1xcdFxcdFxcdFxcdF9fZW50cnktXFx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZih1MzIpKSlcXG4rKTtcXG4rXFxuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X21hY19hY2wsXFxuIFxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfYWNsX2RhdGEgKnBhcmFtcyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE4OjQyLjY1OTM5NDcwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDMzODQxNzc3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwibmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsXCIsXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzE5YTJhYWMxZDczOTI5ZDZiYWEwNTdiODFhOWU5ZGZlNGNjN2M3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCA2NDYxYTdiZDAxNjlkLi41OWQ3NmEwZGFmMmNiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTQyNTYsNiArNDI1NiwyMSBAQCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9uYW5fY2hhbm5lbCBuYW5fY2hhbm5lbHNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzIC0gTkFOIG5vbi1ldmFjdWFibGUgY2hhbm5lbHNcbisgKlxuKyAqIFRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHNldCBvZiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgdGhhdCBtdXN0IG5vdFxuKyAqIGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLlxuKyAqXG4rICogQG5fY2hhbm5lbHM6IG51bWJlciBvZiBjaGFubmVsIGRlZmluaXRpb25zIGluICVjaGFuZGVmcy5cbisgKiBAY2hhbmRlZnM6IGFycmF5IG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIEVhY2hcbisgKlx0bXVzdCBtYXRjaCBhIGNoYW5uZWwgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuXG4rICovXG4rc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyB7XG4rXHR1OCBuX2NoYW5uZWxzO1xuK1x0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWZzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpO1xuK307XG4rXG4gLyoqXG4gICogc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX21hcCAtIE5BTiBwZWVyIHNjaGVkdWxlIG1hcFxuICAqXG5AQCAtNTIwNCw2ICs1MjE5LDEyIEBAIHN0cnVjdCBtZ210X2ZyYW1lX3JlZ3Mge1xuICAqXHRzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3RcbiAgKlx0c3VwcG9ydGVkLCBhbmQgdGhlIG5ldyBzY2hlZHVsZSBjb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUuXG4gICpcbisgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXRcbisgKlx0bXVzdCBub3QgYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBwcm92aWRlZCBsaXN0XG4rICpcdHJlcGxhY2VzIHRoZSBwcmV2aW91cyBzZXQ7IGNoYW5uZWxzIG9mIHRoZSBjdXJyZW50IHNjaGVkdWxlIHRoYXQgYXJlXG4rICpcdG5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlXG4rICpcdGd1YXJhbnRlZWQgYnkgY2ZnODAyMTEgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxuKyAqXG4gICogQHNldF9tdWx0aWNhc3RfdG9fdW5pY2FzdDogY29uZmlndXJlIG11bHRpY2FzdCB0byB1bmljYXN0IGNvbnZlcnNpb24gZm9yIEJTU1xuICAqXG4gICogQGdldF90eHFfc3RhdHM6IEdldCBUWFEgc3RhdHMgZm9yIGludGVyZmFjZSBvciBwaHkuIElmIHdkZXYgaXMgJU5VTEwsIHRoaXNcbkBAIC01NTkwLDYgKzU2MTEsOSBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHtcbiBcdGludFx0KCpuYW5fc2V0X3BlZXJfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4rXHRpbnRcdCgqbmFuX3NldF9ub25fZXZhY19jaGFubmVscykoc3RydWN0IHdpcGh5ICp3aXBoeSxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiBcdGludFx0KCpzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgICAgY29uc3QgYm9vbCBlbmFibGVkKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuaW5kZXggN2JiNDYxODA2NWI2Ny4uMzNmZjAxOGMzM2VjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC05MjMsMTIgKzkyMywxNCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIHtcbiAgKiBAY2hhbm5lbF9lbnRyeTogdGhlIENoYW5uZWwgRW50cnkgYmxvYiBhcyBkZWZpbmVkIGluIFdpLUZpIEF3YXJlXG4gICpcdChUTSkgNC4wIHNwZWNpZmljYXRpb24gVGFibGUgMTAwIChDaGFubmVsIEVudHJ5IGZvcm1hdCBmb3IgdGhlIE5BTlxuICAqXHRBdmFpbGFiaWxpdHkgYXR0cmlidXRlKS5cbisgKiBAbm9fZXZhY3VhdGU6IGlmIHNldCwgdGhpcyBjaGFubmVsIG11c3Qgbm90IGJlIGV2YWN1YXRlZFxuICAqL1xuIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwge1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxO1xuIFx0dTggbmVlZGVkX3J4X2NoYWlucztcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7XG4gXHR1OCBjaGFubmVsX2VudHJ5WzZdO1xuK1x0Ym9vbCBub19ldmFjdWF0ZTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5pbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuQEAgLTEzODMsNiArMTM4MywxMyBAQFxuICAqXHRmcm9tIHRoZSBkZXZpY2UgdG8gcGVyZm9ybSBhbiBhbm5vdW5jZWQgc2NoZWR1bGUgdXBkYXRlLiBTZWVcbiAgKlx0JU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQgZm9yIG1vcmUgZGV0YWlscy5cbiAgKlx0SWYgbm90IHNldCwgdGhlIHNjaGVkdWxlIHNob3VsZCBiZSBhcHBsaWVkIGltbWVkaWF0ZWx5LlxuKyAqXHRTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuXG4rICpcdGV2YWN1YXRpb24sIGV2ZW4gaWYgaXQgcmVtb3ZlcyBjaGFubmVscyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXJrZWQgYXNcbisgKlx0bm9uLWV2YWN1YWJsZSB3aXRoICVOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLiBUaGVcbisgKlx0bm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOlxuKyAqXHRjaGFubmVscyB0aGF0IHJlbWFpbiBpbiB0aGUgbmV3IHNjaGVkdWxlIGtlZXAgdGhlaXIgbWFya2luZywgY2hhbm5lbHNcbisgKlx0dGhhdCBhcmUgcmVtb3ZlZCBzaW1wbHkgbG9zZSBpdCwgYW5kIG5ld2x5IGFkZGVkIGNoYW5uZWxzIGFyZVxuKyAqXHRldmFjdWFibGUgYnkgZGVmYXVsdC5cbiAgKiBATkw4MDIxMV9DTURfTkFOX1NDSEVEX1VQREFURV9ET05FOiBFdmVudCBzZW50IHRvIHVzZXIgc3BhY2UgdG8gbm90aWZ5IHRoYXRcbiAgKlx0YSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aFxuICAqXHQlTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCBhbmQgJU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQpXG5AQCAtMTQyNyw2ICsxNDM0LDI4IEBAXG4gICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieVxuICAqXHRpdHMgJU5MODAyMTFfQVRUUl9XREVWIGludGVyZmFjZS5cbiAgKlxuKyAqIEBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTOiBTZXQgdGhlIGxpc3Qgb2YgTkFOIGxvY2FsIHNjaGVkdWxlXG4rICpcdGNoYW5uZWxzIHRoYXQgbXVzdCBub3QgYmUgZXZhY3VhdGVkLiBOQU4gbXVzdCBiZSBvcGVyYXRpb25hbFxuKyAqXHQoJU5MODAyMTFfQ01EX1NUQVJUX05BTiB3YXMgZXhlY3V0ZWQpIGFuZCBhIGxvY2FsIHNjaGVkdWxlIG11c3QgaGF2ZVxuKyAqXHRiZWVuIHNldCAoJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpLiBUaGUgY29tbWFuZCBjYXJyaWVzIHplcm9cbisgKlx0b3IgbW9yZSBuZXN0ZWQgJU5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCBhdHRyaWJ1dGVzLCBlYWNoIGlkZW50aWZ5aW5nIGFcbisgKlx0Y2hhbm5lbCAoYnkgaXRzIGNoYW5uZWwgZGVmaW5pdGlvbikgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgdGhhdFxuKyAqXHRtdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3RcbisgKlx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldCBvZiBub24tZXZhY3VhYmxlIGNoYW5uZWxzOyBjaGFubmVscyBvZiB0aGVcbisgKlx0Y3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsXG4rICpcdHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUsIG90aGVyd2lzZVxuKyAqXHR0aGUgY29tbWFuZCBmYWlscy4gVGhpcyBpcyB1c2VkIHRvIHByb3RlY3QgY2hhbm5lbHMgY2FycnlpbmcgTkRDIG9yXG4rICpcdGltbXV0YWJsZSBzY2hlZHVsZXMsIHdob3NlIGV2YWN1YXRpb24gd291bGQgYnJlYWsgZXhpc3RpbmcgTkRQXG4rICpcdGNvbm5lY3Rpb25zLlxuKyAqXHRUaGUgbm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnRcbisgKlx0bG9jYWwgc2NoZWR1bGUgYW5kIG9ubHkgYWZmZWN0cyBldmFjdWF0aW9uIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnM7XG4rICpcdGl0IGRvZXMgbm90IHByZXZlbnQgdGhlIHNjaGVkdWxlIGl0c2VsZiBmcm9tIGJlaW5nIGNoYW5nZWQuIFJlbW92aW5nIGFcbisgKlx0Y2hhbm5lbCBmcm9tIHRoZSBzY2hlZHVsZSB3aXRoICVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGlzIGFcbisgKlx0dXNlci1pbml0aWF0ZWQgY2hhbmdlLCBub3QgYW4gZXZhY3VhdGlvbiwgYW5kIGlzIGFsbG93ZWQgZXZlbiBmb3IgYVxuKyAqXHRub24tZXZhY3VhYmxlIGNoYW5uZWwuIEFjcm9zcyBhIHNjaGVkdWxlIHVwZGF0ZSwgY2hhbm5lbHMgdGhhdCByZW1haW5cbisgKlx0a2VlcCB0aGVpciBub24tZXZhY3VhYmxlIG1hcmtpbmcsIHJlbW92ZWQgY2hhbm5lbHMgbG9zZSBpdCwgYW5kIG5ld2x5XG4rICpcdGFkZGVkIGNoYW5uZWxzIGFyZSBldmFjdWFibGUgYnkgZGVmYXVsdDsgaXNzdWUgdGhpcyBjb21tYW5kIGFnYWluIHRvXG4rICpcdGNoYW5nZSB0aGUgbm9uLWV2YWN1YWJsZSBzZXQuXG4gICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyXG4gICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG4gICovXG5AQCAtMTcwNSw2ICsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHtcbiBcdE5MODAyMTFfQ01EX1NUQVJUX1BELFxuIFx0Tkw4MDIxMV9DTURfU1RPUF9QRCxcbiBcbitcdE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsXG4rXG4gXHQvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi9cbiBcbiBcdC8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqL1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuaW5kZXggMjNmNGY5ZWM4NmQwYS4uY2RjZjFmMDU3NzA3NyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9jZmcuY1xuKysrIGIvbmV0L21hYzgwMjExL2NmZy5jXG5AQCAtNTk3Myw2ICs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdHJldHVybiBpZWVlODAyMTFfbmFuX3NldF9wZWVyX3NjaGVkKHNkYXRhLCBzY2hlZCk7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbitpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfV0RFVl9UT19TVUJfSUYod2Rldik7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF93aXBoeSh3aXBoeSk7XG4rXG4rXHRyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xuIFx0LmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLFxuIFx0LmRlbF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfZGVsX2lmYWNlLFxuQEAgLTYwOTEsNCArNjEwMyw1IEBAIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbiBcdC5zZXRfZXBjcyA9IGllZWU4MDIxMV9zZXRfZXBjcyxcbiBcdC5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsXG4gXHQubmFuX3NldF9wZWVyX3NjaGVkID0gaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZCxcbitcdC5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzID0gaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1M2IwYjA4ZDM0NTk3Li45MjlmYzg5MzBhMzVlIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjA4Nyw2ICsyMDg3LDggQEAgaW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCk7XG4gaW50IGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4raW50IGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7XG4gdm9pZCBpZWVlODAyMTFfbmFuX2ZyZWVfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4gdm9pZCBpZWVlODAyMTFfbmFuX3VwZGF0ZV9uZGlfY2FycmllcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpuZGlfc2RhdGEpO1xuIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKlxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9uYW4uYyBiL25ldC9tYWM4MDIxMS9uYW4uY1xuaW5kZXggMTllMDg2NjFiZTQzYS4uMzhiZDEwNTEyMWFjZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9uYW4uY1xuKysrIGIvbmV0L21hYzgwMjExL25hbi5jXG5AQCAtMjQ4LDYgKzI0OCwzNSBAQCBpZWVlODAyMTFfbmFuX2ZpbmRfZnJlZV9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK2ludFxuK2llZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnID0gXHUwMDI2c2RhdGEtXHUwMDNldmlmLmNmZy5uYW5fc2NoZWQ7XG4rXG4rXHQvKlxuK1x0ICogY2ZnODAyMTEgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBhbGwgcHJvdmlkZWQgY2hhbm5lbHMgYmVsb25nIHRvIHRoZVxuK1x0ICogY3VycmVudCBzY2hlZHVsZSwgc28ganVzdCBjbGVhciBhbGwgbm9uLWV2YWN1YWJsZSBmbGFncyBhbmQgc2V0IHRoZVxuK1x0ICogb25lcyBpbiB0aGUgbGlzdC5cbitcdCAqL1xuK1x0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzKTsgaisrKVxuK1x0XHRzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcbitcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzKTsgaisrKSB7XG4rXHRcdFx0aWYgKCFzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLmNoYW4pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2c2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3BlcixcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pKSB7XG4rXHRcdFx0XHRzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSB0cnVlO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbiB7XG5AQCAtNzg2LDYgKzgxNSwxMCBAQCBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFxuIFx0XHR1c2FibGVfY2hhbm5lbHMrKztcbiBcbitcdFx0LyogTm8tZXZhY3VhdGUgY2hhbm5lbCBpcyB1c2FibGUgYnV0IGNhbm5vdCBiZSBldmFjdWF0ZWQgKi9cbitcdFx0aWYgKGNoYW4tXHUwMDNlbm9fZXZhY3VhdGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdGNoYW5fY3R4ID0gY29udGFpbmVyX29mKGNoYW4tXHUwMDNlY2hhbmN0eF9jb25mLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHgsIGNvbmYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi4yZjQ2MjQzNzczZjk0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTMyNSw2ICszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuK1xuK1x0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiB8fCAhd2Rldl9ydW5uaW5nKHdkZXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBEb24ndCBhbGxvdyB1cGRhdGluZyB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscyB3aGlsZSBhIGRlZmVycmVkXG4rXHQgKiBzY2hlZHVsZSB1cGRhdGUgaXMgcGVuZGluZywgYXMgdGhlIHNldCBvZiBjaGFubmVscyBtYXkgc3RpbGwgY2hhbmdlLlxuK1x0ICovXG4rXHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdC8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi9cbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcbitcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1xuK1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2Mgd2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqKyspIHtcbitcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pKSB7XG4rXHRcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0aWYgKCFmb3VuZClcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcbitcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xuK31cbitcbiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmhcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmhcbkBAIC01NjUsNiArNTY1LDEwIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcbiBcbitpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7XG4rXG4gc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXG4gY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICp0bXAsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IGU1ODVkYTFkNzljOWUuLmY0NDAzNmFkNDNmYjUgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTc3NjMsNiArMTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcbiB9XG4gXG4rc3RhdGljIGludFxuK25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmNoYW5uZWwsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZilcbit7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqY2hhbm5lbF9wYXJzZWQgX19mcmVlKGtmcmVlKSA9XG4rXHRcdGtjYWxsb2MoTkw4MDIxMV9BVFRSX01BWCArIDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxuK1x0XHRcdEdGUF9LRVJORUwpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghY2hhbm5lbF9wYXJzZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbmxhX3BhcnNlX25lc3RlZChjaGFubmVsX3BhcnNlZCwgTkw4MDIxMV9BVFRSX01BWCwgY2hhbm5lbCwgTlVMTCxcbitcdFx0XHQgICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuK1x0XHRcdFx0ICAgICBjaGFuZGVmLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuK1x0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4rXHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XG4rXHRzdHJ1Y3QgbmxhdHRyICpjaGFubmVsO1xuK1xuK1x0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4rXHRcdHJldHVybiAtRU5PVENPTk47XG4rXG4rXHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4rXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxuK1x0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pXG4rXHRcdG5fY2hhbm5lbHMrKztcbitcbitcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzIF9fZnJlZShrZnJlZSkgPVxuK1x0XHRremFsbG9jKHN0cnVjdF9zaXplKGNoYW5uZWxzLCBjaGFuZGVmcywgbl9jaGFubmVscyksXG4rXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWNoYW5uZWxzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzO1xuK1xuK1x0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbitcdFx0XHRcdCBpbmZvLVx1MDAzZW5saGRyLCBHRU5MX0hEUkxFTiwgcmVtKSB7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdHJldCA9IG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChyZGV2LCBjaGFubmVsLCBpbmZvLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGkrKztcbitcdH1cbitcbitcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHJkZXYsIHdkZXYsIGNoYW5uZWxzKTtcbit9XG4rXG4gc3RhdGljIGludCBubDgwMjExX2dldF9wcm90b2NvbF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjA2MTksNiArMjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xuIFx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4gXHRcdC5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5jbWQgPSBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLFxuK1x0XHQuZG9pdCA9IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyxcbitcdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuK1x0XHQuaW50ZXJuYWxfZmxhZ3MgPSBJRkxBR1MoTkw4MDIxMV9GTEFHX05FRURfV0RFVl9VUCksXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNDY4NDlmZThkMGIzOS4uMjY5MjU4Yzk0YTQyYSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTEwOTMsNiArMTA5MywyMyBAQCByZGV2X25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludFxuK3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHR0cmFjZV9yZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgY2hhbm5lbHMpO1xuK1x0aWYgKHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpXG4rXHRcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldixcbitcdFx0XHRcdFx0XHRcdCAgIGNoYW5uZWxzKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4rXHR0cmFjZV9yZGV2X3JldHVybl9pbnQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfc3RhcnRfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3RyYWNlLmggYi9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuaW5kZXggOGMyYTkxYjg1YzM5Ni4uNDM1ZGM1OGNhZmJlZCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy90cmFjZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuQEAgLTI0ODMsNiArMjQ4MywzMSBAQCBUUkFDRV9FVkVOVChyZGV2X25hbl9zZXRfcGVlcl9zY2hlZCxcbiBcdClcbiApO1xuIFxuK1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyxcbitcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksXG4rXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBjaGFubmVscyksXG4rXHRUUF9TVFJVQ1RfX2VudHJ5KFxuK1x0XHRXSVBIWV9FTlRSWVxuK1x0XHRXREVWX0VOVFJZXG4rXHRcdF9fZmllbGQodTgsIG5fY2hhbm5lbHMpXG4rXHRcdF9fZHluYW1pY19hcnJheSh1MzIsIGZyZXFzLCBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzKVxuK1x0KSxcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHR1MzIgKmZyZXFzID0gX19nZXRfZHluYW1pY19hcnJheShmcmVxcyk7XG4rXG4rXHRcdFdJUEhZX0FTU0lHTjtcbitcdFx0V0RFVl9BU1NJR047XG4rXHRcdF9fZW50cnktXHUwMDNlbl9jaGFubmVscyA9IGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7XG4rXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpKyspXG4rXHRcdFx0ZnJlcXNbaV0gPSBjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXS5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuK1x0KSxcbitcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCIsIFwiIFdERVZfUFJfRk1UIFwiLCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzXCIsXG4rXHRcdCAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS1cdTAwM2VuX2NoYW5uZWxzLFxuK1x0XHQgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksXG4rXHRcdFx0XHRfX2VudHJ5LVx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZih1MzIpKSlcbispO1xuK1xuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X21hY19hY2wsXG4gXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHQgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDIuNjU5Mzk2OTMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI0NjUyMTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3Igc3l6a2FsbGVyLiBGcm9tIHRoZSBmaWxlIGxpc3QsIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBpbnRlcmVzdGluZyB0byBtZTpcblxuRmlyc3QsIGl0IHRvdWNoZXMgYGNmZzgwMjExYCBhbmQgYG1hYzgwMjExYCBoZWF2aWx5LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBOQU4gKE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nKS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIOKAkyBib3RoIGFyZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29tcG9uZW50cywgd2hpY2ggYXJlIG5vdG9yaW91cyBmb3IgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGJ1Z3MuIEknbSBzZWVpbmcgc3RydWN0dXJlcyBsaWtlIGBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgLCBjYWxsYmFja3MsIGFuZCBgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMU2AuIFRoaXMgYE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFNgIGlzIGtleSBiZWNhdXNlIG5ldGxpbmsgaW50ZXJmYWNlcyBhcmUgcHJpbWUgc3l6a2FsbGVyIHRhcmdldHMuXG5cblRoZSBwcmVzZW5jZSBvZiBgbWFjODAyMTFfaHdzaW1gIGlzIGludHJpZ3VpbmcuIFRoYXQgdmlydHVhbCBXaUZpIGRyaXZlciBpcyBjcnVjaWFsIGZvciBzeXprYWxsZXIuIElmIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggYG1hYzgwMjExX2h3c2ltYCwgdGhlbiB3ZSdyZSBpbiBsdWNrIGJlY2F1c2Ugd2UgY2FuIHJlYWRpbHkgdGVzdCBpdCB3aXRob3V0IG5lZWRpbmcgcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydHMgTkFOLCBvciBpZiBtYWM4MDIxMSBldmVuIHN1cHBvcnRzIHRob3NlIE5BTiBjb21tYW5kcyB2aWEgbmw4MDIxMS4gSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYW55IHJlbGV2YW50IEtjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbWFrZSB0aGlzIGNvZGUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBvdGhlcndpc2Ugbm90IHJlYWNoYWJsZS5cblxuVGhlIGZhY3QgdGhhdCBgbmw4MDIxMWAgaXMgYWxzbyBpbnZvbHZlZCBpcyBhIGJpZyBwbHVzLiBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCBgbmw4MDIxMWAsIHNvIGdldHRpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkIHRocm91Z2ggdGhhdCBpbnRlcmZhY2UgaXMgYSBnb29kIHNpZ24uIFRoZSBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYCBhbmQgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgZnVuY3Rpb25zIGxvb2sgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5UbyBxdWlja2x5IGFzc2VzcyByZWFjaGFiaWxpdHksIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZG8gc29tZSBncmVwcyBvbiB0aGUga2VybmVsIHNvdXJjZSB0byBpZGVudGlmeSBjYWxsIHNpdGVzIGFuZCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDcuOTA1OTIxNTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzMzNTg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMy1vYmoteSArPSB0ZXN0cy9cXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xMj1jZmc4MDIxMS0kKENPTkZJR19PRikgKz0gb2Yub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxMzpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTQ6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE1LVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNy1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTg6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSArPSBzaGlwcGVkLWNlcnRzLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTk6aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICs9IGV4dHJhLWNlcnRzLm9cXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0yMz0kKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxcbi0tXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZTozMjokKG9iaikvZXh0cmEtY2VydHMuYzogJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSBcXFxcXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMzOlxcdFxcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMzQtXFx0QCQoa2VjaG8pIFxcXCIgIEdFTiAgICAgJEBcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDItXFxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNzAzOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSKSB8fFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTcwNC1cXHQgICAgISh3aXBoeS1cXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9NTg0PXN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02NzEtXFx0XFx0XFx0ICBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmspO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjcyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjczLVxcdHJkZXYtXFx1MDAzZXdpcGh5LndleHQgPSBcXHUwMDI2Y2ZnODAyMTFfd2V4dF9oYW5kbGVyO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02OTMtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzo2OTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02OTUtXFx0cmRldi1cXHUwMDNld2lwaHkuZmxhZ3MgfD0gV0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNDQzPXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ4My1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0ODQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDg1LVxcdGtmcmVlX3NlbnNpdGl2ZSh3ZGV2LVxcdTAwM2V3ZXh0LmtleXMpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNTM4PXZvaWQgY2ZnODAyMTFfbGVhdmVfbG9ja2VkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTU2Mi1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE1NjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTY0LVxcdFxcdGtmcmVlKHdkZXYtXFx1MDAzZXdleHQuaWUpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjQ5PXZvaWQgY2ZnODAyMTFfaW5pdF93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2NTctXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjU4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTY1OS1cXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfa2V5ID0gLTE7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE3NDI9c3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xODE2LVxcdFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxODE3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgxOC1cXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01Nzg9Y2ZnODAyMTFfZ2V0XzZnaHpfcG93ZXJfdHlwZShjb25zdCB1OCAqZWxlbXMsIHNpemVfdCBlbGVtc19sZW4sXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4MC1cXG5uZXQvd2lyZWxlc3MvY29yZS5oOjU4MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTgyLSNkZWZpbmUgQ0ZHODAyMTFfREVWX1dBUk5fT04oY29uZClcXHRXQVJOX09OKGNvbmQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTYyOD1zdHJ1Y3QgY2ZnODAyMTFfY29sb2NhdGVkX2FwIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ0LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ2LSNkZWZpbmUgRVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChzeW0pIEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc3ltKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD02NTM9c2l6ZV90IGNmZzgwMjExX2dlbl9uZXdfaWUoY29uc3QgdTggKmllLCBzaXplX3QgaWVsZW4sXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY1OC0jZGVmaW5lIFZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVQgc3RhdGljXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTk6I2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICovXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NjAtXFxuLS1cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTQtXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgtNi12b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6NTI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0Mi1cXHR3ZGV2LVxcdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cXHUwMDNlY2hhbmRlZjtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVxcdG1lbXNldChcXHUwMDI2d2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVxcdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTg1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVxcdGlmICghbm93ZXh0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTMtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjgyLVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjg0LVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ2Nz1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA5LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUxMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MTEtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MzItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTMzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzNC1cXHRcXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjQ1PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2OTEtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjkyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5My1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgxNz1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODU4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA4NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODYwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSByZWdfcnVsZV9wb2xpY3lbTkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDkxMD1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDk4OC19XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDk4OTojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5OTAtXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5ODA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5ODItXFx0fSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTk4NC1cXHR7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzNDg4PXZvaWQgY2ZnODAyMTFfc2NoZWR1bGVfY2hhbm5lbHNfY2hlY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0OTUtXFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0RGU19DT05DVVJSRU5UKSB8fFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0OTY6XFx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQ5Ny1cXHQgICAgIHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz00OTc9c3RhdGljIGludCByZWdfc2NoZWR1bGVfYXBwbHkoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2RvbSlcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy01MTYtXFxubmV0L3dpcmVsZXNzL3JlZy5jOjUxNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9yZWcuYy01MTgtLyogTWF4IG51bWJlciBvZiBjb25zZWN1dGl2ZSBhdHRlbXB0cyB0byBjb21tdW5pY2F0ZSB3aXRoIENSREEgICovXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NTg2PXN0YXRpYyBpbmxpbmUgaW50IGNhbGxfY3JkYShjb25zdCBjaGFyICphbHBoYTIpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTg5LX1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NTkwOiNlbmRpZiAvKiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUICovXFxubmV0L3dpcmVsZXNzL3JlZy5jLTU5MS1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz02OTc9c3RhdGljIGJvb2wgdmFsaWRfY291bnRyeShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzI5LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo3MzA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9yZWcuYy03MzEtI2luY2x1ZGUgXFx1MDAzY2tleXMvYXN5bW1ldHJpYy10eXBlLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NzM1PXN0YXRpYyBpbnQgX19pbml0IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ3LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo3NDg6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ5LVxcdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KHNoaXBwZWRfcmVnZGJfY2VydHMsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzUyLSNlbmRpZlxcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzU0OlxcdGlmIChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSWzBdICE9ICdcXFxcMCcpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc1NS1cXHRcXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChleHRyYV9yZWdkYl9jZXJ0cyxcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz03OTg9c3RhdGljIHZvaWQgZnJlZV9yZWdkYl9rZXlyaW5nKHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAwLX1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6ODAxOiNlbmRpZiAvKiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREIgKi9cXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAyLVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTIwMzg9Ym9vbCByZWdfbGFzdF9yZXF1ZXN0X2NlbGxfYmFzZSh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDItXFxubmV0L3dpcmVsZXNzL3JlZy5jOjIwNDM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjA0NC0vKiBDb3JlIHNwZWNpZmljIGNoZWNrICovXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTExMTc9dm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTIyLVxcdHN0cnVjdCBza19idWZmICptc2c7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTIzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyNC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjUtXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTY2OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE2Ny1cXHRpZiAod2Rldi1cXHUwMDNlbmV0ZGV2IFxcdTAwMjZcXHUwMDI2ICFyZXF1ZXN0LVxcdTAwM2VpbmZvLmFib3J0ZWQpIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM9MzQ0Mz12b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzUxNi1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTE4LXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKlxcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jPTczNT12b2lkIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy03NDMtXFx0dTggY291bnRyeV9kYXRhbGVuO1xcbm5ldC93aXJlbGVzcy9zbWUuYzo3NDQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc0NS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzc0LVxcbm5ldC93aXJlbGVzcy9zbWUuYzo3NzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3Ni1cXHRpZiAod2V4dGV2IFxcdTAwMjZcXHUwMDI2ICFjci1cXHUwMDNldmFsaWRfbGlua3MpIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYz0xMDc5PXZvaWQgX19jZmc4MDIxMV9yb2FtZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgxLXtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTA4MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4My1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTEzNC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTEzNTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTEzNi1cXHRpZiAoIWluZm8tXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9MTM0Mz12b2lkIF9fY2ZnODAyMTFfZGlzY29ubmVjdGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICppZSxcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzQ4LVxcdGludCBpO1xcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzUwLVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk0LVxcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzk1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk2LVxcdG1lbXNldChcXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcXG4tLVxcbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZT0xPWNmZzgwMjExLXRlc3RzLXkgKz0gbW9kdWxlLm8gZnJhZ21lbnRhdGlvbi5vIHNjYW4ubyB1dGlsLm8gY2hhbi5vXFxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlLTItXFxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICs9IGNmZzgwMjExLXRlc3RzLm9cXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjM4LVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYzo2Mzk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02NDk9c3RydWN0IGl3X3N0YXRpc3RpY3MgKmdldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY1Ni1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjU3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXFx0aWYgKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nj1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwMS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDMtXFx0aWYgKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5KSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM9Mjg9c3RhdGljIHZvaWQgd2lyZWxlc3Nfc2VxX3ByaW50Zl9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXByb2MuYy00MC0jZW5kaWZcXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM6NDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMVxcbm5ldC93aXJlbGVzcy93ZXh0LXByb2MuYy00Mi1cXHRcXHRpZiAoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo0OC4wNzMyNjMwMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ4NzA3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgTUFDODAyMTEgYW5kIENGRzgwMjExKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBmZWVscyBvZmYgd2l0aCB0aGUgTUFDODAyMTEgYW5kIENGRzgwMjExIHNldHVwLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCwgd2hpY2ggb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scywgdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyB0aGV5IGhhdmUgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtIG9yIGV2ZW4gdGhlIGtlcm5lbCBhcyBhIHdob2xlLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdW51c3VhbCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gYSBjb25maWd1cmF0aW9uIGlzc3VlIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQgcmVjZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDkuOTIxOTczNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTAxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMXxjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1MC4xMDY0ODExN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODU1MzM4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgODAyLjExIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWFjODAyMTEgc3Vic3lzdGVtIGxpdmUsIHNvIGl0J3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQgYW55IGludmVzdGlnYXRpb24gb3IgbW9kaWZpY2F0aW9uIHJlbGF0ZWQgdG8gaXRzIGNvbmZpZ3VyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgdmFyaWFibGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0cyB0aGF0IG1pZ2h0IGluZm9ybSB0aGUgbmV4dCBzdGVwcy4gSXQncyB0aW1lIHRvIHNpZnQgdGhyb3VnaCB0aGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1MS45OTIwMTg3MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjE2NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1Mi4xNjMyNDI2MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzM0ODE4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gbWFjODAyMTFfaHdzaW0gYW5kIE5BTioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgbWFjODAyMTFfaHdzaW1gIGFuZCBOQU4sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIGl0J3MgY29ycmVjdGx5IGhhbmRsaW5nIHRoZXNlIGZlYXR1cmVzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgcmVsaWVzIG9uIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoYXQncyBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgLm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGxpbmtzIHRvIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AsIGlzIGJlaW5nIGhhbmRsZWQuIElzIGl0IGJlaW5nIHNldCBjb3JyZWN0bHk/IElzIGl0IGJlaW5nIGNhbGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZXM/IEnigJlsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgTkFOIG5vbi1ldmFjdWF0aW9uIGNoYW5uZWxzIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYG1hYzgwMjExX2h3c2ltYCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBhbmQgaG93IGBtYWM4MDIxMWAgdXNlcyB0aGUgYG1hYzgwMjExX2NvbmZpZ19vcHNgIGluIGdlbmVyYWwuIElzIGBod3NpbWAgb3IgYGNmZzgwMjExYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGRzPyBUaGlzIGlzIHNvbWV0aGluZyBJIHNob3VsZCBhbHNvIGJlYXIgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NTQuODk4MDYzNzg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM1ODA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWM4MDIxMV9jb25maWdfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nz1pZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU5ODctXFxubmV0L21hYzgwMjExL2NmZy5jOjU5ODg6Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTg5LVxcdC5hZGRfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2FkZF9pZmFjZSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTM4LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjM5OmV4dGVybiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHM7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtNDAtXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTc5Mz1zdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTg1Mi1cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjg1MzpcXHR3aXBoeSA9IHdpcGh5X25ld19ubShcXHUwMDI2bWFjODAyMTFfY29uZmlnX29wcywgcHJpdl9zaXplLCByZXF1ZXN0ZWRfbmFtZSk7XFxubmV0L21hYzgwMjExL21haW4uYy04NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE4OjU0Ljk5NzQyODE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTExMDA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIG1hYzgwMjExIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWFjODAyMTFfY29uZmlnX29wc2AuLi4gdGhhdCdzIHRoZSBzaGFyZWQgb3BlcmF0aW9uYWwgc3RydWN0dXJlIHVzZWQgYWNyb3NzICphbGwqIHRoZSBtYWM4MDIxMSBkcml2ZXJzLiAgVGhhdCBtZWFucyBpdCdzIGZ1bmRhbWVudGFsLiBBbmQgSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgbGV2ZXJhZ2VzIGl0IHRvbywgbmF0dXJhbGx5LiBOb3csIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucy4gTGV0J3MgZ2V0IHRoYXQgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgc2V0dGluZyBhbmQgc2VlIHdoYXQncyB3aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBhbmQgYmVoYXZpb3Igb2YgdGhlIGhhcmR3YXJlIHNpbXVsYXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1Ni45NDg1MzI4ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU5NjUxOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NTguMDg0NTAzOTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTMwODA1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIFZpcnR1YWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBkcml2ZXIuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQncyB0aGUgZmlyc3Qgc3RvcCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgd2lyZWxlc3MgbGFuZHNjYXBlIGFuZCB3aGF0J3MgY29uZmlndXJhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1OS45OTc1ODc2NzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1OS45OTc3MDY1NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4MjEzNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTkFOIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgTkFOLCBzcGVjaWZpY2FsbHkgdGhlIGV2YWN1YXRpb24gY2hhbm5lbCBsb2dpYy4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgbWFjODAyMTFgIGNvZGUgYmFzZS4gTXkgZmlyc3Qgc3RlcCBpcyBhIGNvZGUgcmV2aWV3IG9mIGBubDgwMjExLmNgLCBgY29yZS5jYCwgYW5kIGBuYW4uY2AuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZpbGVzIGludGVyYWN0IGFuZCB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub24tZXZhY3VhdGlvbiBjaGFubmVscyBhcmUgbWFuYWdlZC4gSSdsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgLCBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGFuZCBgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cbkknbGwgc3RhcnQgd2l0aCBgbmw4MDIxMS5jYCwgYW5kIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTc3NjMgYXMgYSBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzIHdpbGwgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDIuNDc5ODQ1ODUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDA3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzc2MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc3NjA6XFx0XFx0XFx0XFx0bmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKTtcXG4xNzc2MTpcXHRcXHR9XFxuMTc3NjI6XFx0XFxuMTc3NjM6XFx0XFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xcbjE3NzY0OlxcdH1cXG4xNzc2NTpcXHRcXG4xNzc2NjpcXHRzdGF0aWMgaW50XFxuMTc3Njc6XFx0bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4xNzc2ODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4xNzc2OTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxcbjE3NzcwOlxcdHtcXG4xNzc3MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqY2hhbm5lbF9wYXJzZWQgX19mcmVlKGtmcmVlKSA9XFxuMTc3NzI6XFx0XFx0XFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICsgMSwgc2l6ZW9mKCpjaGFubmVsX3BhcnNlZCksXFxuMTc3NzM6XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuMTc3NzQ6XFx0XFx0aW50IHJldDtcXG4xNzc3NTpcXHRcXG4xNzc3NjpcXHRcXHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxcbjE3Nzc3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3Nzc4OlxcdFxcbjE3Nzc5OlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXFxuMTc3ODA6XFx0XFx0XFx0XFx0ICAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTc3ODE6XFx0XFx0aWYgKHJldClcXG4xNzc4MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3NzgzOlxcdFxcbjE3Nzg0OlxcdFxcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBjaGFubmVsX3BhcnNlZCxcXG4xNzc4NTpcXHRcXHRcXHRcXHRcXHQgICAgIGNoYW5kZWYsIGZhbHNlKTtcXG4xNzc4NjpcXHR9XFxuMTc3ODc6XFx0XFxuMTc3ODg6XFx0c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNzc4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTc3OTA6XFx0e1xcbjE3NzkxOlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbjE3NzkyOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xNzc5MzpcXHRcXHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XFxuMTc3OTQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcXG4xNzc5NTpcXHRcXG4xNzc5NjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcXG4xNzc5NzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc3OTg6XFx0XFxuMTc3OTk6XFx0XFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXFxuMTc4MDA6XFx0XFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4xNzgwMTpcXHRcXG4xNzgwMjpcXHRcXHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXFxuMTc4MDM6XFx0XFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcXG4xNzgwNDpcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pXFxuMTc4MDU6XFx0XFx0XFx0bl9jaGFubmVscysrO1xcbjE3ODA2OlxcdFxcbjE3ODA3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzIF9fZnJlZShrZnJlZSkgPVxcbjE3ODA4OlxcdFxcdFxcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcXG4xNzgwOTpcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4xNzgxMDpcXHRcXHRpZiAoIWNoYW5uZWxzKVxcbjE3ODExOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3ODEyOlxcdFxcbjE3ODEzOlxcdFxcdGNoYW5uZWxzLVxcdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcXG4xNzgxNDpcXHRcXG4xNzgxNTpcXHRcXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxcbjE3ODE2OlxcdFxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xcbjE3ODE3OlxcdFxcdFxcdGludCByZXQ7XFxuMTc4MTg6XFx0XFxuMTc4MTk6XFx0XFx0XFx0cmV0ID0gbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHJkZXYsIGNoYW5uZWwsIGluZm8sXFxuMTc4MjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbm5lbHMtXFx1MDAzZWNoYW5kZWZzW2ldKTtcXG4xNzgyMTpcXHRcXHRcXHRpZiAocmV0KVxcbjE3ODIyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc4MjM6XFx0XFx0XFx0aSsrO1xcbjE3ODI0OlxcdFxcdH1cXG4xNzgyNTpcXHRcXG4xNzgyNjpcXHRcXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XFxuMTc4Mjc6XFx0fVxcbjE3ODI4OlxcdFxcbjE3ODI5OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNzgzMDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xNzgzMTpcXHR7XFxuMTc4MzI6XFx0XFx0dm9pZCAqaGRyO1xcbjE3ODMzOlxcdFxcdHN0cnVjdCBza19idWZmICptc2c7XFxuMTc4MzQ6XFx0XFxuMTc4MzU6XFx0XFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XFxuMTc4MzY6XFx0XFx0aWYgKCFtc2cpXFxuMTc4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc4Mzg6XFx0XFxuMTc4Mzk6XFx0XFx0aGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLCAwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTowMi40ODE0OTE0ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0MTY1NTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gV2lyZWxlc3MgQ29yZSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBuZXQvd2lyZWxlc3MvY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzMjAgdG8gMzcwLiBUaGF0IHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggc29tZSBjcml0aWNhbCwgZm91bmRhdGlvbmFsIGFzcGVjdHMgb2YgdGhlIHdpcmVsZXNzIGNvcmUg4oCTIHByb2JhYmx5IHRoZSBpbml0aWFsaXphdGlvbiwgcmVnaXN0cmF0aW9uLCBvciBoYW5kbGluZyBvZiBzb21lIGNvcmUgd2lyZWxlc3Mgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhvc2UgY29tcG9uZW50cy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgY29yZSBvZiBzb21lIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBvciB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbW9zdCBiYXNpYyB3aXJlbGVzcyBmdW5jdGlvbnMuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gcmVndWxhdG9yeSBoYW5kbGluZyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiwgb3IgZXZlbiBzb21lIGFzcGVjdHMgb2YgbmV0IGRldmljZSBpbnRlZ3JhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIGJhc2ljLCBsaWtlIGEgbXV0ZXggaW5pdCwgb3IgaWYgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDQuNTIzMTUwMzExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspXFxuIDMyMTpcXHRcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLVxcdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzI2OlxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0aW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAzMjk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXFxuIDMzMTpcXHR7XFxuIDMzMjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5tdHgpO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiB8fCAhd2Rldl9ydW5uaW5nKHdkZXYpKVxcbiAzMzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qXFxuIDMzODpcXHRcXHQgKiBEb24ndCBhbGxvdyB1cGRhdGluZyB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscyB3aGlsZSBhIGRlZmVycmVkXFxuIDMzOTpcXHRcXHQgKiBzY2hlZHVsZSB1cGRhdGUgaXMgcGVuZGluZywgYXMgdGhlIHNldCBvZiBjaGFubmVscyBtYXkgc3RpbGwgY2hhbmdlLlxcbiAzNDA6XFx0XFx0ICovXFxuIDM0MTpcXHRcXHRpZiAod2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcpXFxuIDM0MjpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHQvKiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgbXVzdCBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuICovXFxuIDM0NTpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIGNoYW5uZWxzLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcXG4gMzQ2OlxcdFxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyB3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqKyspIHtcXG4gMzQ5OlxcdFxcdFxcdFxcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2lkZW50aWNhbChcXHUwMDI2d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnNbal0sXFxuIDM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNoYW5uZWxzLVxcdTAwM2VjaGFuZGVmc1tpXSkpIHtcXG4gMzUxOlxcdFxcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4gMzUyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNTM6XFx0XFx0XFx0XFx0fVxcbiAzNTQ6XFx0XFx0XFx0fVxcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRcXHRpZiAoIWZvdW5kKVxcbiAzNTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDM1ODpcXHRcXHR9XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xcbiAzNjE6XFx0fVxcbiAzNjI6XFx0XFxuIDM2MzpcXHR2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAzNjQ6XFx0XFx0XFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gMzY1OlxcdHtcXG4gMzY2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5Lm10eCk7XFxuIDM2NzpcXHRcXG4gMzY4OlxcdFxcdGlmIChXQVJOX09OKHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QRCkpXFxuIDM2OTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjA0LjUyMzQ0NzE0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM1NzA0MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTkFOIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTkFOIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgaXMgdW5kb3VidGVkbHkgYG5ldC9tYWM4MDIxMS9uYW4uY2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nIChOQU4pIHNob3VsZCBiZS4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAyNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDguNTU5MTU1MTQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL25hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqXFxuIDI0MTpcXHRpZWVlODAyMTFfbmFuX2ZpbmRfZnJlZV9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnKVxcbiAyNDI6XFx0e1xcbiAyNDM6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHMpOyBpKyspIHtcXG4gMjQ0OlxcdFxcdFxcdGlmICghc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVsc1tpXS5jaGFucmVxLm9wZXIuY2hhbilcXG4gMjQ1OlxcdFxcdFxcdFxcdHJldHVybiBcXHUwMDI2c2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVsc1tpXTtcXG4gMjQ2OlxcdFxcdH1cXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdGludFxcbiAyNTI6XFx0aWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIDI1MzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmLmNmZy5uYW5fc2NoZWQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qXFxuIDI1ODpcXHRcXHQgKiBjZmc4MDIxMSBhbHJlYWR5IHZhbGlkYXRlZCB0aGF0IGFsbCBwcm92aWRlZCBjaGFubmVscyBiZWxvbmcgdG8gdGhlXFxuIDI1OTpcXHRcXHQgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlXFxuIDI2MDpcXHRcXHQgKiBvbmVzIGluIHRoZSBsaXN0LlxcbiAyNjE6XFx0XFx0ICovXFxuIDI2MjpcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVscyk7IGorKylcXG4gMjYzOlxcdFxcdFxcdHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBjaGFubmVscy1cXHUwMDNlbl9jaGFubmVsczsgaSsrKSB7XFxuIDI2NjpcXHRcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVscyk7IGorKykge1xcbiAyNjc6XFx0XFx0XFx0XFx0aWYgKCFzY2hlZF9jZmctXFx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3Blci5jaGFuKVxcbiAyNjg6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI2OTpcXHRcXHRcXHRcXHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXFx1MDAyNnNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLFxcbiAyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjaGFubmVscy1cXHUwMDNlY2hhbmRlZnNbaV0pKSB7XFxuIDI3MTpcXHRcXHRcXHRcXHRcXHRzY2hlZF9jZmctXFx1MDAzZWNoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTtcXG4gMjcyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNzM6XFx0XFx0XFx0XFx0fVxcbiAyNzQ6XFx0XFx0XFx0fVxcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHRyZXR1cm4gMDtcXG4gMjc4OlxcdH1cXG4gMjc5OlxcdFxcbiAyODA6XFx0aW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiAyODE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcXG4gMjgyOlxcdHtcXG4gMjgzOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKnNjaGVkX2lkeF90b19jaGFuW0lFRUU4MDIxMV9OQU5fTUFYX0NIQU5ORUxTXSA9IHt9O1xcbiAyODQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xcbiAyODU6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpiYWNrdXBfc2NoZWQgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKCpiYWNrdXBfc2NoZWQpO1xcbiAyODY6XFx0XFx0aW50IHJldDtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0aWYgKCFiYWNrdXBfc2NoZWQpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDguNTYxNjE0NjY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDgxOTc1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5BTiBFdmFjdWF0aW9uIENoYW5uZWwgU2VhcmNoKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgTkFOIGNvZGUgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlIGhhbmRsZSBjaGFubmVsIGV2YWN1YXRpb24gaW4gdGhlIDgwMi4xMSBOQU4gc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAgZnVuY3Rpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyBpbiBgbmV0L21hYzgwMjExL25hbi5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGNvcmUgb2Ygd2hlcmUgdGhlIGNoYW5uZWwgc2VsZWN0aW9uIGxvZ2ljIGZvciBldmFjdWF0aW9uIHJlc2lkZXMuIEknbSBob3BpbmcgSSBjYW4gZWl0aGVyIGlkZW50aWZ5IHRoZSBleGFjdCBhbGdvcml0aG0gaW4gdXNlLCBvciBkZXRlcm1pbmUgdGhlIGlucHV0cyBpdCBsZXZlcmFnZXMuIE15IGd1ZXNzIGlzIGl0J3MgaGFuZGxpbmcgYSBsb3Qgb2YgdGhlIGNoYW5uZWwtaG9wcGluZyBhbmQgcG90ZW50aWFsbHkgZHluYW1pYyBjb25maWd1cmF0aW9uIHRoYXQncyBpbnZvbHZlZCwgYW5kIGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyBzb3BoaXN0aWNhdGVkIHRoZSBzZWxlY3Rpb24gaXMuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBjb25zaWRlcmF0aW9ucyBmb3IgaW50ZXJmZXJlbmNlIG1pdGlnYXRpb24sIHRocm91Z2hwdXQgb3B0aW1pemF0aW9uLCBhbmQgcGVyaGFwcyBldmVuIHBvd2VyIG1hbmFnZW1lbnQgaW4gdGhpcyBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjEwLjcwOTgxNjUwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL25hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdFxcdGlmIChXQVJOX09OKHNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pKVxcbiA4MDI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdHNjaGVkX2NmZyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmLmNmZy5uYW5fc2NoZWQ7XFxuIDgwNTpcXHRcXG4gODA2OlxcdFxcdC8qIEZpbmQgdGhlIGNoYW5uZWwgdG8gZXZhY3VhdGUgYW5kIGNvdW50IHVzYWJsZSBjaGFubmVscyAqL1xcbiA4MDc6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJRUVFODAyMTFfTkFOX01BWF9DSEFOTkVMUzsgaSsrKSB7XFxuIDgwODpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsICpjaGFuID1cXG4gODA5OlxcdFxcdFxcdFxcdFxcdTAwMjZzY2hlZF9jZmctXFx1MDAzZWNoYW5uZWxzW2ldO1xcbiA4MTA6XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4ICpjaGFuX2N0eDtcXG4gODExOlxcdFxcdFxcdGludCBzbG90X2NvdW50ID0gMDtcXG4gODEyOlxcdFxcbiA4MTM6XFx0XFx0XFx0aWYgKCFjaGFuLVxcdTAwM2VjaGFucmVxLm9wZXIuY2hhbiB8fCAhY2hhbi1cXHUwMDNlY2hhbmN0eF9jb25mKVxcbiA4MTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdFxcdHVzYWJsZV9jaGFubmVscysrO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRcXHQvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqL1xcbiA4MTk6XFx0XFx0XFx0aWYgKGNoYW4tXFx1MDAzZW5vX2V2YWN1YXRlKVxcbiA4MjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyMTpcXHRcXG4gODIyOlxcdFxcdFxcdGNoYW5fY3R4ID0gY29udGFpbmVyX29mKGNoYW4tXFx1MDAzZWNoYW5jdHhfY29uZixcXG4gODIzOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdFxcdC8qIElmIGN0eCBzcGVjaWZpZWQsIG9ubHkgY29uc2lkZXIgdGhhdCBzcGVjaWZpYyBjaGFuY3R4ICovXFxuIDgyNjpcXHRcXHRcXHRpZiAoY3R4KSB7XFxuIDgyNzpcXHRcXHRcXHRcXHRpZiAoY2hhbl9jdHggPT0gY3R4KVxcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0ZXZhY19jaGFuID0gY2hhbjtcXG4gODI5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MzA6XFx0XFx0XFx0fVxcbiA4MzE6XFx0XFxuIDgzMjpcXHRcXHRcXHQvKiBDYW4gb25seSBldmFjdWF0ZSBjaGFubmVscyB3aG9zZSBjaGFuY3R4IGlzIE5BTi1vbmx5ICovXFxuIDgzMzpcXHRcXHRcXHRpZiAoaWVlZTgwMjExX2NoYW5jdHhfcmVmY291bnQobG9jYWwsIGNoYW5fY3R4KSBcXHUwMDNlIDEpXFxuIDgzNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0XFx0LyogQ291bnQgaG93IG1hbnkgdGltZSBzbG90cyB1c2UgdGhpcyBjaGFubmVsICovXFxuIDgzNzpcXHRcXHRcXHRmb3IgKGludCBzID0gMDsgcyBcXHUwMDNjIENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUzsgcysrKVxcbiA4Mzg6XFx0XFx0XFx0XFx0aWYgKHNjaGVkX2NmZy1cXHUwMDNlc2NoZWR1bGVbc10gPT0gY2hhbilcXG4gODM5OlxcdFxcdFxcdFxcdFxcdHNsb3RfY291bnQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MTAuNzA5OTY5MDgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MzY2NzE2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBSYWRhciBpcyBCbGlua2luZyEqKlxuXG5Pa2F5LCB0aGlzIGxvb2tzICp2ZXJ5KiBwcm9taXNpbmcgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBpdC4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbmV3IGBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTYCBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciwgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IEknbSBsb29raW5nIGZvci4gV2hhdCBjYXRjaGVzIG15IGV5ZSBpbW1lZGlhdGVseSBhcmUgdGhlc2UgY3JpdGljYWwgZmFjdG9yczpcblxuKiAgICoqVXNlcnNwYWNlIEludGVyZmFjZToqKiBJdCdzIGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgc2V0dXAgc2lnbmlmaWNhbnRseS4gTm8gY29tcGxleCBkZXZpY2UgZHJpdmVycyB0byBkZWFsIHdpdGggaW5pdGlhbGx5LlxuKiAgICoqRHluYW1pYyBBbGxvY2F0aW9ucyBhbmQgUGFyc2luZzoqKiBOZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzIHdpdGggZHluYW1pYyBhbGxvY2F0aW9ucz8gUGVyZmVjdCEgVGhpcyBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBUaGUgcGFyc2luZyBsb2dpYyBpcyByaXBlIGZvciBtYWxmb3JtZWQgaW5wdXQgZXhwbG9pdGF0aW9uLlxuKiAgICoqV2lkZXNwcmVhZCBJbXBhY3Q6KiogSXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgKGBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYW5kIGV2YWN1YXRpb24gbG9naWMgaW4gYGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW5gKSwgd2hpY2ggYnJvYWRlbnMgdGhlIHNjb3BlIGZvciB2dWxuZXJhYmlsaXRpZXMgdG8gYmUgZm91bmQuXG4qICAgKipWaXJ0dWFsaXphdGlvbiBGcmllbmRseToqKiBGdWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobmw4MDIxMSBhbmQgbWFjODAyMTEgLyBtYWM4MDIxMVxcX2h3c2ltKS4gVGhpcyBtZWFucyBJIGNhbiBydW4gdGhpcyB3aXRoIGVhc2UgaW4gYW4gYXV0b21hdGVkIGZ1enplci4gVGhpcyB3aWxsIG1ha2UgdGVzdGluZyBlYXNpZXIuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSBpbiwgbGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zIHNldCB1cCBjb3JyZWN0bHkuIEkgbmVlZCB0byBjb25maXJtOlxuXG4qICAgYENGRzgwMjExYFxuKiAgIGBNQUM4MDIxMWBcbiogICBgTUFDODAyMTFfSFdTSU1gXG5cbkFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIFwiTkFOXCIgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgTkFOLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSdtIG1pc3NpbmcuIEdvdCB0byBoYXZlIGFsbCBteSBiYXNlcyBjb3ZlcmVkIGZvciB0aGUgZnV6emluZyBydW4uIFRoaXMgaXMgZ29pbmcgdG8gYmUgZnVuIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE0LjM0NjY0MzQ2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTgxMjk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE0LjUxMjYzNTA4OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ5MTA2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3Qgc2F5cyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBzdGFjayB3YXJyYW50cyBhIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhhdCBmaWxlIHRvIGNoZWNrIHdoYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZSwgYW5kIGlmIGFueSBhcmUgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0uIEknbSBsb29raW5nIGZvciBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBzZWUgaWYgYSBzaW1wbGUga2VybmVsIHJlY29uZmlndXJlIGlzIHRoZSBzb2x1dGlvbiBvciBpZiB0aGlzIHJlcXVpcmVzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToxNi41NjE3NDQwMDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjkyMjQ1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToxNi43NTQ2NzM4OTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1NzQwODg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBXaXJlbGVzcyBEcml2ZXIgQnVpbGQgUHJvY2Vzc2VzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGJ1aWx0LCBzbyBJJ2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBjb3JlIGJ1aWxkIGxvZ2ljIGZvciB0aGUgbWFjODAyMTEgZnJhbWV3b3JrIGFuZCBhbnkgZ2VuZXJhbCB3aXJlbGVzcyBjb21wb25lbnRzIHdpbGwgcHJvYmFibHkgcmVzaWRlIGluIHRob3NlIHRvcC1sZXZlbCBgTWFrZWZpbGVgIGZpbGVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBgbmV0L21hYzgwMjExL01ha2VmaWxlYCBhbmQgYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFRob3NlIGFyZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHM7IEkgY2FuIHByb2JhYmx5IGZpbmQgdGhlIGluY2x1c2lvbiBvZiB0aG9zZSBmaWxlcyBhbmQgc2VlIGhvdyB0aG9zZSBjb21wb25lbnQgcGFydHMgYXJlIHRpZWQgdG9nZXRoZXIuIEknbGwgbmVlZCB0byByZXZpZXcgdGhvc2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBmb3IgdGhpcyBhbmQgc2VlIHdoZXJlIHRoZSBhY3R1YWwgZHJpdmVycyBmaXQgaW50byB0aGlzIG92ZXJhbGwgc3RydWN0dXJlLiBUaGlzIHNob3VsZCBob3BlZnVsbHkgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoZSBkcml2ZXJzIGFyZSBpbnRlZ3JhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE4LjgxMjA4NjAzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX01BQzgwMjExKSArPSBtYWM4MDIxMS5vXFxuICAgMzpcXHRcXG4gICA0OlxcdCMgbWFjODAyMTEgb2JqZWN0c1xcbiAgIDU6XFx0bWFjODAyMTEteSA6PSBcXFxcXFxuICAgNjpcXHRcXHRtYWluLm8gc3RhdHVzLm8gXFxcXFxcbiAgIDc6XFx0XFx0ZHJpdmVyLW9wcy5vIFxcXFxcXG4gICA4OlxcdFxcdHN0YV9pbmZvLm8gXFxcXFxcbiAgIDk6XFx0XFx0d2VwLm8gXFxcXFxcbiAgMTA6XFx0XFx0YWVhZF9hcGkubyBcXFxcXFxuICAxMTpcXHRcXHR3cGEubyBcXFxcXFxuICAxMjpcXHRcXHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXFxcXG4gIDEzOlxcdFxcdGh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXFxcXFxcbiAgMTQ6XFx0XFx0dmh0Lm8gXFxcXFxcbiAgMTU6XFx0XFx0aGUubyBcXFxcXFxuICAxNjpcXHRcXHRzMWcubyBcXFxcXFxuICAxNzpcXHRcXHRpYnNzLm8gXFxcXFxcbiAgMTg6XFx0XFx0aWZhY2UubyBcXFxcXFxuICAxOTpcXHRcXHRsaW5rLm8gXFxcXFxcbiAgMjA6XFx0XFx0cmF0ZS5vIFxcXFxcXG4gIDIxOlxcdFxcdHRraXAubyBcXFxcXFxuICAyMjpcXHRcXHRhZXNfY21hYy5vIFxcXFxcXG4gIDIzOlxcdFxcdGFlc19nbWFjLm8gXFxcXFxcbiAgMjQ6XFx0XFx0Zmlsc19hZWFkLm8gXFxcXFxcbiAgMjU6XFx0XFx0Y2ZnLm8gXFxcXFxcbiAgMjY6XFx0XFx0ZXRodG9vbC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJ4Lm8gXFxcXFxcbiAgMjg6XFx0XFx0c3BlY3RtZ210Lm8gXFxcXFxcbiAgMjk6XFx0XFx0dHgubyBcXFxcXFxuICAzMDpcXHRcXHRrZXkubyBcXFxcXFxuICAzMTpcXHRcXHR1dGlsLm8gcGFyc2UubyBcXFxcXFxuICAzMjpcXHRcXHR3bWUubyBcXFxcXFxuICAzMzpcXHRcXHRjaGFuLm8gYXAubyBcXFxcXFxuICAzNDpcXHRcXHR0cmFjZS5vIG1sbWUubyBcXFxcXFxuICAzNTpcXHRcXHR0ZGxzLm8gXFxcXFxcbiAgMzY6XFx0XFx0b2NiLm8gXFxcXFxcbiAgMzc6XFx0XFx0YWlydGltZS5vIFxcXFxcXG4gIDM4OlxcdFxcdGVodC5vIHVoci5vIG5hbi5vXFxuICAzOTpcXHRcXG4gIDQwOlxcdG1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICs9IGxlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE4LjgxMjI0MzMxM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDM5Nzg2NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOQU4gQ2hhbm5lbCBFdmFjdWF0aW9uIExvZ2ljIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ3ZlIGJlZW4gd29ya2luZyB0aHJvdWdoLiBGaXJzdCwgSSBrbm93IHRoYXQgYG5hbi5vYCBpcyBpbmhlcmVudGx5IHBhcnQgb2YgYG1hYzgwMjExLm9gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gU2ltaWxhcmx5LCBgbmw4MDIxMS5vYCBhbmQgYGNvcmUub2AgYXJlIGJ1aWx0IGludG8gYGNmZzgwMjExLm9gIHdoZW4gYENPTkZJR19DRkc4MDIxMWAgaXMgYWN0aXZlLiBUaGlzIGRpY3RhdGVzIHRoZSBjb3JlIG1vZHVsZXMgaW4gcGxheS5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdDogYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgLCBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AsIGFuZCBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAuXG5cbk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlaXIgdmlzaWJpbGl0eS4gQSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIHJldmVhbHMgdGhhdCBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBhbmQgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgaXMgbG9jYXRlZCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIHdoaWxlIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AgaXMgc3RhdGljIGluIGBuZXQvbWFjODAyMTEvY2ZnLmNgIGFuZCBib3RoIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgYW5kIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCBhcmUgaW4gYG5ldC9tYWM4MDIxMS9uYW4uY2AuIEkgaGF2ZSB0byByZW1lbWJlciB0byBmaWx0ZXIgb3V0IGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMgc3VjaCBhcyBgcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC93aXJlbGVzcy9yZGV2LW9wcy5oYCwgc2luY2UgdGhvc2UgY2FuJ3QgYmUgZGlyZWN0bHkgY2FsbGVkLlxuXG5UaGUgZXNzZW50aWFsIGBFbmFibGVDb25maWdzYCBmb3IgdGhpcyBhcmUgYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuXG5cbk5vdywgSSdtIHJlYWR5IHRvIGNyYWZ0IHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIFRoZSBmdXp6aW5nIHRhcmdldCBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmdgIGR1ZSB0byB0aGUgaGFuZGxpbmcgb2YgYSBuZXcgbmV0bGluayBjb21tYW5kLCBjaGFubmVsIGV2YWN1YXRpb24gbG9naWMgZm9yIE5BTiwgdGhlIHBhcnNpbmcgb2YgbmVzdGVkIG5sODAyMTEgYXR0cmlidXRlcywgYW5kIHRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgYm90aCBuZXRsaW5rIGFuZCBtYWM4MDIxMSB2aXJ0dWFsIGludGVyZmFjZXMuXG5cblRoZXJlZm9yZSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgaGlnaGxpZ2h0IHRoaXMgbmV3IGNvZGUgcGF0aCwgaW5jbHVkaW5nIGl0cyBuZXN0ZWQgcGFyc2luZyBsb2dpYy4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgdGhhdCBmdWxsIGxpc3Qgb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHRoZSB0aHJlZSBjb25maWd1cmF0aW9ucyBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZC5cblxuQmVmb3JlIEkgYWN0dWFsbHkgbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGFsbCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYW5kIGNvbmZpZ3MgYXJlIGNvcnJlY3QuXG5cbkZ1bmN0aW9uczpcbjEuIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgXG4yLiBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYFxuMy4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgXG40LiBgaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgXG41LiBgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgXG42LiBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmBcblxuQ29uZmlnczpcbi0gYENGRzgwMjExYFxuLSBgTUFDODAyMTFgXG4tIGBNQUM4MDIxMV9IV1NJTWBcblxuT2theSwgZXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MTYsIk91dHB1dFRva2VucyI6MzAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MjUuODUyMDMyNzc2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTM1NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxcIixcbiAgICBcImNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyB0byBjb25maWd1cmUgbm9uLWV2YWN1YWJsZSBOQU4gc2NoZWR1bGUgY2hhbm5lbHMuIEl0IGFkZHMgbmV0bGluayBhdHRyaWJ1dGUgcGFyc2luZywgdmVyaWZpY2F0aW9uIGxvZ2ljIGFnYWluc3QgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgaW4gY2ZnODAyMTEsIGRyaXZlci9zdGFjayBvcHMgaW4gbWFjODAyMTEsIGFuZCBtb2RpZmllcyBjaGFubmVsIGV2YWN1YXRpb24gc2VsZWN0aW9uIGluIG1hYzgwMjExLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmw4MDIxMSBzb2NrZXRzIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcIm5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbFwiLFxuICAgIFwiY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBnZW5lcmljIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIHRvIGNvbmZpZ3VyZSBub24tZXZhY3VhYmxlIE5BTiBzY2hlZHVsZSBjaGFubmVscy4gSXQgYWRkcyBuZXRsaW5rIGF0dHJpYnV0ZSBwYXJzaW5nLCB2ZXJpZmljYXRpb24gbG9naWMgYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSBpbiBjZmc4MDIxMSwgZHJpdmVyL3N0YWNrIG9wcyBpbiBtYWM4MDIxMSwgYW5kIG1vZGlmaWVzIGNoYW5uZWwgZXZhY3VhdGlvbiBzZWxlY3Rpb24gaW4gbWFjODAyMTEuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIHNvY2tldHMgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjI2LjA0MzU3NzE3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNDAwNDE2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToyNi4wNDQyOTE4MTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzEzOTMyMTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgYW5kIG1hYzgwMjExL2NmZzgwMjExIGhhbmRsZXJzIHRvIG1hcmsgY2VydGFpbiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZS5cXG5cXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoaXQgaXMgYSBzZXR0ZXIgY29tbWFuZCByZXR1cm5pbmcgb25seSBhbiBlcnJvciBzdGF0dXMpLCBwcmVjbHVkaW5nIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuXFxuMi4gQWxsIGR5bmFtaWMgYWxsb2NhdGlvbnMgKHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsIG5sYXR0ciBhcnJheSkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGt6YWxsb2MsIGtjYWxsb2MpIGFuZCBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgdmlhIF9fZnJlZShrZnJlZSkuXFxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cXG40LiBObyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE3MTlhMmFhYzFkNzM5MjlkNmJhYTA1N2I4MWE5ZTlkZmU0Y2M3YzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIyOjE4OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDI1Niw2ICs0MjU2LDIxIEBAIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQge1xuIFx0c3RydWN0IGNmZzgwMjExX25hbl9jaGFubmVsIG5hbl9jaGFubmVsc1tdIF9fY291bnRlZF9ieShuX2NoYW5uZWxzKTtcbiB9O1xuIFxuKy8qKlxuKyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVsc1xuKyAqXG4rICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90XG4rICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuXG4rICpcbisgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLlxuKyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaFxuKyAqXHRtdXN0IG1hdGNoIGEgY2hhbm5lbCBvZiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS5cbisgKi9cbitzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzIHtcbitcdHU4IG5fY2hhbm5lbHM7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7XG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfbWFwIC0gTkFOIHBlZXIgc2NoZWR1bGUgbWFwXG4gICpcbkBAIC01MjA0LDYgKzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7XG4gICpcdHNjaGVkdWxlLCB0aGUgZnVsbCBuZXcgc2NoZWR1bGUgaXMgcHJvdmlkZWQgLSBwYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdFxuICAqXHRzdXBwb3J0ZWQsIGFuZCB0aGUgbmV3IHNjaGVkdWxlIGNvbXBsZXRlbHkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZS5cbiAgKlxuKyAqIEBuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzOiBzZXQgdGhlIGxpc3Qgb2YgbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgdGhhdFxuKyAqXHRtdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3RcbisgKlx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldDsgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmVcbisgKlx0bm90IGluY2x1ZGVkIGJlY29tZSBldmFjdWFibGUgYWdhaW4uIEFsbCBwcm92aWRlZCBjaGFubmVscyBhcmVcbisgKlx0Z3VhcmFudGVlZCBieSBjZmc4MDIxMSB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuXG4rICpcbiAgKiBAc2V0X211bHRpY2FzdF90b191bmljYXN0OiBjb25maWd1cmUgbXVsdGljYXN0IHRvIHVuaWNhc3QgY29udmVyc2lvbiBmb3IgQlNTXG4gICpcbiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpc1xuQEAgLTU1OTAsNiArNTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMge1xuIFx0aW50XHQoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbitcdGludFx0KCpuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpO1xuIFx0aW50XHQoKnNldF9tdWx0aWNhc3RfdG9fdW5pY2FzdCkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdCAgICBjb25zdCBib29sIGVuYWJsZWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTkyMywxMiArOTIzLDE0IEBAIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYge1xuICAqIEBjaGFubmVsX2VudHJ5OiB0aGUgQ2hhbm5lbCBFbnRyeSBibG9iIGFzIGRlZmluZWQgaW4gV2ktRmkgQXdhcmVcbiAgKlx0KFRNKSA0LjAgc3BlY2lmaWNhdGlvbiBUYWJsZSAxMDAgKENoYW5uZWwgRW50cnkgZm9ybWF0IGZvciB0aGUgTkFOXG4gICpcdEF2YWlsYWJpbGl0eSBhdHRyaWJ1dGUpLlxuKyAqIEBub19ldmFjdWF0ZTogaWYgc2V0LCB0aGlzIGNoYW5uZWwgbXVzdCBub3QgYmUgZXZhY3VhdGVkXG4gICovXG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5fcmVxIGNoYW5yZXE7XG4gXHR1OCBuZWVkZWRfcnhfY2hhaW5zO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjtcbiBcdHU4IGNoYW5uZWxfZW50cnlbNl07XG4rXHRib29sIG5vX2V2YWN1YXRlO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IGQ4ZmVmZWZjMTFhOTUuLmZiMzAwYjBjNGEyODcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtMTM4Myw2ICsxMzgzLDEzIEBAXG4gICpcdGZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIGFuIGFubm91bmNlZCBzY2hlZHVsZSB1cGRhdGUuIFNlZVxuICAqXHQlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRCBmb3IgbW9yZSBkZXRhaWxzLlxuICAqXHRJZiBub3Qgc2V0LCB0aGUgc2NoZWR1bGUgc2hvdWxkIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXG4rICpcdFNldHRpbmcgYSBuZXcgc2NoZWR1bGUgaXMgYWx3YXlzIGFsbG93ZWQgYW5kIGlzIG5ldmVyIHRyZWF0ZWQgYXMgYW5cbisgKlx0ZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhc1xuKyAqXHRub24tZXZhY3VhYmxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMuIFRoZVxuKyAqXHRub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgc2NoZWR1bGU6XG4rICpcdGNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVsc1xuKyAqXHR0aGF0IGFyZSByZW1vdmVkIHNpbXBseSBsb3NlIGl0LCBhbmQgbmV3bHkgYWRkZWQgY2hhbm5lbHMgYXJlXG4rICpcdGV2YWN1YWJsZSBieSBkZWZhdWx0LlxuICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdFxuICAqXHRhIGRlZmVycmVkIGxvY2FsIE5BTiBzY2hlZHVsZSB1cGRhdGUgKHJlcXVlc3RlZCB3aXRoXG4gICpcdCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGFuZCAlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRClcbkBAIC0xNDI3LDYgKzE0MzQsMjggQEBcbiAgKiBATkw4MDIxMV9DTURfU1RPUF9QRDogU3RvcCB0aGUgUEQgb3BlcmF0aW9uLCBpZGVudGlmaWVkIGJ5XG4gICpcdGl0cyAlTkw4MDIxMV9BVFRSX1dERVYgaW50ZXJmYWNlLlxuICAqXG4rICogQE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFM6IFNldCB0aGUgbGlzdCBvZiBOQU4gbG9jYWwgc2NoZWR1bGVcbisgKlx0Y2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsXG4rICpcdCglTkw4MDIxMV9DTURfU1RBUlRfTkFOIHdhcyBleGVjdXRlZCkgYW5kIGEgbG9jYWwgc2NoZWR1bGUgbXVzdCBoYXZlXG4rICpcdGJlZW4gc2V0ICglTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkuIFRoZSBjb21tYW5kIGNhcnJpZXMgemVyb1xuKyAqXHRvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYVxuKyAqXHRjaGFubmVsIChieSBpdHMgY2hhbm5lbCBkZWZpbml0aW9uKSBvZiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSB0aGF0XG4rICpcdG11c3Qgbm90IGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLiBUaGUgcHJvdmlkZWQgbGlzdFxuKyAqXHRyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZVxuKyAqXHRjdXJyZW50IHNjaGVkdWxlIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGxcbisgKlx0cHJvdmlkZWQgY2hhbm5lbHMgbXVzdCBleGlzdCBpbiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSwgb3RoZXJ3aXNlXG4rICpcdHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3JcbisgKlx0aW1tdXRhYmxlIHNjaGVkdWxlcywgd2hvc2UgZXZhY3VhdGlvbiB3b3VsZCBicmVhayBleGlzdGluZyBORFBcbisgKlx0Y29ubmVjdGlvbnMuXG4rICpcdFRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudFxuKyAqXHRsb2NhbCBzY2hlZHVsZSBhbmQgb25seSBhZmZlY3RzIGV2YWN1YXRpb24gZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucztcbisgKlx0aXQgZG9lcyBub3QgcHJldmVudCB0aGUgc2NoZWR1bGUgaXRzZWxmIGZyb20gYmVpbmcgY2hhbmdlZC4gUmVtb3ZpbmcgYVxuKyAqXHRjaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYVxuKyAqXHR1c2VyLWluaXRpYXRlZCBjaGFuZ2UsIG5vdCBhbiBldmFjdWF0aW9uLCBhbmQgaXMgYWxsb3dlZCBldmVuIGZvciBhXG4rICpcdG5vbi1ldmFjdWFibGUgY2hhbm5lbC4gQWNyb3NzIGEgc2NoZWR1bGUgdXBkYXRlLCBjaGFubmVscyB0aGF0IHJlbWFpblxuKyAqXHRrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHlcbisgKlx0YWRkZWQgY2hhbm5lbHMgYXJlIGV2YWN1YWJsZSBieSBkZWZhdWx0OyBpc3N1ZSB0aGlzIGNvbW1hbmQgYWdhaW4gdG9cbisgKlx0Y2hhbmdlIHRoZSBub24tZXZhY3VhYmxlIHNldC5cbiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXJcbiAgKiBAX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcbiAgKi9cbkBAIC0xNzA1LDYgKzE3MzQsOCBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMge1xuIFx0Tkw4MDIxMV9DTURfU1RBUlRfUEQsXG4gXHROTDgwMjExX0NNRF9TVE9QX1BELFxuIFxuK1x0Tkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyxcbitcbiBcdC8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqL1xuIFxuIFx0LyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5jZGNmMWYwNTc3MDc3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC01OTczLDYgKzU5NzMsMTggQEAgaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc2RhdGEsIHNjaGVkKTtcbiB9XG4gXG4rc3RhdGljIGludFxuK2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4rXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcbit7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KHdpcGh5KTtcbitcbitcdHJldHVybiBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzZGF0YSwgY2hhbm5lbHMpO1xuK31cbitcbiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4gXHQuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsXG4gXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsXG5AQCAtNjA5MSw0ICs2MTAzLDUgQEAgY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xuIFx0LnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLFxuIFx0Lm5hbl9zZXRfbG9jYWxfc2NoZWQgPSBpZWVlODAyMTFfc2V0X2xvY2FsX25hbl9zY2hlZCxcbiBcdC5uYW5fc2V0X3BlZXJfc2NoZWQgPSBpZWVlODAyMTFfc2V0X3BlZXJfbmFuX3NjaGVkLFxuK1x0Lm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMgPSBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjkyOWZjODkzMGEzNWUgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0yMDg3LDYgKzIwODcsOCBAQCBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbitpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4rXHRcdFx0XHRcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiB2b2lkIGllZWU4MDIxMV9uYW5fZnJlZV9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbiB2b2lkIGllZWU4MDIxMV9uYW5fdXBkYXRlX25kaV9jYXJyaWVyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKm5kaV9zZGF0YSk7XG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL25hbi5jIGIvbmV0L21hYzgwMjExL25hbi5jXG5pbmRleCAxOWUwODY2MWJlNDNhLi4zOGJkMTA1MTIxYWNmIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL25hbi5jXG4rKysgYi9uZXQvbWFjODAyMTEvbmFuLmNcbkBAIC0yNDgsNiArMjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4raW50XG4raWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4rXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSBcdTAwMjZzZGF0YS1cdTAwM2V2aWYuY2ZnLm5hbl9zY2hlZDtcbitcbitcdC8qXG4rXHQgKiBjZmc4MDIxMSBhbHJlYWR5IHZhbGlkYXRlZCB0aGF0IGFsbCBwcm92aWRlZCBjaGFubmVscyBiZWxvbmcgdG8gdGhlXG4rXHQgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlXG4rXHQgKiBvbmVzIGluIHRoZSBsaXN0LlxuK1x0ICovXG4rXHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqKyspXG4rXHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkrKykge1xuK1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqKyspIHtcbitcdFx0XHRpZiAoIXNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIuY2hhbilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2lkZW50aWNhbChcdTAwMjZzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSkpIHtcbitcdFx0XHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxuIHtcbkBAIC03ODYsNiArODE1LDEwIEBAIGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXG4gXHRcdHVzYWJsZV9jaGFubmVscysrO1xuIFxuK1x0XHQvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqL1xuK1x0XHRpZiAoY2hhbi1cdTAwM2Vub19ldmFjdWF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0Y2hhbl9jdHggPSBjb250YWluZXJfb2YoY2hhbi1cdTAwM2VjaGFuY3R4X2NvbmYsXG4gXHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMzI1LDYgKzMyNSw0MSBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5Lm10eCk7XG4rXG4rXHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LypcbitcdCAqIERvbid0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWRcbitcdCAqIHNjaGVkdWxlIHVwZGF0ZSBpcyBwZW5kaW5nLCBhcyB0aGUgc2V0IG9mIGNoYW5uZWxzIG1heSBzdGlsbCBjaGFuZ2UuXG4rXHQgKi9cbitcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0LyogQWxsIHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLiAqL1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkrKykge1xuK1x0XHRib29sIGZvdW5kID0gZmFsc2U7XG4rXG4rXHRcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyB3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHM7IGorKykge1xuK1x0XHRcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2lkZW50aWNhbChcdTAwMjZ3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzW2pdLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSkpIHtcbitcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRpZiAoIWZvdW5kKVxuK1x0XHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4rfVxuK1xuIHZvaWQgY2ZnODAyMTFfc3RvcF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5pbmRleCBiNDYxMGY2Njg1ZGNiLi40ZWU0OGI5MzcwODAwIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuQEAgLTU2NSw2ICs1NjUsMTAgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xuIFxuK2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbitcbiBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpcbiBjZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnRtcCxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggZTU4NWRhMWQ3OWM5ZS4uZjQ0MDM2YWQ0M2ZiNSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xNzc2Myw2ICsxNzc2Myw2OSBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4rbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKipjaGFubmVsX3BhcnNlZCBfX2ZyZWUoa2ZyZWUpID1cbitcdFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICsgMSwgc2l6ZW9mKCpjaGFubmVsX3BhcnNlZCksXG4rXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFjaGFubmVsX3BhcnNlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGNoYW5uZWxfcGFyc2VkLCBOTDgwMjExX0FUVFJfTUFYLCBjaGFubmVsLCBOVUxMLFxuK1x0XHRcdCAgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgY2hhbm5lbF9wYXJzZWQsXG4rXHRcdFx0XHQgICAgIGNoYW5kZWYsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4rXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbitcdGludCByZW0sIGkgPSAwLCBuX2NoYW5uZWxzID0gMDtcbitcdHN0cnVjdCBubGF0dHIgKmNoYW5uZWw7XG4rXG4rXHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSlcbitcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbitcbitcdC8qIENvdW50IGhvdyBtYW55IGNoYW5uZWwgYXR0cmlidXRlcyB3ZSBnb3QgKi9cbitcdG5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsXG4rXHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbitcdFx0bl9jaGFubmVscysrO1xuK1xuK1x0c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMgX19mcmVlKGtmcmVlKSA9XG4rXHRcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcbitcdFx0XHRHRlBfS0VSTkVMKTtcbitcdGlmICghY2hhbm5lbHMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y2hhbm5lbHMtXHUwMDNlbl9jaGFubmVscyA9IG5fY2hhbm5lbHM7XG4rXG4rXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxuK1x0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pIHtcbitcdFx0aW50IHJldDtcbitcbitcdFx0cmV0ID0gbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHJkZXYsIGNoYW5uZWwsIGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aSsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xuK31cbitcbiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X3Byb3RvY29sX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbkBAIC0yMDYxOSw2ICsyMDY4MiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4gXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbiBcdFx0LmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLFxuIFx0fSxcbitcdHtcbitcdFx0LmNtZCA9IE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsXG4rXHRcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLFxuK1x0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4rXHRcdC5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSxcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTFfZmFtIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5pbmRleCA0Njg0OWZlOGQwYjM5Li4yNjkyNThjOTRhNDJhIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbisrKyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5AQCAtMTA5Myw2ICsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50XG4rcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHRyYWNlX3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LCBjaGFubmVscyk7XG4rXHRpZiAocmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9ub25fZXZhY19jaGFubmVscylcbitcdFx0cmV0ID0gcmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LFxuK1x0XHRcdFx0XHRcdFx0ICAgY2hhbm5lbHMpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgcmRldl9zdGFydF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdHJhY2UuaCBiL25ldC93aXJlbGVzcy90cmFjZS5oXG5pbmRleCA4YzJhOTFiODVjMzk2Li40MzVkYzU4Y2FmYmVkIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbisrKyBiL25ldC93aXJlbGVzcy90cmFjZS5oXG5AQCAtMjQ4Myw2ICsyNDgzLDMxIEBAIFRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkLFxuIFx0KVxuICk7XG4gXG4rVFJBQ0VfRVZFTlQocmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLFxuK1x0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0IHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKSxcbitcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSxcbitcdFRQX1NUUlVDVF9fZW50cnkoXG4rXHRcdFdJUEhZX0VOVFJZXG4rXHRcdFdERVZfRU5UUllcbitcdFx0X19maWVsZCh1OCwgbl9jaGFubmVscylcbitcdFx0X19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHMpXG4rXHQpLFxuK1x0VFBfZmFzdF9hc3NpZ24oXG4rXHRcdHUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTtcbitcbitcdFx0V0lQSFlfQVNTSUdOO1xuK1x0XHRXREVWX0FTU0lHTjtcbitcdFx0X19lbnRyeS1cdTAwM2VuX2NoYW5uZWxzID0gY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVscztcbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkrKylcbitcdFx0XHRmcmVxc1tpXSA9IGNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4rXHQpLFxuK1x0VFBfcHJpbnRrKFdJUEhZX1BSX0ZNVCBcIiwgXCIgV0RFVl9QUl9GTVQgXCIsIG5fY2hhbm5lbHM6ICV1LCBmcmVxczogJXNcIixcbitcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZW5fY2hhbm5lbHMsXG4rXHRcdCAgX19wcmludF9hcnJheShfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKSxcbitcdFx0XHRcdF9fZW50cnktXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKHUzMikpKVxuKyk7XG4rXG4gVFJBQ0VfRVZFTlQocmRldl9zZXRfbWFjX2FjbCxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdCBzdHJ1Y3QgY2ZnODAyMTFfYWNsX2RhdGEgKnBhcmFtcyksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToyNi4wNDQyOTM4MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODUxOTQzNDI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogTkFOIE5vbi1FdmFjdWFibGUgQ2hhbm5lbCBTZXR0aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgbWVjaGFuaXNtIHRvIGRlc2lnbmF0ZSBzcGVjaWZpYyBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlIHdpdGhpbiB0aGUgTkFOIGxvY2FsIHNjaGVkdWxlLiBUaGlzIGlzIGFjaGlldmVkIHZpYSBhIG5ldyBOZXRsaW5rIGNvbW1hbmQsIGBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTYC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXBkYXRlZDogYSBuZXcgYGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVsc2Agc3RydWN0IGlzIGRlZmluZWQsIGVzc2VudGlhbGx5IGEgY29udGFpbmVyIGZvciBhIGxpc3Qgb2YgY2hhbm5lbCBkZWZpbml0aW9ucy4gVGhlbiB0aGVyZSdzIHRoZSBgbm9fZXZhY3VhdGVgIGZsYWcgYmVpbmcgYWRkZWQgdG8gdGhlIGBpZWVlODAyMTFfbmFuX2NoYW5uZWxgIHN0cnVjdC4gVGhpcyBpcyB0aGUga2V5IOKAkyBpbmRpY2F0aW5nIHdoZXRoZXIgYSBjaGFubmVsIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGV2YWN1YXRpb24uXG5cblRoZSBjb2RlIGNoYW5nZXMgY29uZmlybSB0aGF0IHRoZSBuZXcgY29tbWFuZCB3aWxsIHNldCB0aGUgbm9uLWV2YWN1YXRlZCBjaGFubmVscy4gVGhlICBgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggdGhlIHByb3ZpZGVkIGNoYW5uZWwgbGlzdCwgYW5kIHNldHMgdGhlIGBub19ldmFjdWF0ZWAgZmxhZyBhY2NvcmRpbmdseS4gYGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW5gIGlzIG1vZGlmaWVkIHRvIHJlc3BlY3QgdGhlIG5ldyBzZXR0aW5nLlxuXG5gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgaW4gYGNvcmUuY2AgcGVyZm9ybXMgaW1wb3J0YW50IHZhbGlkYXRpb24uIEl0IG1ha2VzIHN1cmUgd2UncmUgaW4gTkFOIG1vZGUsIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgYW5kIHRoYXQgdGhlIGNoYW5uZWwgZGVmaW5pdGlvbnMgd2UncmUgYmVpbmcgZ2l2ZW4gYWN0dWFsbHkgbWF0Y2ggdGhlIGNoYW5uZWxzIHRoYXQgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIHRvIHN1cHBvcnQsIHdoaWNoIGlzIGdvb2QuIFRoZSBjYWxsIHRvIGByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIHNpZ25hbHMgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQgYnkgdGhlIGRyaXZlci5cblxuVGhlIE5ldGxpbmsgc2lkZSBvZiB0aGluZ3MsIGhhbmRsZWQgaW4gYG5sODAyMTEuY2AsIGlzIHByZXR0eSBzdGFuZGFyZC4gIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgIHBhcnNlcyB0aGUgaW5kaXZpZHVhbCBjaGFubmVsIGRlZmluaXRpb25zIGZyb20gdGhlIE5ldGxpbmsgbWVzc2FnZSwgYW5kIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmc6IGNvdW50aW5nIHRoZSBjaGFubmVscywgYWxsb2NhdGluZyBtZW1vcnksIHBvcHVsYXRpbmcgdGhlIGBjaGFubmVsc2Agc3RydWN0LCBhbmQgdWx0aW1hdGVseSBjYWxsaW5nIHRoZSBjb3JlIGZ1bmN0aW9uIHRvIHNldCB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscy4gTWVtb3J5IGFsbG9jYXRpb24gbG9va3MgcmVhc29uYWJsZSwgd2l0aCBga2NhbGxvY2AgYW5kIGBremFsbG9jYCBiZWluZyB1c2VkLCBhbmQgaW5pdGlhbGl6YXRpb24gb2NjdXJyaW5nLlxuXG5Ob3csIGEga2V5IGNvbmNlcm46IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBtYWtlIHN1cmUgbm90aGluZyBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZSBhbmQgdGhhdCBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gTG9va3MgbGlrZSB0aGVyZSdzIG5vIG91dHB1dHRpbmcgb2YgdGhpcyBpbmZvcm1hdGlvbiwgdGhpcyBpcyBhIHNldHRlciwgc28gdGhhdCdzIGdvb2QuIFRoZSBhbGxvY2F0aW9ucyBhcmUgYWxsIHplcm9lZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCB0aGUgdXNlIG9mIGEgdHJhY2Vwb2ludCBkb2VzIGNhdGNoIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFkaW5nIGNoYW5uZWwgY2VudGVyIGZyZXF1ZW5jaWVzIGZyb20gdGhlIHBhcnNlZCBgY2hhbmRlZnNgLCBzbyBJIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgYW5kIHRoZSB2YWxpZGF0aW9uIHN0ZXBzLiBUaGUgaW1wb3J0YW50IHZhbGlkYXRpb24gaXMgdGhhdCBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBpbml0aWFsaXplcyBgY2hhbmRlZmAsIGFuZCB0aGF0IHZhbGlkYXRpb24gaW4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIG1ha2VzIHN1cmUgaXQncyB2YWxpZC4gVGhlcmVmb3JlLCB0aGUgdHJhY2UgZXZlbnQgd2lsbCB3b3JrLlxuXG5PdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIHdlbGwtc3RydWN0dXJlZCwgYnV0IEkgd2lsbCBuZWVkIHRvIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgdG8gZW5zdXJlIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYW5kIHZhbGlkYXRlZCBiZWZvcmUgdGhlIHRyYWNlcG9pbnQgaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTg2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjM0LjU2MzczMDU2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MjM2NTY0NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmIG5sODAyMTFfcGFyc2VfY2hhbmRlZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MzkuMjI2MTQ2NzI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MjcyOTU1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBjaGFubmVsIGRlZmluaXRpb24gcGFyc2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHdpcmVsZXNzIG5ldHdvcmtpbmcsIGlzIHRvIGp1bXAgcmlnaHQgaW4gYW5kIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjaGFubmVsIGRlZmluaXRpb25zIHdpdGhpbiB0aGUgbmw4MDIxMSBmcmFtZXdvcmsuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvciBleHRyYWN0aW5nIHRoZSBjaGFubmVsIHBhcmFtZXRlcnMgZnJvbSB3aGF0ZXZlciBkYXRhIHN0cnVjdHVyZSBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgbmw4MDIxMSBpbnRlcmZhY2UgLSBjb3VsZCBiZSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkknbSB0aGlua2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHRvdWNoIHRoaW5ncyBsaWtlOlxuKiAgICoqRnJlcXVlbmN5OioqIFRoZSBhY3R1YWwgcmFkaW8gZnJlcXVlbmN5IGluIE1Iei5cbiogICAqKkNoYW5uZWwgV2lkdGg6KiogVGhpcyBpcyBjcnVjaWFsLCBhcyBpdCBkZXRlcm1pbmVzIHRoZSBiYW5kd2lkdGggdXNlZCAoZS5nLiwgMjBNSHosIDQwTUh6LCA4ME1IeiwgMTYwTUh6KS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhcnNpbmcgaGFuZGxlcyBhbGwgdGhlIGNvbW1vbiAoYW5kIGV2ZW4gc29tZSBsZXNzIGNvbW1vbikgd2lkdGhzLlxuKiAgICoqQ2VudGVyIEZyZXF1ZW5jeSBTZWdtZW50czoqKiBJZiB0aGlzIGlzIGEgd2lkZXIgY2hhbm5lbCwgbGlrZSA4ME1IeiBvciAxNjBNSHosIHRoZW4gSSdsbCBsb29rIGZvciBob3cgdGhlIGZ1bmN0aW9uIGlkZW50aWZpZXMgdGhlIGNlbnRlciBmcmVxdWVuY2llcyBvZiB0aGUgc2VnbWVudHMuXG4qICAgKipSZWd1bGF0b3J5IERvbWFpbiBIYW5kbGluZzoqKiBIb3cgaXQgZGVhbHMgd2l0aCBkaWZmZXJlbnQgcmVndWxhdG9yeSBkb21haW5zIGFuZCB0aGVpciByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFubmVscyBhbmQgd2lkdGhzIHdpbGwgYmUgaW1wb3J0YW50LiBJIGJldCB0aGVyZSBhcmUgY2hlY2tzIGFnYWluc3QgYSByZWd1bGF0b3J5IGRhdGFiYXNlLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQncyBjcml0aWNhbCB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSBpZGVudGlmaWVzIGFuZCBoYW5kbGVzIGludmFsaWQgY2hhbm5lbCBkZWZpbml0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgcm9idXN0IHRoZSBlcnJvciBjaGVja3MgYXJlLiBEb2VzIGl0IHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2Rlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5jb3JyZWN0IHBhcnNpbmcgb2YgbWFsaWNpb3VzbHkgY3JhZnRlZCBjaGFubmVsIGRlZmluaXRpb25zP1xuXG5NeSBmaXJzdCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZ3JlcCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHNlZSB0aGUgZGlyZWN0IHVzYWdlLiBUaGVuIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIGl0IGludGVyZmFjZXMgd2l0aCBhbnkgbmw4MDIxMSBtZXNzYWdlIHByb2Nlc3NpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcgYW5kIEkgYW50aWNpcGF0ZSBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggdGhlIGRlZmluaXRpb25zIG9mIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgZW51bXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6NDIuNjUzNDQ0NzUyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3OTM2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmw4MDIxMV9wYXJzZV9jaGFuZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0zOTAzPXN0YXRpYyBib29sIG5sODAyMTFfY2FuX3NldF9kZXZfY2hhbm5lbChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0zOTI2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MzkyNzpzdGF0aWMgaW50IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzkyOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDA5NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQwOTY6aW50IG5sODAyMTFfcGFyc2VfY2hhbmRlZihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MDk3LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MTAxLXtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQxMDI6XFx0cmV0dXJuIF9ubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgZXh0YWNrLCBhdHRycywgZmFsc2UsIGNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MTAzLVxcdFxcdFxcdFxcdCAgICAgIHBlcm1pdF9ucGNhKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDEwNj1zdGF0aWMgaW50IF9fbmw4MDIxMV9zZXRfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQxMzQtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0MTM1OlxcdHJlc3VsdCA9IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQxMzYtXFx0XFx0XFx0XFx0XFx0aWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTcyMTA9c3RhdGljIGludCBubDgwMjExX3N0YXJ0X2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDctXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcXHRcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDktXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwYXJhbXMtXFx1MDAzZWNoYW5kZWYsIHRydWUpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjA0ND1zdGF0aWMgaW50IG5sODAyMTFfc3RhcnRfcmFkYXJfZGV0ZWN0aW9uKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMDc1LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIwNzY6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIwNzctXFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTIxNDg9c3RhdGljIGludCBubDgwMjExX25vdGlmeV9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIxNjUtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjE2NjpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNmNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE2Ny1cXHRcXHRcXHRcXHQgICAgZmFsc2UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjIzOT1zdGF0aWMgaW50IG5sODAyMTFfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMDUtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMwNjpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzA3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cGFyYW1zLmNoYW5kZWYsIHBlcm1pdF9ucGNhKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTM1NDQ9c3RhdGljIGludCBubDgwMjExX2pvaW5faWJzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMzU5MS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEzNTkyOlxcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGluZm8tXFx1MDAzZWF0dHJzLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTM1OTMtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpYnNzLmNoYW5kZWYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ1ODM9c3RhdGljIGludCBubDgwMjExX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NjIyLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ2MjM6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ2MjQtXFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ3Nzc9c3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ4NTItXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ4NTM6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDg1NC1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNoYW5kZWYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTUyNTU9c3RhdGljIGludCBubDgwMjExX2pvaW5fb2NiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MjYxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTUyNjI6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNTI2My1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNldHVwLmNoYW5kZWYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTUyNzg9c3RhdGljIGludCBubDgwMjExX2pvaW5fbWVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNTMzNy1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNTMzODpcXHRcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MzM5LVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2V0dXAuY2hhbmRlZiwgZmFsc2UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzMzNT1zdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzM1NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3MzU2OlxcdHJldCA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTczNTctXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZjaGFuZGVmLCBmYWxzZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NzY3PW5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzgzLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3ODQ6XFx0cmV0dXJuIG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3ODUtXFx0XFx0XFx0XFx0ICAgICBjaGFuZGVmLCBmYWxzZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDAxPXN0YXRpYyBpbnQgbmw4MDIxMV90ZGxzX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDI3LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0Mjg6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0MjktXFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmg9MTk9c3RhdGljIGlubGluZSB1NjQgd2Rldl9pZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuaC0yNC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oOjI1OmludCBubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmgtMjYtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvd2lyZWxlc3MvcG1zci5jPTMwOT1zdGF0aWMgaW50IHBtc3JfcGFyc2VfcGVlcihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcG1zci5jLTM1NC1cXG5uZXQvd2lyZWxlc3MvcG1zci5jOjM1NTpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3MvcG1zci5jLTM1Ni1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm91dC1cXHUwMDNlY2hhbmRlZiwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTo0Mi44MDgyNDYzNzdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNDc2OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgQ2hhbm5lbCBQYXJzaW5nIExvZ2ljKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLWV2YWN1YXRpb24gYW5kIE5BTiBjaGFubmVsIHBhcnNpbmcgd2l0aGluIHRoZSBgbmw4MDIxMWAgY29udGV4dC4gTGV0J3MgemVybyBpbiBvbiBgbmw4MDIxMV9wYXJzZV9uYW5fY2hhbm5lbGAgYW5kIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHN1YnRsZSBkaWZmZXJlbmNlcyBvciBwb3RlbnRpYWwgb3ZlcmxhcCBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2ltaWxhcml0aWVzIGluIHRoZWlyIGNvcmUgZnVuY3Rpb24gb2YgZGVhbGluZyB3aXRoIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gY29tcGFyZSB0aGVpciBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3MzM1IGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgdG8gZmlndXJlIG91dCBhbnkgbnVhbmNlcy4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlIGhvdyB0aGV5IGhhbmRsZSBjaGFubmVsIHBhcmFtZXRlcnMgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbmNvbnNpc3RlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTo0NC45MzMwMTg1OTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MzM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzMzNTpcXHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjE3MzM2OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCxcXG4xNzMzNzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuMTczMzg6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgKm5hbl9jaGFubmVscyxcXG4xNzMzOTpcXHRcXHRcXHRcXHRcXHQgICAgIHU4IGluZGV4LCBib29sIGxvY2FsKVxcbjE3MzQwOlxcdHtcXG4xNzM0MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqY2hhbm5lbF9wYXJzZWQgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuMTczNDI6XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7XFxuMTczNDM6XFx0XFx0dTggbl9yeF9uc3M7XFxuMTczNDQ6XFx0XFx0aW50IHJldDtcXG4xNzM0NTpcXHRcXG4xNzM0NjpcXHRcXHRjaGFubmVsX3BhcnNlZCA9IGtjYWxsb2MoTkw4MDIxMV9BVFRSX01BWCArIDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxcbjE3MzQ3OlxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4xNzM0ODpcXHRcXHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxcbjE3MzQ5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3MzUwOlxcdFxcbjE3MzUxOlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXFxuMTczNTI6XFx0XFx0XFx0XFx0ICAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTczNTM6XFx0XFx0aWYgKHJldClcXG4xNzM1NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MzU1OlxcdFxcbjE3MzU2OlxcdFxcdHJldCA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxcbjE3MzU3OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y2hhbmRlZiwgZmFsc2UpO1xcbjE3MzU4OlxcdFxcdGlmIChyZXQpXFxuMTczNTk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNzM2MDpcXHRcXG4xNzM2MTpcXHRcXHRpZiAoY2hhbmRlZi5jaGFuLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF82R0haKSB7XFxuMTczNjI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coaW5mby1cXHUwMDNlZXh0YWNrLFxcbjE3MzYzOlxcdFxcdFxcdFxcdCAgICAgICBcXFwiNiBHSHogYmFuZCBpcyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuMTczNjQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE3MzY1OlxcdFxcdH1cXG4xNzM2NjpcXHRcXG4xNzM2NzpcXHRcXHRpZiAoIWNmZzgwMjExX3JlZ19jYW5fYmVhY29uKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgXFx1MDAyNmNoYW5kZWYsXFxuMTczNjg6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0lGVFlQRV9OQU4pKSB7XFxuMTczNjk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWwsXFxuMTczNzA6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJDaGFubmVsIGluIE5BTiBzY2hlZHVsZSBpcyBub3QgYWxsb3dlZCBmb3IgTkFOIG9wZXJhdGlvblxcXCIpO1xcbjE3MzcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MzcyOlxcdFxcdH1cXG4xNzM3MzpcXHRcXG4xNzM3NDpcXHRcXHRpZiAobG9jYWwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6NDQuOTM0NjYyMjczWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyNDg5MjAxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gc3VidGxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBsdXJraW5nIGFyb3VuZC4gVGhlIGNvZGUgaXRzZWxmIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGhhbmRsaW5nIHRoZSBzZXR0aW5nIG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHMgZm9yIE5BTi5cblxuRmlyc3QsIEkgZXhhbWluZWQgdGhlIGZsb3c6IEl0IHBhcnNlcyBjaGFubmVsIGF0dHJpYnV0ZXMgZnJvbSBhIE5ldGxpbmsgbWVzc2FnZSwgYWxsb2NhdGVzIGEgc3RydWN0dXJlIChgY2hhbm5lbHNgKSB0byBob2xkIHRoZSBjaGFubmVsIGRlZmluaXRpb25zLCBwb3B1bGF0ZXMgaXQsIGFuZCB0aGVuIHBhc3NlcyBpdCBhbG9uZy4gSSBub3RlZCB0aGF0IGV2ZW4gaWYgYG5fY2hhbm5lbHNgIGlzIHplcm8gKG1lYW5pbmcgbm8gY2hhbm5lbCBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZCksIHRoZSBhbGxvY2F0aW9uIHN0aWxsIHdvcmtzIGNvcnJlY3RseSwgYWxsb2NhdGluZyBhIHN0cnVjdCB3aXRoIGEgemVyby1sZW5ndGggYXJyYXkuIFRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIHdpdGggbm8gaWxsIGVmZmVjdHMuXG5cbk5vdywgSSBwYWlkIGNsb3NlIGF0dGVudGlvbiB0byB3aGVyZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gQm90aCBgY2hhbm5lbHNgIGFuZCB0aGUgaW50ZXJtZWRpYXJ5IGBjaGFubmVsX3BhcnNlZGAgd2l0aGluIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgIGFyZSB6ZXJvZWQgdmlhIGBremFsbG9jYCBvciBga2NhbGxvY2AuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4gSSBjb25maXJtZWQgdGhhdCBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBwcm9wZXJseSBwb3B1bGF0ZXMgdGhlIGZpZWxkcyBhbmQgdGhhdCBhbGwgZmllbGRzIGluIGBzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNgIChvciBpdHMgZXF1aXZhbGVudHMpIGFyZSBleHBsaWNpdGx5IHNldC4gVGhlcmUncyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtpbmcgaW50byB1c2VyIHNwYWNlIHZpYSBjb3BpZXMgb3IgcmVzcG9uc2VzLiBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGUgY29yZSBsb2dpYyBoYW5kbGVzIGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIG1lbW9yeSBpbiBhIHNhZmUgbWFubmVyLiBQb3RlbnRpYWwgY29uY3VycmVuY3ksIGluZGV4LXJlbGF0ZWQgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGxpa2VseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gb3IgZGF0YSBsZWFrZWQgYmFjayB0byB1c2Vyc3BhY2UsIGFuZCBubyBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIHdpdGhvdXQgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBqdXN0aWZpY2F0aW9uIHRvIHJ1biBLTVNBTiBmb3IgdGhpcy4gV2UgY2FuIHNhZmVseSBtYXJrIHRoaXMgcGF0Y2ggYXMgbm90IG5lZWRpbmcgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzc5LCJPdXRwdXRUb2tlbnMiOjI5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTo1My4xODM1ODU2NTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIGFuZCBtYWM4MDIxMS9jZmc4MDIxMSBoYW5kbGVycyB0byBtYXJrIGNlcnRhaW4gTkFOIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIGFzIG5vbi1ldmFjdWFibGUuXFxuXFxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XFxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGl0IGlzIGEgc2V0dGVyIGNvbW1hbmQgcmV0dXJuaW5nIG9ubHkgYW4gZXJyb3Igc3RhdHVzKSwgcHJlY2x1ZGluZyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLlxcbjIuIEFsbCBkeW5hbWljIGFsbG9jYXRpb25zIChzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzLCBubGF0dHIgYXJyYXkpIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChremFsbG9jLCBrY2FsbG9jKSBhbmQgYXV0b21hdGljYWxseSBtYW5hZ2VkIHZpYSBfX2ZyZWUoa2ZyZWUpLlxcbjMuIFRoZSBuZXcgYm9vbCBmaWVsZCBgbm9fZXZhY3VhdGVgIGluIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoY2xlYXJlZCB0byBmYWxzZSBhbmQgc2V0IHRvIHRydWUgd2hlbiBtYXRjaGluZykuXFxuNC4gTm8gYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLlxcblxcbkFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2NraW5nIGlzc3VlcyBpbiB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXJzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGNvbmZpZ3VyYXRpb25zLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyBhbmQgbWFjODAyMTEvY2ZnODAyMTEgaGFuZGxlcnMgdG8gbWFyayBjZXJ0YWluIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlLlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChpdCBpcyBhIHNldHRlciBjb21tYW5kIHJldHVybmluZyBvbmx5IGFuIGVycm9yIHN0YXR1cyksIHByZWNsdWRpbmcga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy5cXG4yLiBBbGwgZHluYW1pYyBhbGxvY2F0aW9ucyAoc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscywgbmxhdHRyIGFycmF5KSBhcmUgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgYWxsb2NhdG9ycyAoa3phbGxvYywga2NhbGxvYykgYW5kIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCB2aWEgX19mcmVlKGtmcmVlKS5cXG4zLiBUaGUgbmV3IGJvb2wgZmllbGQgYG5vX2V2YWN1YXRlYCBpbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGNsZWFyZWQgdG8gZmFsc2UgYW5kIHNldCB0byB0cnVlIHdoZW4gbWF0Y2hpbmcpLlxcbjQuIE5vIGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9ja2luZyBpc3N1ZXMgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVycywgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 21:29:35 +0000 UTC FinishedAt: 2026-09-07 22:19:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "aa0e38da-2215-4e11-b6b4-9b43cd93dcba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_nan_set_non_evac_channels", "nl80211_parse_non_evac_channel", "cfg80211_nan_set_non_evac_channels", "ieee80211_set_nan_non_evac_channels", "ieee80211_nan_set_non_evac_channels", "ieee80211_nan_find_evac_chan" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyBhbmQgbWFjODAyMTEvY2ZnODAyMTEgaGFuZGxlcnMgdG8gbWFyayBjZXJ0YWluIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlLlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChpdCBpcyBhIHNldHRlciBjb21tYW5kIHJldHVybmluZyBvbmx5IGFuIGVycm9yIHN0YXR1cyksIHByZWNsdWRpbmcga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy5cbjIuIEFsbCBkeW5hbWljIGFsbG9jYXRpb25zIChzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzLCBubGF0dHIgYXJyYXkpIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChremFsbG9jLCBrY2FsbG9jKSBhbmQgYXV0b21hdGljYWxseSBtYW5hZ2VkIHZpYSBfX2ZyZWUoa2ZyZWUpLlxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cbjQuIE5vIGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE3MTlhMmFhYzFkNzM5MjlkNmJhYTA1N2I4MWE5ZTlkZmU0Y2M3YzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIyOjE4OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCA2NDYxYTdiZDAxNjlkLi41OWQ3NmEwZGFmMmNiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTQyNTYsNiAmIzQzOzQyNTYsMjEgQEAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzIC0gTkFOIG5vbi1ldmFjdWFibGUgY2hhbm5lbHNcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90XG4mIzQzOyAqIGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLlxuJiM0MzsgKlxuJiM0MzsgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLlxuJiM0MzsgKiBAY2hhbmRlZnM6IGFycmF5IG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIEVhY2hcbiYjNDM7ICpcdG11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyB7XG4mIzQzO1x0dTggbl9jaGFubmVscztcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9tYXAgLSBOQU4gcGVlciBzY2hlZHVsZSBtYXBcbiAgKlxuQEAgLTUyMDQsNiAmIzQzOzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7XG4gICpcdHNjaGVkdWxlLCB0aGUgZnVsbCBuZXcgc2NoZWR1bGUgaXMgcHJvdmlkZWQgLSBwYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdFxuICAqXHRzdXBwb3J0ZWQsIGFuZCB0aGUgbmV3IHNjaGVkdWxlIGNvbXBsZXRlbHkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZS5cbiAgKlxuJiM0MzsgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXRcbiYjNDM7ICpcdG11c3Qgbm90IGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLiBUaGUgcHJvdmlkZWQgbGlzdFxuJiM0MzsgKlx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldDsgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmVcbiYjNDM7ICpcdG5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlXG4mIzQzOyAqXHRndWFyYW50ZWVkIGJ5IGNmZzgwMjExIHRvIGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS5cbiYjNDM7ICpcbiAgKiBAc2V0X211bHRpY2FzdF90b191bmljYXN0OiBjb25maWd1cmUgbXVsdGljYXN0IHRvIHVuaWNhc3QgY29udmVyc2lvbiBmb3IgQlNTXG4gICpcbiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpc1xuQEAgLTU1OTAsNiAmIzQzOzU2MTEsOSBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHtcbiBcdGludFx0KCpuYW5fc2V0X3BlZXJfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4mIzQzO1x0aW50XHQoKm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiBcdGludFx0KCpzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgICAgY29uc3QgYm9vbCBlbmFibGVkKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuaW5kZXggN2JiNDYxODA2NWI2Ny4uMzNmZjAxOGMzM2VjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC05MjMsMTIgJiM0Mzs5MjMsMTQgQEAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiB7XG4gICogQGNoYW5uZWxfZW50cnk6IHRoZSBDaGFubmVsIEVudHJ5IGJsb2IgYXMgZGVmaW5lZCBpbiBXaS1GaSBBd2FyZVxuICAqXHQoVE0pIDQuMCBzcGVjaWZpY2F0aW9uIFRhYmxlIDEwMCAoQ2hhbm5lbCBFbnRyeSBmb3JtYXQgZm9yIHRoZSBOQU5cbiAgKlx0QXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuXG4mIzQzOyAqIEBub19ldmFjdWF0ZTogaWYgc2V0LCB0aGlzIGNoYW5uZWwgbXVzdCBub3QgYmUgZXZhY3VhdGVkXG4gICovXG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5fcmVxIGNoYW5yZXE7XG4gXHR1OCBuZWVkZWRfcnhfY2hhaW5zO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjtcbiBcdHU4IGNoYW5uZWxfZW50cnlbNl07XG4mIzQzO1x0Ym9vbCBub19ldmFjdWF0ZTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5pbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuQEAgLTEzODMsNiAmIzQzOzEzODMsMTMgQEBcbiAgKlx0ZnJvbSB0aGUgZGV2aWNlIHRvIHBlcmZvcm0gYW4gYW5ub3VuY2VkIHNjaGVkdWxlIHVwZGF0ZS4gU2VlXG4gICpcdCVOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEIGZvciBtb3JlIGRldGFpbHMuXG4gICpcdElmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS5cbiYjNDM7ICpcdFNldHRpbmcgYSBuZXcgc2NoZWR1bGUgaXMgYWx3YXlzIGFsbG93ZWQgYW5kIGlzIG5ldmVyIHRyZWF0ZWQgYXMgYW5cbiYjNDM7ICpcdGV2YWN1YXRpb24sIGV2ZW4gaWYgaXQgcmVtb3ZlcyBjaGFubmVscyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXJrZWQgYXNcbiYjNDM7ICpcdG5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlXG4mIzQzOyAqXHRub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgc2NoZWR1bGU6XG4mIzQzOyAqXHRjaGFubmVscyB0aGF0IHJlbWFpbiBpbiB0aGUgbmV3IHNjaGVkdWxlIGtlZXAgdGhlaXIgbWFya2luZywgY2hhbm5lbHNcbiYjNDM7ICpcdHRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmVcbiYjNDM7ICpcdGV2YWN1YWJsZSBieSBkZWZhdWx0LlxuICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdFxuICAqXHRhIGRlZmVycmVkIGxvY2FsIE5BTiBzY2hlZHVsZSB1cGRhdGUgKHJlcXVlc3RlZCB3aXRoXG4gICpcdCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGFuZCAlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRClcbkBAIC0xNDI3LDYgJiM0MzsxNDM0LDI4IEBAXG4gICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieVxuICAqXHRpdHMgJU5MODAyMTFfQVRUUl9XREVWIGludGVyZmFjZS5cbiAgKlxuJiM0MzsgKiBATkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUzogU2V0IHRoZSBsaXN0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZVxuJiM0MzsgKlx0Y2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsXG4mIzQzOyAqXHQoJU5MODAyMTFfQ01EX1NUQVJUX05BTiB3YXMgZXhlY3V0ZWQpIGFuZCBhIGxvY2FsIHNjaGVkdWxlIG11c3QgaGF2ZVxuJiM0MzsgKlx0YmVlbiBzZXQgKCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEKS4gVGhlIGNvbW1hbmQgY2FycmllcyB6ZXJvXG4mIzQzOyAqXHRvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYVxuJiM0MzsgKlx0Y2hhbm5lbCAoYnkgaXRzIGNoYW5uZWwgZGVmaW5pdGlvbikgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgdGhhdFxuJiM0MzsgKlx0bXVzdCBub3QgYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBwcm92aWRlZCBsaXN0XG4mIzQzOyAqXHRyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZVxuJiM0MzsgKlx0Y3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsXG4mIzQzOyAqXHRwcm92aWRlZCBjaGFubmVscyBtdXN0IGV4aXN0IGluIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLCBvdGhlcndpc2VcbiYjNDM7ICpcdHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3JcbiYjNDM7ICpcdGltbXV0YWJsZSBzY2hlZHVsZXMsIHdob3NlIGV2YWN1YXRpb24gd291bGQgYnJlYWsgZXhpc3RpbmcgTkRQXG4mIzQzOyAqXHRjb25uZWN0aW9ucy5cbiYjNDM7ICpcdFRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudFxuJiM0MzsgKlx0bG9jYWwgc2NoZWR1bGUgYW5kIG9ubHkgYWZmZWN0cyBldmFjdWF0aW9uIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnM7XG4mIzQzOyAqXHRpdCBkb2VzIG5vdCBwcmV2ZW50IHRoZSBzY2hlZHVsZSBpdHNlbGYgZnJvbSBiZWluZyBjaGFuZ2VkLiBSZW1vdmluZyBhXG4mIzQzOyAqXHRjaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYVxuJiM0MzsgKlx0dXNlci1pbml0aWF0ZWQgY2hhbmdlLCBub3QgYW4gZXZhY3VhdGlvbiwgYW5kIGlzIGFsbG93ZWQgZXZlbiBmb3IgYVxuJiM0MzsgKlx0bm9uLWV2YWN1YWJsZSBjaGFubmVsLiBBY3Jvc3MgYSBzY2hlZHVsZSB1cGRhdGUsIGNoYW5uZWxzIHRoYXQgcmVtYWluXG4mIzQzOyAqXHRrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHlcbiYjNDM7ICpcdGFkZGVkIGNoYW5uZWxzIGFyZSBldmFjdWFibGUgYnkgZGVmYXVsdDsgaXNzdWUgdGhpcyBjb21tYW5kIGFnYWluIHRvXG4mIzQzOyAqXHRjaGFuZ2UgdGhlIG5vbi1ldmFjdWFibGUgc2V0LlxuICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlclxuICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxuICAqL1xuQEAgLTE3MDUsNiAmIzQzOzE3MzQsOCBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMge1xuIFx0Tkw4MDIxMV9DTURfU1RBUlRfUEQsXG4gXHROTDgwMjExX0NNRF9TVE9QX1BELFxuIFxuJiM0MztcdE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsXG4mIzQzO1xuIFx0LyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovXG4gXG4gXHQvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi9cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbmluZGV4IDIzZjRmOWVjODZkMGEuLmNkY2YxZjA1NzcwNzcgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuQEAgLTU5NzMsNiAmIzQzOzU5NzMsMTggQEAgaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc2RhdGEsIHNjaGVkKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7aWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4gXHQuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsXG4gXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsXG5AQCAtNjA5MSw0ICYjNDM7NjEwMyw1IEBAIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbiBcdC5zZXRfZXBjcyA9IGllZWU4MDIxMV9zZXRfZXBjcyxcbiBcdC5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsXG4gXHQubmFuX3NldF9wZWVyX3NjaGVkID0gaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZCxcbiYjNDM7XHQubmFuX3NldF9ub25fZXZhY19jaGFubmVscyA9IGllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggNTNiMGIwOGQzNDU5Ny4uOTI5ZmM4OTMwYTM1ZSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTIwODcsNiAmIzQzOzIwODcsOCBAQCBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbiYjNDM7aW50IGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpO1xuIHZvaWQgaWVlZTgwMjExX25hbl9mcmVlX3BlZXJfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpO1xuIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTtcbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsICpcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbmFuLmMgYi9uZXQvbWFjODAyMTEvbmFuLmNcbmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbmFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9uYW4uY1xuQEAgLTI0OCw2ICYjNDM7MjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO2ludFxuJiM0MztpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNmZzgwMjExIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgYWxsIHByb3ZpZGVkIGNoYW5uZWxzIGJlbG9uZyB0byB0aGVcbiYjNDM7XHQgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlXG4mIzQzO1x0ICogb25lcyBpbiB0aGUgbGlzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cdTAwM2VjaGFubmVscyk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3Blci5jaGFuKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2c2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3BlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldKSkge1xuJiM0MztcdFx0XHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IHRydWU7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4ge1xuQEAgLTc4Niw2ICYjNDM7ODE1LDEwIEBAIGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXG4gXHRcdHVzYWJsZV9jaGFubmVscyYjNDM7JiM0Mzs7XG4gXG4mIzQzO1x0XHQvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqL1xuJiM0MztcdFx0aWYgKGNoYW4tXHUwMDNlbm9fZXZhY3VhdGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0Y2hhbl9jdHggPSBjb250YWluZXJfb2YoY2hhbi1cdTAwM2VjaGFuY3R4X2NvbmYsXG4gXHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMzI1LDYgJiM0MzszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5Lm10eCk7XG4mIzQzO1xuJiM0MztcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gfHwgIXdkZXZfcnVubmluZyh3ZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERvbiYjMzk7dCBhbGxvdyB1cGRhdGluZyB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscyB3aGlsZSBhIGRlZmVycmVkXG4mIzQzO1x0ICogc2NoZWR1bGUgdXBkYXRlIGlzIHBlbmRpbmcsIGFzIHRoZSBzZXQgb2YgY2hhbm5lbHMgbWF5IHN0aWxsIGNoYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2Mgd2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldKSkge1xuJiM0MztcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZm91bmQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBjZmc4MDIxMV9zdG9wX3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IGI0NjEwZjY2ODVkY2IuLjRlZTQ4YjkzNzA4MDAgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtNTY1LDYgJiM0Mzs1NjUsMTAgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xuIFxuJiM0MztpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiYjNDM7XG4gc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXG4gY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICp0bXAsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IGU1ODVkYTFkNzljOWUuLmY0NDAzNmFkNDNmYjUgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTc3NjMsNiAmIzQzOzE3NzYzLDY5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpjaGFubmVsLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPVxuJiM0MztcdFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxuJiM0MztcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXG4mIzQzO1x0XHRcdCAgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuJiM0MztcdFx0XHRcdCAgICAgY2hhbmRlZiwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbiYjNDM7XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbiYjNDM7XHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RDT05OO1xuJiM0MztcbiYjNDM7XHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4mIzQzO1x0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbiYjNDM7XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbiYjNDM7XHRcdG5fY2hhbm5lbHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID1cbiYjNDM7XHRcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcbiYjNDM7XHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjaGFubmVscylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcbiYjNDM7XG4mIzQzO1x0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbiYjNDM7XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBubDgwMjExX2dldF9wcm90b2NvbF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjA2MTksNiAmIzQzOzIwNjgyLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbiBcdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuIFx0XHQuaW50ZXJuYWxfZmxhZ3MgPSBJRkxBR1MoTkw4MDIxMV9GTEFHX05FRURfV0RFVl9VUCksXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5jbWQgPSBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLFxuJiM0MztcdFx0LmRvaXQgPSBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMsXG4mIzQzO1x0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4mIzQzO1x0XHQuaW50ZXJuYWxfZmxhZ3MgPSBJRkxBR1MoTkw4MDIxMV9GTEFHX05FRURfV0RFVl9VUCksXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmw4MDIxMV9mYW0gX19yb19hZnRlcl9pbml0ID0ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLjI2OTI1OGM5NGE0MmEgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbkBAIC0xMDkzLDYgJiM0MzsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dHJhY2VfcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGNoYW5uZWxzKTtcbiYjNDM7XHRpZiAocmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9ub25fZXZhY19jaGFubmVscylcbiYjNDM7XHRcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBjaGFubmVscyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X3N0YXJ0X3BkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbmluZGV4IDhjMmE5MWI4NWMzOTYuLjQzNWRjNThjYWZiZWQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbkBAIC0yNDgzLDYgJiM0MzsyNDgzLDMxIEBAIFRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkLFxuIFx0KVxuICk7XG4gXG4mIzQzO1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyxcbiYjNDM7XHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuJiM0MztcdFx0IHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKSxcbiYjNDM7XHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBjaGFubmVscyksXG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdFdJUEhZX0VOVFJZXG4mIzQzO1x0XHRXREVWX0VOVFJZXG4mIzQzO1x0XHRfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKVxuJiM0MztcdFx0X19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHMpXG4mIzQzO1x0KSxcbiYjNDM7XHRUUF9mYXN0X2Fzc2lnbihcbiYjNDM7XHRcdHUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTtcbiYjNDM7XG4mIzQzO1x0XHRXSVBIWV9BU1NJR047XG4mIzQzO1x0XHRXREVWX0FTU0lHTjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbl9jaGFubmVscyA9IGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVsczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGZyZXFzW2ldID0gY2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0uY2hhbi1cdTAwM2VjZW50ZXJfZnJlcTtcbiYjNDM7XHQpLFxuJiM0MztcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCYjMzQ7LCBcJiMzNDsgV0RFVl9QUl9GTVQgXCYjMzQ7LCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzXCYjMzQ7LFxuJiM0MztcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZW5fY2hhbm5lbHMsXG4mIzQzO1x0XHQgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksXG4mIzQzO1x0XHRcdFx0X19lbnRyeS1cdTAwM2VuX2NoYW5uZWxzLCBzaXplb2YodTMyKSkpXG4mIzQzOyk7XG4mIzQzO1xuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X21hY19hY2wsXG4gXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHQgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBnZW5lcmljIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIHRvIGNvbmZpZ3VyZSBub24tZXZhY3VhYmxlIE5BTiBzY2hlZHVsZSBjaGFubmVscy4gSXQgYWRkcyBuZXRsaW5rIGF0dHJpYnV0ZSBwYXJzaW5nLCB2ZXJpZmljYXRpb24gbG9naWMgYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSBpbiBjZmc4MDIxMSwgZHJpdmVyL3N0YWNrIG9wcyBpbiBtYWM4MDIxMSwgYW5kIG1vZGlmaWVzIGNoYW5uZWwgZXZhY3VhdGlvbiBzZWxlY3Rpb24gaW4gbWFjODAyMTEuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIHNvY2tldHMgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzE5YTJhYWMxZDczOTI5ZDZiYWEwNTdiODFhOWU5ZGZlNGNjN2M3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaApAQCAtNDI1Niw2ICYjNDM7NDI1NiwyMSBAQCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVscwomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90CiYjNDM7ICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLgomIzQzOyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaAomIzQzOyAqCW11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgewomIzQzOwl1OCBuX2NoYW5uZWxzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX21hcCAtIE5BTiBwZWVyIHNjaGVkdWxlIG1hcAogICoKQEAgLTUyMDQsNiAmIzQzOzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7CiAgKglzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3QKICAqCXN1cHBvcnRlZCwgYW5kIHRoZSBuZXcgc2NoZWR1bGUgY29tcGxldGVseSByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLgogICoKJiM0MzsgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0OyBjaGFubmVscyBvZiB0aGUgY3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZQomIzQzOyAqCW5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlCiYjNDM7ICoJZ3VhcmFudGVlZCBieSBjZmc4MDIxMSB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuCiYjNDM7ICoKICAqIEBzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Q6IGNvbmZpZ3VyZSBtdWx0aWNhc3QgdG8gdW5pY2FzdCBjb252ZXJzaW9uIGZvciBCU1MKICAqCiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpcwpAQCAtNTU5MCw2ICYjNDM7NTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMgewogCWludAkoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpOwomIzQzOwlpbnQJKCpuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiAJaW50CSgqc2V0X211bHRpY2FzdF90b191bmljYXN0KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgIGNvbnN0IGJvb2wgZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTkyMywxMiAmIzQzOzkyMywxNCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIHsKICAqIEBjaGFubmVsX2VudHJ5OiB0aGUgQ2hhbm5lbCBFbnRyeSBibG9iIGFzIGRlZmluZWQgaW4gV2ktRmkgQXdhcmUKICAqCShUTSkgNC4wIHNwZWNpZmljYXRpb24gVGFibGUgMTAwIChDaGFubmVsIEVudHJ5IGZvcm1hdCBmb3IgdGhlIE5BTgogICoJQXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuCiYjNDM7ICogQG5vX2V2YWN1YXRlOiBpZiBzZXQsIHRoaXMgY2hhbm5lbCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQKICAqLwogc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxOwogCXU4IG5lZWRlZF9yeF9jaGFpbnM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjsKIAl1OCBjaGFubmVsX2VudHJ5WzZdOwomIzQzOwlib29sIG5vX2V2YWN1YXRlOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAppbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKQEAgLTEzODMsNiAmIzQzOzEzODMsMTMgQEAKICAqCWZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIGFuIGFubm91bmNlZCBzY2hlZHVsZSB1cGRhdGUuIFNlZQogICoJJU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQgZm9yIG1vcmUgZGV0YWlscy4KICAqCUlmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS4KJiM0MzsgKglTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuCiYjNDM7ICoJZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhcwomIzQzOyAqCW5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlCiYjNDM7ICoJbm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOgomIzQzOyAqCWNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVscwomIzQzOyAqCXRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmUKJiM0MzsgKglldmFjdWFibGUgYnkgZGVmYXVsdC4KICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdAogICoJYSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aAogICoJJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgYW5kICVOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEKQpAQCAtMTQyNyw2ICYjNDM7MTQzNCwyOCBAQAogICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieQogICoJaXRzICVOTDgwMjExX0FUVFJfV0RFViBpbnRlcmZhY2UuCiAgKgomIzQzOyAqIEBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTOiBTZXQgdGhlIGxpc3Qgb2YgTkFOIGxvY2FsIHNjaGVkdWxlCiYjNDM7ICoJY2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsCiYjNDM7ICoJKCVOTDgwMjExX0NNRF9TVEFSVF9OQU4gd2FzIGV4ZWN1dGVkKSBhbmQgYSBsb2NhbCBzY2hlZHVsZSBtdXN0IGhhdmUKJiM0MzsgKgliZWVuIHNldCAoJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpLiBUaGUgY29tbWFuZCBjYXJyaWVzIHplcm8KJiM0MzsgKglvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYQomIzQzOyAqCWNoYW5uZWwgKGJ5IGl0cyBjaGFubmVsIGRlZmluaXRpb24pIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZQomIzQzOyAqCWN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJlY29tZSBldmFjdWFibGUgYWdhaW4uIEFsbAomIzQzOyAqCXByb3ZpZGVkIGNoYW5uZWxzIG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUsIG90aGVyd2lzZQomIzQzOyAqCXRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3IKJiM0MzsgKglpbW11dGFibGUgc2NoZWR1bGVzLCB3aG9zZSBldmFjdWF0aW9uIHdvdWxkIGJyZWFrIGV4aXN0aW5nIE5EUAomIzQzOyAqCWNvbm5lY3Rpb25zLgomIzQzOyAqCVRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudAomIzQzOyAqCWxvY2FsIHNjaGVkdWxlIGFuZCBvbmx5IGFmZmVjdHMgZXZhY3VhdGlvbiBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zOwomIzQzOyAqCWl0IGRvZXMgbm90IHByZXZlbnQgdGhlIHNjaGVkdWxlIGl0c2VsZiBmcm9tIGJlaW5nIGNoYW5nZWQuIFJlbW92aW5nIGEKJiM0MzsgKgljaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYQomIzQzOyAqCXVzZXItaW5pdGlhdGVkIGNoYW5nZSwgbm90IGFuIGV2YWN1YXRpb24sIGFuZCBpcyBhbGxvd2VkIGV2ZW4gZm9yIGEKJiM0MzsgKglub24tZXZhY3VhYmxlIGNoYW5uZWwuIEFjcm9zcyBhIHNjaGVkdWxlIHVwZGF0ZSwgY2hhbm5lbHMgdGhhdCByZW1haW4KJiM0MzsgKglrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHkKJiM0MzsgKglhZGRlZCBjaGFubmVscyBhcmUgZXZhY3VhYmxlIGJ5IGRlZmF1bHQ7IGlzc3VlIHRoaXMgY29tbWFuZCBhZ2FpbiB0bwomIzQzOyAqCWNoYW5nZSB0aGUgbm9uLWV2YWN1YWJsZSBzZXQuCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0xNzA1LDYgJiM0MzsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHsKIAlOTDgwMjExX0NNRF9TVEFSVF9QRCwKIAlOTDgwMjExX0NNRF9TVE9QX1BELAogCiYjNDM7CU5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsCiYjNDM7CiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCAyM2Y0ZjllYzg2ZDBhLi5jZGNmMWYwNTc3MDc3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC01OTczLDYgJiM0Mzs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzZGF0YSwgc2NoZWQpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiYjNDM7CQkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpOwomIzQzOwomIzQzOwlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2RlbF9pZmFjZSwKQEAgLTYwOTEsNCAmIzQzOzYxMDMsNSBAQCBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLAogCS5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsCiAJLm5hbl9zZXRfcGVlcl9zY2hlZCA9IGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQsCiYjNDM7CS5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzID0gaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA1M2IwYjA4ZDM0NTk3Li45MjlmYzg5MzBhMzVlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjA4Nyw2ICYjNDM7MjA4Nyw4IEBAIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIGludCBpZWVlODAyMTFfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKJiM0MztpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiYjNDM7CQkJCQlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiB2b2lkIGllZWU4MDIxMV9uYW5fZnJlZV9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTsKIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL25hbi5jIGIvbmV0L21hYzgwMjExL25hbi5jCmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9uYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbmFuLmMKQEAgLTI0OCw2ICYjNDM7MjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztpbnQKJiM0MztpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKJiM0MzsJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSAmYW1wO3NkYXRhLSZndDt2aWYuY2ZnLm5hbl9zY2hlZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogY2ZnODAyMTEgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBhbGwgcHJvdmlkZWQgY2hhbm5lbHMgYmVsb25nIHRvIHRoZQomIzQzOwkgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlCiYjNDM7CSAqIG9uZXMgaW4gdGhlIGxpc3QuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGludCBqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoc2NoZWRfY2ZnLSZndDtjaGFubmVscyk7IGomIzQzOyYjNDM7KQomIzQzOwkJc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpbnQgaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKHNjaGVkX2NmZy0mZ3Q7Y2hhbm5lbHMpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIuY2hhbikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJaWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKCZhbXA7c2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7Y2hhbm5lbHMtJmd0O2NoYW5kZWZzW2ldKSkgewomIzQzOwkJCQlzY2hlZF9jZmctJmd0O2NoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKQogewpAQCAtNzg2LDYgJiM0Mzs4MTUsMTAgQEAgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAogCQl1c2FibGVfY2hhbm5lbHMmIzQzOyYjNDM7OwogCiYjNDM7CQkvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqLwomIzQzOwkJaWYgKGNoYW4tJmd0O25vX2V2YWN1YXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQljaGFuX2N0eCA9IGNvbnRhaW5lcl9vZihjaGFuLSZndDtjaGFuY3R4X2NvbmYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMzI1LDYgJiM0MzszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkZXYtJmd0O3dpcGh5Lm10eCk7CiYjNDM7CiYjNDM7CWlmICh3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWQKJiM0MzsJICogc2NoZWR1bGUgdXBkYXRlIGlzIHBlbmRpbmcsIGFzIHRoZSBzZXQgb2YgY2hhbm5lbHMgbWF5IHN0aWxsIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CWlmICh3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVsczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoJmFtcDt3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmc1tqXSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pKSB7CiYjNDM7CQkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFmb3VuZCkKJiM0MzsJCQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHJkZXYsIHdkZXYsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC01NjUsNiAmIzQzOzU2NSwxMCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIAomIzQzO2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiYjNDM7CiBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKIGNmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggZTU4NWRhMWQ3OWM5ZS4uZjQ0MDM2YWQ0M2ZiNSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xNzc2Myw2ICYjNDM7MTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPQomIzQzOwkJa2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLAomIzQzOwkJCUdGUF9LRVJORUwpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWNoYW5uZWxfcGFyc2VkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsCiYjNDM7CQkJICAgICAgIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tJmd0O2V4dGFjaywgY2hhbm5lbF9wYXJzZWQsCiYjNDM7CQkJCSAgICAgY2hhbmRlZiwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKJiM0MzsJaW50IHJlbSwgaSA9IDAsIG5fY2hhbm5lbHMgPSAwOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpjaGFubmVsOwomIzQzOwomIzQzOwlpZiAod2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVOT1RDT05OOwomIzQzOwomIzQzOwkvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovCiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkKJiM0MzsJCW5fY2hhbm5lbHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID0KJiM0MzsJCWt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSwKJiM0MzsJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjaGFubmVscykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljaGFubmVscy0mZ3Q7bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CiYjNDM7CiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChyZGV2LCBjaGFubmVsLCBpbmZvLAomIzQzOwkJCQkJCSAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CkBAIC0yMDYxOSw2ICYjNDM7MjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0gewogCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJCS5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUywKJiM0MzsJCS5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLAomIzQzOwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAomIzQzOwkJLmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLAomIzQzOwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLjI2OTI1OGM5NGE0MmEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCkBAIC0xMDkzLDYgJiM0MzsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0MztyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXRyYWNlX3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscygmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBjaGFubmVscyk7CiYjNDM7CWlmIChyZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpCiYjNDM7CQlyZXQgPSByZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwKJiM0MzsJCQkJCQkJICAgY2hhbm5lbHMpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgcmRldl9zdGFydF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKaW5kZXggOGMyYTkxYjg1YzM5Ni4uNDM1ZGM1OGNhZmJlZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKQEAgLTI0ODMsNiAmIzQzOzI0ODMsMzEgQEAgVFJBQ0VfRVZFTlQocmRldl9uYW5fc2V0X3BlZXJfc2NoZWQsCiAJKQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscywKJiM0MzsJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksCiYjNDM7CVRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSwKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSgKJiM0MzsJCVdJUEhZX0VOVFJZCiYjNDM7CQlXREVWX0VOVFJZCiYjNDM7CQlfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKQomIzQzOwkJX19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzKQomIzQzOwkpLAomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCXUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTsKJiM0MzsKJiM0MzsJCVdJUEhZX0FTU0lHTjsKJiM0MzsJCVdERVZfQVNTSUdOOwomIzQzOwkJX19lbnRyeS0mZ3Q7bl9jaGFubmVscyA9IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOwomIzQzOwkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZnJlcXNbaV0gPSBjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0uY2hhbi0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CSksCiYjNDM7CVRQX3ByaW50ayhXSVBIWV9QUl9GTVQgJiMzNDssICYjMzQ7IFdERVZfUFJfRk1UICYjMzQ7LCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzJiMzNDssCiYjNDM7CQkgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktJmd0O25fY2hhbm5lbHMsCiYjNDM7CQkgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksCiYjNDM7CQkJCV9fZW50cnktJmd0O25fY2hhbm5lbHMsIHNpemVvZih1MzIpKSkKJiM0MzspOwomIzQzOwogVFJBQ0VfRVZFTlQocmRldl9zZXRfbWFjX2FjbCwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCB0YXJnZXQgZm9yIHN5emthbGxlci4gRnJvbSB0aGUgZmlsZSBsaXN0LCBJIHNlZSBhIGZldyBrZXkgYXJlYXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcgdG8gbWU6CgpGaXJzdCwgaXQgdG91Y2hlcyBgY2ZnODAyMTFgIGFuZCBgbWFjODAyMTFgIGhlYXZpbHksIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE5BTiAoTmVpZ2hib3IgQXdhcmVuZXNzIE5ldHdvcmtpbmcpLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGJvdGggYXJlIGNvcmUgd2lyZWxlc3MgbmV0d29ya2luZyBjb21wb25lbnRzLCB3aGljaCBhcmUgbm90b3Jpb3VzIGZvciBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgYnVncy4gSSYjMzk7bSBzZWVpbmcgc3RydWN0dXJlcyBsaWtlIGBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgLCBjYWxsYmFja3MsIGFuZCBgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMU2AuIFRoaXMgYE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFNgIGlzIGtleSBiZWNhdXNlIG5ldGxpbmsgaW50ZXJmYWNlcyBhcmUgcHJpbWUgc3l6a2FsbGVyIHRhcmdldHMuCgpUaGUgcHJlc2VuY2Ugb2YgYG1hYzgwMjExX2h3c2ltYCBpcyBpbnRyaWd1aW5nLiBUaGF0IHZpcnR1YWwgV2lGaSBkcml2ZXIgaXMgY3J1Y2lhbCBmb3Igc3l6a2FsbGVyLiBJZiB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIGBtYWM4MDIxMV9od3NpbWAsIHRoZW4gd2UmIzM5O3JlIGluIGx1Y2sgYmVjYXVzZSB3ZSBjYW4gcmVhZGlseSB0ZXN0IGl0IHdpdGhvdXQgbmVlZGluZyBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYG1hYzgwMjExX2h3c2ltYCBzdXBwb3J0cyBOQU4sIG9yIGlmIG1hYzgwMjExIGV2ZW4gc3VwcG9ydHMgdGhvc2UgTkFOIGNvbW1hbmRzIHZpYSBubDgwMjExLiBJIHNob3VsZCBhbHNvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBtYWtlIHRoaXMgY29kZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG90aGVyd2lzZSBub3QgcmVhY2hhYmxlLgoKVGhlIGZhY3QgdGhhdCBgbmw4MDIxMWAgaXMgYWxzbyBpbnZvbHZlZCBpcyBhIGJpZyBwbHVzLiBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCBgbmw4MDIxMWAsIHNvIGdldHRpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkIHRocm91Z2ggdGhhdCBpbnRlcmZhY2UgaXMgYSBnb29kIHNpZ24uIFRoZSBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYCBhbmQgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgZnVuY3Rpb25zIGxvb2sgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKVG8gcXVpY2tseSBhc3Nlc3MgcmVhY2hhYmlsaXR5LCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkbyBzb21lIGdyZXBzIG9uIHRoZSBrZXJuZWwgc291cmNlIHRvIGlkZW50aWZ5IGNhbGwgc2l0ZXMgYW5kIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NGRzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToyOm9iai0kKENPTkZJR19DRkc4MDIxMSkgJiM0Mzs9IGNmZzgwMjExLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zLW9iai15ICYjNDM7PSB0ZXN0cy9cbi0tXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTI9Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTM6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE0OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNS1cbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE3LVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE4OmNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xubmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5OmlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlPTIzPSQob2JqKS9zaGlwcGVkLWNlcnRzLmM6ICQoc29ydCAkKHdpbGRjYXJkICQoc3JjKS9jZXJ0cy8qLmhleCkpXG4tLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMyOiQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MzM6XHRcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0zNC1cdEAkKGtlY2hvKSBcJiMzNDsgIEdFTiAgICAgJEBcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L3dpcmVsZXNzL2NoYW4uYy0xNzAyLVxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNzAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIHx8XG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDQtXHQgICAgISh3aXBoeS1cdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFx1MDAyNiBSRUdVTEFUT1JZX0VOQUJMRV9SRUxBWF9OT19JUikpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz01ODQ9c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy02NzEtXHRcdFx0ICBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmspO1xubmV0L3dpcmVsZXNzL2NvcmUuYzo2NzI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY3My1cdHJkZXYtXHUwMDNld2lwaHkud2V4dCA9IFx1MDAyNmNmZzgwMjExX3dleHRfaGFuZGxlcjtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTY5My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6Njk0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL2NvcmUuYy02OTUtXHRyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIHw9IFdJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDtcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE0NDM9c3RhdGljIHZvaWQgX2NmZzgwMjExX3VucmVnaXN0ZXJfd2RldihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ4My1cbm5ldC93aXJlbGVzcy9jb3JlLmM6MTQ4NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ4NS1cdGtmcmVlX3NlbnNpdGl2ZSh3ZGV2LVx1MDAzZXdleHQua2V5cyk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNTM4PXZvaWQgY2ZnODAyMTFfbGVhdmVfbG9ja2VkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NjItXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE1NjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE1NjQtXHRcdGtmcmVlKHdkZXYtXHUwMDNld2V4dC5pZSk7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjQ5PXZvaWQgY2ZnODAyMTFfaW5pdF93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjU3LVxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjU4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNjU5LVx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfa2V5ID0gLTE7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNzQyPXN0YXRpYyBpbnQgY2ZnODAyMTFfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE4MTYtXHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbm5ldC93aXJlbGVzcy9jb3JlLmM6MTgxNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgxOC1cdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oPTU3OD1jZmc4MDIxMV9nZXRfNmdoel9wb3dlcl90eXBlKGNvbnN0IHU4ICplbGVtcywgc2l6ZV90IGVsZW1zX2xlbixcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4MC1cbm5ldC93aXJlbGVzcy9jb3JlLmg6NTgxOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4Mi0jZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpXHRXQVJOX09OKGNvbmQpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaD02Mjg9c3RydWN0IGNmZzgwMjExX2NvbG9jYXRlZF9hcCB7XG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuaC02NDQtXG5uZXQvd2lyZWxlc3MvY29yZS5oOjY0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfS1VOSVRfVEVTVClcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ2LSNkZWZpbmUgRVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChzeW0pIEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc3ltKVxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmg9NjUzPXNpemVfdCBjZmc4MDIxMV9nZW5fbmV3X2llKGNvbnN0IHU4ICppZSwgc2l6ZV90IGllbGVuLFxuLS1cbm5ldC93aXJlbGVzcy9jb3JlLmgtNjU4LSNkZWZpbmUgVklTSUJMRV9JRl9DRkc4MDIxMV9LVU5JVCBzdGF0aWNcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjU5OiNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAqL1xubmV0L3dpcmVsZXNzL2NvcmUuaC02NjAtXG4tLVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC00LVxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL2RlYnVnZnMuaC02LXZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIzLVx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xubmV0L3dpcmVsZXNzL2lic3MuYzoyNDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy01MS1cdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L3dpcmVsZXNzL2lic3MuYzo1MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtNTMtXHRtZW1zZXQoXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL2lic3MuYy0xNDAtXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTQyLVx0d2Rldi1cdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cdTAwM2VjaGFuZGVmO1xuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4NC1cdG1lbXNldChcdTAwMjZ3ZGV2LVx1MDAzZXUuaWJzcy5jaGFuZGVmLCAwLCBzaXplb2Yod2Rldi1cdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xubmV0L3dpcmVsZXNzL2lic3MuYzoxODU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE4Ni1cdGlmICghbm93ZXh0KVxuLS1cbm5ldC93aXJlbGVzcy9pYnNzLmM9MTkyPWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTIxMy1cbm5ldC93aXJlbGVzcy9pYnNzLmM6MjE0OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvbWxtZS5jPTI3Nz12b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4tLVxubmV0L3dpcmVsZXNzL21sbWUuYy0yODItXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL21sbWUuYy0yODQtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NDY3PXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA5LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTEwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTExLVx0XHR3ZGV2LVx1MDAzZXdleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzMi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUzMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzNC1cdFx0d2Rldi1cdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTY0NT1zdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTY5MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5My1cdGlmICghZXJyKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgxNz1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDg1OC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA4NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA4NjAtc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJlZ19ydWxlX3BvbGljeVtOTDgwMjExX1JFR19SVUxFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTA5MTA9c3RhdGljIGludCBubDgwMjExX3NldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwOTg4LX1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA5ODk6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlQgKi9cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5OTAtXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTgwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTk4Mi1cdH0sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE5OTg0LVx0e1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjM0ODg9dm9pZCBjZmc4MDIxMV9zY2hlZHVsZV9jaGFubmVsc19jaGVjayhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0OTUtXHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfREZTX0NPTkNVUlJFTlQpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIzNDk2Olx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQ5Ny1cdCAgICAgd2lwaHktXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9NDk3PXN0YXRpYyBpbnQgcmVnX3NjaGVkdWxlX2FwcGx5KGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTUxNi1cbm5ldC93aXJlbGVzcy9yZWcuYzo1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9yZWcuYy01MTgtLyogTWF4IG51bWJlciBvZiBjb25zZWN1dGl2ZSBhdHRlbXB0cyB0byBjb21tdW5pY2F0ZSB3aXRoIENSREEgICovXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTU4Nj1zdGF0aWMgaW5saW5lIGludCBjYWxsX2NyZGEoY29uc3QgY2hhciAqYWxwaGEyKVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy01ODktfVxubmV0L3dpcmVsZXNzL3JlZy5jOjU5MDojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTU5MS1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9Njk3PXN0YXRpYyBib29sIHZhbGlkX2NvdW50cnkoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYy03MjktXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzMwOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9yZWcuYy03MzEtI2luY2x1ZGUgXHUwMDNja2V5cy9hc3ltbWV0cmljLXR5cGUuaFx1MDAzZVxuLS1cbm5ldC93aXJlbGVzcy9yZWcuYz03MzU9c3RhdGljIGludCBfX2luaXQgbG9hZF9idWlsdGluX3JlZ2RiX2tleXModm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ3LVxubmV0L3dpcmVsZXNzL3JlZy5jOjc0ODojaWZkZWYgQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL3JlZy5jLTc0OS1cdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KHNoaXBwZWRfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1Mi0jZW5kaWZcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTQ6XHRpZiAoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlswXSAhPSAmIzM5O1xcMCYjMzk7KVxubmV0L3dpcmVsZXNzL3JlZy5jLTc1NS1cdFx0eDUwOV9sb2FkX2NlcnRpZmljYXRlX2xpc3QoZXh0cmFfcmVnZGJfY2VydHMsXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jPTc5OD1zdGF0aWMgdm9pZCBmcmVlX3JlZ2RiX2tleXJpbmcodm9pZClcbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAwLX1cbm5ldC93aXJlbGVzcy9yZWcuYzo4MDE6I2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQiAqL1xubmV0L3dpcmVsZXNzL3JlZy5jLTgwMi1cbi0tXG5uZXQvd2lyZWxlc3MvcmVnLmM9MjAzOD1ib29sIHJlZ19sYXN0X3JlcXVlc3RfY2VsbF9iYXNlKHZvaWQpXG4tLVxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDItXG5uZXQvd2lyZWxlc3MvcmVnLmM6MjA0MzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDQtLyogQ29yZSBzcGVjaWZpYyBjaGVjayAqL1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MTExNz12b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTIyLVx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbm5ldC93aXJlbGVzcy9zY2FuLmM6MTEyMzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyNC1cdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjUtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjExNjY6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjctXHRpZiAod2Rldi1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2ICFyZXF1ZXN0LVx1MDAzZWluZm8uYWJvcnRlZCkge1xuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9MzQ0Mz12b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTYtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTM1MTgtc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTczNT12b2lkIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzQzLVx0dTggY291bnRyeV9kYXRhbGVuO1xubmV0L3dpcmVsZXNzL3NtZS5jOjc0NDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy03NDUtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTc3NC1cbm5ldC93aXJlbGVzcy9zbWUuYzo3NzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzc2LVx0aWYgKHdleHRldiBcdTAwMjZcdTAwMjYgIWNyLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEwNzk9dm9pZCBfX2NmZzgwMjExX3JvYW1lZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgxLXtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMDgyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEwODMtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTExMzQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTEzNTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMTM2LVx0aWYgKCFpbmZvLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jPTEzNDM9dm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNDgtXHRpbnQgaTtcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3NtZS5jLTEzNTAtXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XG4tLVxubmV0L3dpcmVsZXNzL3NtZS5jLTEzOTQtXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTM5NTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk2LVx0bWVtc2V0KFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XG4tLVxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlPTE9Y2ZnODAyMTEtdGVzdHMteSAmIzQzOz0gbW9kdWxlLm8gZnJhZ21lbnRhdGlvbi5vIHNjYW4ubyB1dGlsLm8gY2hhbi5vXG5uZXQvd2lyZWxlc3MvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKSAmIzQzOz0gY2ZnODAyMTEtdGVzdHMub1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02MzgtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM9NjQ5PXN0cnVjdCBpd19zdGF0aXN0aWNzICpnZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjU2LVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jOjY1NzojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nj1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDEtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwMy1cdGlmIChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM9Mjg9c3RhdGljIHZvaWQgd2lyZWxlc3Nfc2VxX3ByaW50Zl9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMtNDAtI2VuZGlmXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM6NDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMVxubmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jLTQyLVx0XHRpZiAoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSBmb3IgTUFDODAyMTEgYW5kIENGRzgwMjExKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcgZmVlbHMgb2ZmIHdpdGggdGhlIE1BQzgwMjExIGFuZCBDRkc4MDIxMSBzZXR1cCwgYW5kIHRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQsIHdoaWNoIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGFueSByZWNlbnQgY2hhbmdlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IHJlbGF0aW9uc2hpcHMgdGhleSBoYXZlIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN1YnN5c3RlbSBvciBldmVuIHRoZSBrZXJuZWwgYXMgYSB3aG9sZS4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB1bnVzdWFsIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgbGVhZCB0byBhIGNvbmZpZ3VyYXRpb24gaXNzdWUgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQgcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGRzgwMjExfGNvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgODAyLjExIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0gbGl2ZSwgc28gaXQmIzM5O3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQgYW55IGludmVzdGlnYXRpb24gb3IgbW9kaWZpY2F0aW9uIHJlbGF0ZWQgdG8gaXRzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHZhcmlhYmxlcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdHMgdGhhdCBtaWdodCBpbmZvcm0gdGhlIG5leHQgc3RlcHMuIEl0JiMzOTtzIHRpbWUgdG8gc2lmdCB0aHJvdWdoIHRoZSBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gbWFjODAyMTFfaHdzaW0gYW5kIE5BTioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBtYWM4MDIxMV9od3NpbWAgYW5kIE5BTiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoZXRoZXIgaXQmIzM5O3MgY29ycmVjdGx5IGhhbmRsaW5nIHRoZXNlIGZlYXR1cmVzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgcmVsaWVzIG9uIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoYXQmIzM5O3MgYmVpbmcgdXNlZCBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYC5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBsaW5rcyB0byBgaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgLCBpcyBiZWluZyBoYW5kbGVkLiBJcyBpdCBiZWluZyBzZXQgY29ycmVjdGx5PyBJcyBpdCBiZWluZyBjYWxsZWQgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWVzPyBJ4oCZbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byBzZWUgaWYgdGhlIE5BTiBub24tZXZhY3VhdGlvbiBjaGFubmVscyBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGBtYWM4MDIxMV9od3NpbWAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBob3cgYG1hYzgwMjExYCB1c2VzIHRoZSBgbWFjODAyMTFfY29uZmlnX29wc2AgaW4gZ2VuZXJhbC4gSXMgYGh3c2ltYCBvciBgY2ZnODAyMTFgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBidWlsZHM/IFRoaXMgaXMgc29tZXRoaW5nIEkgc2hvdWxkIGFsc28gYmVhciBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWM4MDIxMV9jb25maWdfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01OTc3PWllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU5ODctXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk4ODpjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk4OS1cdC5hZGRfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2FkZF9pZmFjZSxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0zOC1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjM5OmV4dGVybiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHM7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC00MC1cbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTc5Mz1zdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXG4tLVxubmV0L21hYzgwMjExL21haW4uYy04NTItXG5uZXQvbWFjODAyMTEvbWFpbi5jOjg1MzpcdHdpcGh5ID0gd2lwaHlfbmV3X25tKFx1MDAyNm1hYzgwMjExX2NvbmZpZ19vcHMsIHByaXZfc2l6ZSwgcmVxdWVzdGVkX25hbWUpO1xubmV0L21hYzgwMjExL21haW4uYy04NTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyB0aGUgbWFjODAyMTEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgbWFjODAyMTFfY29uZmlnX29wc2AuLi4gdGhhdCYjMzk7cyB0aGUgc2hhcmVkIG9wZXJhdGlvbmFsIHN0cnVjdHVyZSB1c2VkIGFjcm9zcyAqYWxsKiB0aGUgbWFjODAyMTEgZHJpdmVycy4gIFRoYXQgbWVhbnMgaXQmIzM5O3MgZnVuZGFtZW50YWwuIEFuZCBJIGtub3cgYG1hYzgwMjExX2h3c2ltYCBsZXZlcmFnZXMgaXQgdG9vLCBuYXR1cmFsbHkuIE5vdywgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIGdldCB0aGF0IGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIHNldHRpbmcgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBhbmQgYmVoYXZpb3Igb2YgdGhlIGhhcmR3YXJlIHNpbXVsYXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gVmlydHVhbCBXaXJlbGVzcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBkcml2ZXIuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUganVpY3kgZGV0YWlscyBhYm91dCBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFyZSBrZXB0LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kdWxlIGZpdHMgaW50byB0aGUgYnJvYWRlciB3aXJlbGVzcyBsYW5kc2NhcGUgYW5kIHdoYXQmIzM5O3MgY29uZmlndXJhYmxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOQU4gSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uIG9mIE5BTiwgc3BlY2lmaWNhbGx5IHRoZSBldmFjdWF0aW9uIGNoYW5uZWwgbG9naWMuIFRvIGRvIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBtYWM4MDIxMWAgY29kZSBiYXNlLiBNeSBmaXJzdCBzdGVwIGlzIGEgY29kZSByZXZpZXcgb2YgYG5sODAyMTEuY2AsIGBjb3JlLmNgLCBhbmQgYG5hbi5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZmlsZXMgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub24tZXZhY3VhdGlvbiBjaGFubmVscyBhcmUgbWFuYWdlZC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgLCBhbmQgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBhbmQgaG93IHRoZXkgdGllIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBgbmw4MDIxMS5jYCwgYW5kIEkmIzM5O20gdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDE3NzYzIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgd2lsbCBiZSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NzYwOlx0XHRcdFx0bmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9OQU5fQVZBSUxfQkxPQl0pO1xuMTc3NjE6XHRcdH1cbjE3NzYyOlx0XG4xNzc2MzpcdFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xuMTc3NjQ6XHR9XG4xNzc2NTpcdFxuMTc3NjY6XHRzdGF0aWMgaW50XG4xNzc2NzpcdG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4xNzc2ODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpjaGFubmVsLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuMTc3Njk6XHRcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuMTc3NzA6XHR7XG4xNzc3MTpcdFx0c3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPVxuMTc3NzI6XHRcdFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxuMTc3NzM6XHRcdFx0XHRHRlBfS0VSTkVMKTtcbjE3Nzc0Olx0XHRpbnQgcmV0O1xuMTc3NzU6XHRcbjE3Nzc2Olx0XHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxuMTc3Nzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzc3ODpcdFxuMTc3Nzk6XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXG4xNzc4MDpcdFx0XHRcdCAgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4xNzc4MTpcdFx0aWYgKHJldClcbjE3NzgyOlx0XHRcdHJldHVybiByZXQ7XG4xNzc4MzpcdFxuMTc3ODQ6XHRcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuMTc3ODU6XHRcdFx0XHRcdCAgICAgY2hhbmRlZiwgZmFsc2UpO1xuMTc3ODY6XHR9XG4xNzc4NzpcdFxuMTc3ODg6XHRzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTc3ODk6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTc3OTA6XHR7XG4xNzc5MTpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE3NzkyOlx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE3NzkzOlx0XHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XG4xNzc5NDpcdFx0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcbjE3Nzk1Olx0XG4xNzc5NjpcdFx0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbjE3Nzk3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE3Nzk4Olx0XG4xNzc5OTpcdFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4xNzgwMDpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTc4MDE6XHRcbjE3ODAyOlx0XHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4xNzgwMzpcdFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbjE3ODA0Olx0XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbjE3ODA1Olx0XHRcdG5fY2hhbm5lbHMmIzQzOyYjNDM7O1xuMTc4MDY6XHRcbjE3ODA3Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID1cbjE3ODA4Olx0XHRcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcbjE3ODA5Olx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4xNzgxMDpcdFx0aWYgKCFjaGFubmVscylcbjE3ODExOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTc4MTI6XHRcbjE3ODEzOlx0XHRjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcbjE3ODE0Olx0XG4xNzgxNTpcdFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbjE3ODE2Olx0XHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xuMTc4MTc6XHRcdFx0aW50IHJldDtcbjE3ODE4Olx0XG4xNzgxOTpcdFx0XHRyZXQgPSBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcbjE3ODIwOlx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSk7XG4xNzgyMTpcdFx0XHRpZiAocmV0KVxuMTc4MjI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTc4MjM6XHRcdFx0aSYjNDM7JiM0Mzs7XG4xNzgyNDpcdFx0fVxuMTc4MjU6XHRcbjE3ODI2Olx0XHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4xNzgyNzpcdH1cbjE3ODI4Olx0XG4xNzgyOTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE3ODMwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTc4MzE6XHR7XG4xNzgzMjpcdFx0dm9pZCAqaGRyO1xuMTc4MzM6XHRcdHN0cnVjdCBza19idWZmICptc2c7XG4xNzgzNDpcdFxuMTc4MzU6XHRcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuMTc4MzY6XHRcdGlmICghbXNnKVxuMTc4Mzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzgzODpcdFxuMTc4Mzk6XHRcdGhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby1cdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVx1MDAzZXNuZF9zZXEsIDAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gV2lyZWxlc3MgQ29yZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC93aXJlbGVzcy9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDMyMCB0byAzNzAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIGNyaXRpY2FsLCBmb3VuZGF0aW9uYWwgYXNwZWN0cyBvZiB0aGUgd2lyZWxlc3MgY29yZSDigJMgcHJvYmFibHkgdGhlIGluaXRpYWxpemF0aW9uLCByZWdpc3RyYXRpb24sIG9yIGhhbmRsaW5nIG9mIHNvbWUgY29yZSB3aXJlbGVzcyBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aG9zZSBjb21wb25lbnRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgY29yZSBvZiBzb21lIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBvciB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbW9zdCBiYXNpYyB3aXJlbGVzcyBmdW5jdGlvbnMuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gcmVndWxhdG9yeSBoYW5kbGluZyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiwgb3IgZXZlbiBzb21lIGFzcGVjdHMgb2YgbmV0IGRldmljZSBpbnRlZ3JhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyBiYXNpYywgbGlrZSBhIG11dGV4IGluaXQsIG9yIGlmIHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY2hlZC1cdTAwM2VuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOylcbiAzMjE6XHRcdFx0d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLVx1MDAzZW5hbl9jaGFubmVsc1tpXS5jaGFuZGVmO1xuIDMyMjpcdFxuIDMyMzpcdFx0d2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzID0gc2NoZWQtXHUwMDNlbl9jaGFubmVscztcbiAzMjQ6XHRcbiAzMjU6XHRcdHJldHVybiAwO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHRpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gMzI5Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiAzMzA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcbiAzMzE6XHR7XG4gMzMyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkZXYtXHUwMDNld2lwaHkubXR4KTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4gfHwgIXdkZXZfcnVubmluZyh3ZGV2KSlcbiAzMzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzM2Olx0XG4gMzM3Olx0XHQvKlxuIDMzODpcdFx0ICogRG9uJiMzOTt0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWRcbiAzMzk6XHRcdCAqIHNjaGVkdWxlIHVwZGF0ZSBpcyBwZW5kaW5nLCBhcyB0aGUgc2V0IG9mIGNoYW5uZWxzIG1heSBzdGlsbCBjaGFuZ2UuXG4gMzQwOlx0XHQgKi9cbiAzNDE6XHRcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuIDM0MjpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDM0MzpcdFxuIDM0NDpcdFx0LyogQWxsIHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLiAqL1xuIDM0NTpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkmIzQzOyYjNDM7KSB7XG4gMzQ2Olx0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiAzNDc6XHRcbiAzNDg6XHRcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIHdkZXYtXHUwMDNldS5uYW4ubl9jaGFubmVsczsgaiYjNDM7JiM0MzspIHtcbiAzNDk6XHRcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcbiAzNTA6XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pKSB7XG4gMzUxOlx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG4gMzUyOlx0XHRcdFx0XHRicmVhaztcbiAzNTM6XHRcdFx0XHR9XG4gMzU0Olx0XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRcdFx0aWYgKCFmb3VuZClcbiAzNTc6XHRcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAzNTg6XHRcdH1cbiAzNTk6XHRcbiAzNjA6XHRcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xuIDM2MTpcdH1cbiAzNjI6XHRcbiAzNjM6XHR2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIDM2NDpcdFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIDM2NTpcdHtcbiAzNjY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuIDM2NzpcdFxuIDM2ODpcdFx0aWYgKFdBUk5fT04od2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUEQpKVxuIDM2OTpcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDI0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIE5BTiBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOQU4gaW1wbGVtZW50YXRpb24uIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgdGFzayBhdCBoYW5kLCBpcyB1bmRvdWJ0ZWRseSBgbmV0L21hYzgwMjExL25hbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nIChOQU4pIHNob3VsZCBiZS4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9uYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKlxuIDI0MTpcdGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpXG4gMjQyOlx0e1xuIDI0MzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbiAyNDQ6XHRcdFx0aWYgKCFzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbaV0uY2hhbnJlcS5vcGVyLmNoYW4pXG4gMjQ1Olx0XHRcdFx0cmV0dXJuIFx1MDAyNnNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tpXTtcbiAyNDY6XHRcdH1cbiAyNDc6XHRcbiAyNDg6XHRcdHJldHVybiBOVUxMO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHRpbnRcbiAyNTI6XHRpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiAyNTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcbiAyNTQ6XHR7XG4gMjU1Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuIDI1NjpcdFxuIDI1NzpcdFx0LypcbiAyNTg6XHRcdCAqIGNmZzgwMjExIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgYWxsIHByb3ZpZGVkIGNoYW5uZWxzIGJlbG9uZyB0byB0aGVcbiAyNTk6XHRcdCAqIGN1cnJlbnQgc2NoZWR1bGUsIHNvIGp1c3QgY2xlYXIgYWxsIG5vbi1ldmFjdWFibGUgZmxhZ3MgYW5kIHNldCB0aGVcbiAyNjA6XHRcdCAqIG9uZXMgaW4gdGhlIGxpc3QuXG4gMjYxOlx0XHQgKi9cbiAyNjI6XHRcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cdTAwM2VjaGFubmVscyk7IGomIzQzOyYjNDM7KVxuIDI2MzpcdFx0XHRzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcbiAyNjQ6XHRcbiAyNjU6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykge1xuIDI2NjpcdFx0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqJiM0MzsmIzQzOykge1xuIDI2NzpcdFx0XHRcdGlmICghc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3Blci5jaGFuKVxuIDI2ODpcdFx0XHRcdFx0Y29udGludWU7XG4gMjY5Olx0XHRcdFx0aWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKFx1MDAyNnNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIsXG4gMjcwOlx0XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldKSkge1xuIDI3MTpcdFx0XHRcdFx0c2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTtcbiAyNzI6XHRcdFx0XHRcdGJyZWFrO1xuIDI3MzpcdFx0XHRcdH1cbiAyNzQ6XHRcdFx0fVxuIDI3NTpcdFx0fVxuIDI3NjpcdFxuIDI3NzpcdFx0cmV0dXJuIDA7XG4gMjc4Olx0fVxuIDI3OTpcdFxuIDI4MDpcdGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiAyODE6XHRcdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpXG4gMjgyOlx0e1xuIDI4MzpcdFx0c3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqc2NoZWRfaWR4X3RvX2NoYW5bSUVFRTgwMjExX05BTl9NQVhfQ0hBTk5FTFNdID0ge307XG4gMjg0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFx1MDAyNnNkYXRhLVx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xuIDI4NTpcdFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpiYWNrdXBfc2NoZWQgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKCpiYWNrdXBfc2NoZWQpO1xuIDI4NjpcdFx0aW50IHJldDtcbiAyODc6XHRcbiAyODg6XHRcdGlmICghYmFja3VwX3NjaGVkKVxuIDI4OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOQU4gRXZhY3VhdGlvbiBDaGFubmVsIFNlYXJjaCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOQU4gY29kZSBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2UgaGFuZGxlIGNoYW5uZWwgZXZhY3VhdGlvbiBpbiB0aGUgODAyLjExIE5BTiBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAgZnVuY3Rpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyBpbiBgbmV0L21hYzgwMjExL25hbi5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGNvcmUgb2Ygd2hlcmUgdGhlIGNoYW5uZWwgc2VsZWN0aW9uIGxvZ2ljIGZvciBldmFjdWF0aW9uIHJlc2lkZXMuIEkmIzM5O20gaG9waW5nIEkgY2FuIGVpdGhlciBpZGVudGlmeSB0aGUgZXhhY3QgYWxnb3JpdGhtIGluIHVzZSwgb3IgZGV0ZXJtaW5lIHRoZSBpbnB1dHMgaXQgbGV2ZXJhZ2VzLiBNeSBndWVzcyBpcyBpdCYjMzk7cyBoYW5kbGluZyBhIGxvdCBvZiB0aGUgY2hhbm5lbC1ob3BwaW5nIGFuZCBwb3RlbnRpYWxseSBkeW5hbWljIGNvbmZpZ3VyYXRpb24gdGhhdCYjMzk7cyBpbnZvbHZlZCwgYW5kIGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyBzb3BoaXN0aWNhdGVkIHRoZSBzZWxlY3Rpb24gaXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY29uc2lkZXJhdGlvbnMgZm9yIGludGVyZmVyZW5jZSBtaXRpZ2F0aW9uLCB0aHJvdWdocHV0IG9wdGltaXphdGlvbiwgYW5kIHBlcmhhcHMgZXZlbiBwb3dlciBtYW5hZ2VtZW50IGluIHRoaXMgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbmFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFxuIDgwMTpcdFx0aWYgKFdBUk5fT04oc2RhdGEtXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKSlcbiA4MDI6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODAzOlx0XG4gODA0Olx0XHRzY2hlZF9jZmcgPSBcdTAwMjZzZGF0YS1cdTAwM2V2aWYuY2ZnLm5hbl9zY2hlZDtcbiA4MDU6XHRcbiA4MDY6XHRcdC8qIEZpbmQgdGhlIGNoYW5uZWwgdG8gZXZhY3VhdGUgYW5kIGNvdW50IHVzYWJsZSBjaGFubmVscyAqL1xuIDgwNzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElFRUU4MDIxMV9OQU5fTUFYX0NIQU5ORUxTOyBpJiM0MzsmIzQzOykge1xuIDgwODpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsICpjaGFuID1cbiA4MDk6XHRcdFx0XHRcdTAwMjZzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbaV07XG4gODEwOlx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCAqY2hhbl9jdHg7XG4gODExOlx0XHRcdGludCBzbG90X2NvdW50ID0gMDtcbiA4MTI6XHRcbiA4MTM6XHRcdFx0aWYgKCFjaGFuLVx1MDAzZWNoYW5yZXEub3Blci5jaGFuIHx8ICFjaGFuLVx1MDAzZWNoYW5jdHhfY29uZilcbiA4MTQ6XHRcdFx0XHRjb250aW51ZTtcbiA4MTU6XHRcbiA4MTY6XHRcdFx0dXNhYmxlX2NoYW5uZWxzJiM0MzsmIzQzOztcbiA4MTc6XHRcbiA4MTg6XHRcdFx0LyogTm8tZXZhY3VhdGUgY2hhbm5lbCBpcyB1c2FibGUgYnV0IGNhbm5vdCBiZSBldmFjdWF0ZWQgKi9cbiA4MTk6XHRcdFx0aWYgKGNoYW4tXHUwMDNlbm9fZXZhY3VhdGUpXG4gODIwOlx0XHRcdFx0Y29udGludWU7XG4gODIxOlx0XG4gODIyOlx0XHRcdGNoYW5fY3R4ID0gY29udGFpbmVyX29mKGNoYW4tXHUwMDNlY2hhbmN0eF9jb25mLFxuIDgyMzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHgsIGNvbmYpO1xuIDgyNDpcdFxuIDgyNTpcdFx0XHQvKiBJZiBjdHggc3BlY2lmaWVkLCBvbmx5IGNvbnNpZGVyIHRoYXQgc3BlY2lmaWMgY2hhbmN0eCAqL1xuIDgyNjpcdFx0XHRpZiAoY3R4KSB7XG4gODI3Olx0XHRcdFx0aWYgKGNoYW5fY3R4ID09IGN0eClcbiA4Mjg6XHRcdFx0XHRcdGV2YWNfY2hhbiA9IGNoYW47XG4gODI5Olx0XHRcdFx0Y29udGludWU7XG4gODMwOlx0XHRcdH1cbiA4MzE6XHRcbiA4MzI6XHRcdFx0LyogQ2FuIG9ubHkgZXZhY3VhdGUgY2hhbm5lbHMgd2hvc2UgY2hhbmN0eCBpcyBOQU4tb25seSAqL1xuIDgzMzpcdFx0XHRpZiAoaWVlZTgwMjExX2NoYW5jdHhfcmVmY291bnQobG9jYWwsIGNoYW5fY3R4KSBcdTAwM2UgMSlcbiA4MzQ6XHRcdFx0XHRjb250aW51ZTtcbiA4MzU6XHRcbiA4MzY6XHRcdFx0LyogQ291bnQgaG93IG1hbnkgdGltZSBzbG90cyB1c2UgdGhpcyBjaGFubmVsICovXG4gODM3Olx0XHRcdGZvciAoaW50IHMgPSAwOyBzIFx1MDAzYyBDRkc4MDIxMV9OQU5fU0NIRURfTlVNX1RJTUVfU0xPVFM7IHMmIzQzOyYjNDM7KVxuIDgzODpcdFx0XHRcdGlmIChzY2hlZF9jZmctXHUwMDNlc2NoZWR1bGVbc10gPT0gY2hhbilcbiA4Mzk6XHRcdFx0XHRcdHNsb3RfY291bnQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA3NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFJhZGFyIGlzIEJsaW5raW5nISoqCgpPa2F5LCB0aGlzIGxvb2tzICp2ZXJ5KiBwcm9taXNpbmcgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBpdC4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbmV3IGBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTYCBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciwgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IEkmIzM5O20gbG9va2luZyBmb3IuIFdoYXQgY2F0Y2hlcyBteSBleWUgaW1tZWRpYXRlbHkgYXJlIHRoZXNlIGNyaXRpY2FsIGZhY3RvcnM6CgoqICAgKipVc2Vyc3BhY2UgSW50ZXJmYWNlOioqIEl0JiMzOTtzIGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgc2V0dXAgc2lnbmlmaWNhbnRseS4gTm8gY29tcGxleCBkZXZpY2UgZHJpdmVycyB0byBkZWFsIHdpdGggaW5pdGlhbGx5LgoqICAgKipEeW5hbWljIEFsbG9jYXRpb25zIGFuZCBQYXJzaW5nOioqIE5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2l0aCBkeW5hbWljIGFsbG9jYXRpb25zPyBQZXJmZWN0ISBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZSBwYXJzaW5nIGxvZ2ljIGlzIHJpcGUgZm9yIG1hbGZvcm1lZCBpbnB1dCBleHBsb2l0YXRpb24uCiogICAqKldpZGVzcHJlYWQgSW1wYWN0OioqIEl0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIChgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGFuZCBldmFjdWF0aW9uIGxvZ2ljIGluIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCksIHdoaWNoIGJyb2FkZW5zIHRoZSBzY29wZSBmb3IgdnVsbmVyYWJpbGl0aWVzIHRvIGJlIGZvdW5kLgoqICAgKipWaXJ0dWFsaXphdGlvbiBGcmllbmRseToqKiBGdWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobmw4MDIxMSBhbmQgbWFjODAyMTEgLyBtYWM4MDIxMVxfaHdzaW0pLiBUaGlzIG1lYW5zIEkgY2FuIHJ1biB0aGlzIHdpdGggZWFzZSBpbiBhbiBhdXRvbWF0ZWQgZnV6emVyLiBUaGlzIHdpbGwgbWFrZSB0ZXN0aW5nIGVhc2llci4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbiwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2V0IHVwIGNvcnJlY3RseS4gSSBuZWVkIHRvIGNvbmZpcm06CgoqICAgYENGRzgwMjExYAoqICAgYE1BQzgwMjExYAoqICAgYE1BQzgwMjExX0hXU0lNYAoKQW5kIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yICYjMzQ7TkFOJiMzNDsgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgTkFOLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBtaXNzaW5nLiBHb3QgdG8gaGF2ZSBhbGwgbXkgYmFzZXMgY292ZXJlZCBmb3IgdGhlIGZ1enppbmcgcnVuLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGZ1biEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBzYXlzIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIHdpcmVsZXNzIHN0YWNrIHdhcnJhbnRzIGEgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhhdCBmaWxlIHRvIGNoZWNrIHdoYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmUsIGFuZCBpZiBhbnkgYXJlIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBwcm9ibGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiBhIHNpbXBsZSBrZXJuZWwgcmVjb25maWd1cmUgaXMgdGhlIHNvbHV0aW9uIG9yIGlmIHRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFdpcmVsZXNzIERyaXZlciBCdWlsZCBQcm9jZXNzZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGJ1aWx0LCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlcy4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgY29yZSBidWlsZCBsb2dpYyBmb3IgdGhlIG1hYzgwMjExIGZyYW1ld29yayBhbmQgYW55IGdlbmVyYWwgd2lyZWxlc3MgY29tcG9uZW50cyB3aWxsIHByb2JhYmx5IHJlc2lkZSBpbiB0aG9zZSB0b3AtbGV2ZWwgYE1ha2VmaWxlYCBmaWxlcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9NYWtlZmlsZWAgYW5kIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLiBUaG9zZSBhcmUgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzOyBJIGNhbiBwcm9iYWJseSBmaW5kIHRoZSBpbmNsdXNpb24gb2YgdGhvc2UgZmlsZXMgYW5kIHNlZSBob3cgdGhvc2UgY29tcG9uZW50IHBhcnRzIGFyZSB0aWVkIHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aG9zZSBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciB0aGlzIGFuZCBzZWUgd2hlcmUgdGhlIGFjdHVhbCBkcml2ZXJzIGZpdCBpbnRvIHRoaXMgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBnaXZlIG1lIGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBob3cgdGhlIGRyaXZlcnMgYXJlIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19NQUM4MDIxMSkgJiM0Mzs9IG1hYzgwMjExLm9cbiAgIDM6XHRcbiAgIDQ6XHQjIG1hYzgwMjExIG9iamVjdHNcbiAgIDU6XHRtYWM4MDIxMS15IDo9IFxcXG4gICA2Olx0XHRtYWluLm8gc3RhdHVzLm8gXFxcbiAgIDc6XHRcdGRyaXZlci1vcHMubyBcXFxuICAgODpcdFx0c3RhX2luZm8ubyBcXFxuICAgOTpcdFx0d2VwLm8gXFxcbiAgMTA6XHRcdGFlYWRfYXBpLm8gXFxcbiAgMTE6XHRcdHdwYS5vIFxcXG4gIDEyOlx0XHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXG4gIDEzOlx0XHRodC5vIGFnZy10eC5vIGFnZy1yeC5vIFxcXG4gIDE0Olx0XHR2aHQubyBcXFxuICAxNTpcdFx0aGUubyBcXFxuICAxNjpcdFx0czFnLm8gXFxcbiAgMTc6XHRcdGlic3MubyBcXFxuICAxODpcdFx0aWZhY2UubyBcXFxuICAxOTpcdFx0bGluay5vIFxcXG4gIDIwOlx0XHRyYXRlLm8gXFxcbiAgMjE6XHRcdHRraXAubyBcXFxuICAyMjpcdFx0YWVzX2NtYWMubyBcXFxuICAyMzpcdFx0YWVzX2dtYWMubyBcXFxuICAyNDpcdFx0Zmlsc19hZWFkLm8gXFxcbiAgMjU6XHRcdGNmZy5vIFxcXG4gIDI2Olx0XHRldGh0b29sLm8gXFxcbiAgMjc6XHRcdHJ4Lm8gXFxcbiAgMjg6XHRcdHNwZWN0bWdtdC5vIFxcXG4gIDI5Olx0XHR0eC5vIFxcXG4gIDMwOlx0XHRrZXkubyBcXFxuICAzMTpcdFx0dXRpbC5vIHBhcnNlLm8gXFxcbiAgMzI6XHRcdHdtZS5vIFxcXG4gIDMzOlx0XHRjaGFuLm8gYXAubyBcXFxuICAzNDpcdFx0dHJhY2UubyBtbG1lLm8gXFxcbiAgMzU6XHRcdHRkbHMubyBcXFxuICAzNjpcdFx0b2NiLm8gXFxcbiAgMzc6XHRcdGFpcnRpbWUubyBcXFxuICAzODpcdFx0ZWh0Lm8gdWhyLm8gbmFuLm9cbiAgMzk6XHRcbiAgNDA6XHRtYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9MRURTKSAmIzQzOz0gbGVkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MTYKCQkJCQkJCW91dHB1dDogMzAwCgkJCQkJCQl0aG91Z2h0czogODg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOQU4gQ2hhbm5lbCBFdmFjdWF0aW9uIExvZ2ljIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O3ZlIGJlZW4gd29ya2luZyB0aHJvdWdoLiBGaXJzdCwgSSBrbm93IHRoYXQgYG5hbi5vYCBpcyBpbmhlcmVudGx5IHBhcnQgb2YgYG1hYzgwMjExLm9gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gU2ltaWxhcmx5LCBgbmw4MDIxMS5vYCBhbmQgYGNvcmUub2AgYXJlIGJ1aWx0IGludG8gYGNmZzgwMjExLm9gIHdoZW4gYENPTkZJR19DRkc4MDIxMWAgaXMgYWN0aXZlLiBUaGlzIGRpY3RhdGVzIHRoZSBjb3JlIG1vZHVsZXMgaW4gcGxheS4KCk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0OiBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAsIGBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzYCwgYW5kIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYC4KCk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlaXIgdmlzaWJpbGl0eS4gQSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIHJldmVhbHMgdGhhdCBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBhbmQgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgaXMgbG9jYXRlZCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIHdoaWxlIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AgaXMgc3RhdGljIGluIGBuZXQvbWFjODAyMTEvY2ZnLmNgIGFuZCBib3RoIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgYW5kIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCBhcmUgaW4gYG5ldC9tYWM4MDIxMS9uYW4uY2AuIEkgaGF2ZSB0byByZW1lbWJlciB0byBmaWx0ZXIgb3V0IGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMgc3VjaCBhcyBgcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC93aXJlbGVzcy9yZGV2LW9wcy5oYCwgc2luY2UgdGhvc2UgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IGNhbGxlZC4KClRoZSBlc3NlbnRpYWwgYEVuYWJsZUNvbmZpZ3NgIGZvciB0aGlzIGFyZSBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4KCk5vdywgSSYjMzk7bSByZWFkeSB0byBjcmFmdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBUaGUgZnV6emluZyB0YXJnZXQgaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nYCBkdWUgdG8gdGhlIGhhbmRsaW5nIG9mIGEgbmV3IG5ldGxpbmsgY29tbWFuZCwgY2hhbm5lbCBldmFjdWF0aW9uIGxvZ2ljIGZvciBOQU4sIHRoZSBwYXJzaW5nIG9mIG5lc3RlZCBubDgwMjExIGF0dHJpYnV0ZXMsIGFuZCB0aGUgZmFjdCB0aGF0IHRoZXNlIGFyZSByZWFjaGFibGUgdmlhIGJvdGggbmV0bGluayBhbmQgbWFjODAyMTEgdmlydHVhbCBpbnRlcmZhY2VzLgoKVGhlcmVmb3JlLCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBoaWdobGlnaHQgdGhpcyBuZXcgY29kZSBwYXRoLCBpbmNsdWRpbmcgaXRzIG5lc3RlZCBwYXJzaW5nIGxvZ2ljLiBUaGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSB0aGF0IGZ1bGwgbGlzdCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucy4gYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgdGhlIHRocmVlIGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZC4KCkJlZm9yZSBJIGFjdHVhbGx5IG1ha2UgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYCwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgYWxsIG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhbmQgY29uZmlncyBhcmUgY29ycmVjdC4KCkZ1bmN0aW9uczoKMS4gYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AKMi4gYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAKMy4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgCjQuIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AKNS4gYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYAo2LiBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAKCkNvbmZpZ3M6Ci0gYENGRzgwMjExYAotIGBNQUM4MDIxMWAKLSBgTUFDODAyMTFfSFdTSU1gCgpPa2F5LCBldmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIGFuZCBtYWM4MDIxMS9jZmc4MDIxMSBoYW5kbGVycyB0byBtYXJrIGNlcnRhaW4gTkFOIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIGFzIG5vbi1ldmFjdWFibGUuXG5cbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGl0IGlzIGEgc2V0dGVyIGNvbW1hbmQgcmV0dXJuaW5nIG9ubHkgYW4gZXJyb3Igc3RhdHVzKSwgcHJlY2x1ZGluZyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLlxuMi4gQWxsIGR5bmFtaWMgYWxsb2NhdGlvbnMgKHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsIG5sYXR0ciBhcnJheSkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGt6YWxsb2MsIGtjYWxsb2MpIGFuZCBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgdmlhIF9fZnJlZShrZnJlZSkuXG4zLiBUaGUgbmV3IGJvb2wgZmllbGQgYG5vX2V2YWN1YXRlYCBpbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGNsZWFyZWQgdG8gZmFsc2UgYW5kIHNldCB0byB0cnVlIHdoZW4gbWF0Y2hpbmcpLlxuNC4gTm8gYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9ja2luZyBpc3N1ZXMgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVycywgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzE5YTJhYWMxZDczOTI5ZDZiYWEwNTdiODFhOWU5ZGZlNGNjN2M3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaApAQCAtNDI1Niw2ICYjNDM7NDI1NiwyMSBAQCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVscwomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90CiYjNDM7ICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLgomIzQzOyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaAomIzQzOyAqCW11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgewomIzQzOwl1OCBuX2NoYW5uZWxzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX21hcCAtIE5BTiBwZWVyIHNjaGVkdWxlIG1hcAogICoKQEAgLTUyMDQsNiAmIzQzOzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7CiAgKglzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3QKICAqCXN1cHBvcnRlZCwgYW5kIHRoZSBuZXcgc2NoZWR1bGUgY29tcGxldGVseSByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLgogICoKJiM0MzsgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0OyBjaGFubmVscyBvZiB0aGUgY3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZQomIzQzOyAqCW5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlCiYjNDM7ICoJZ3VhcmFudGVlZCBieSBjZmc4MDIxMSB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuCiYjNDM7ICoKICAqIEBzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3Q6IGNvbmZpZ3VyZSBtdWx0aWNhc3QgdG8gdW5pY2FzdCBjb252ZXJzaW9uIGZvciBCU1MKICAqCiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpcwpAQCAtNTU5MCw2ICYjNDM7NTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMgewogCWludAkoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpOwomIzQzOwlpbnQJKCpuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiAJaW50CSgqc2V0X211bHRpY2FzdF90b191bmljYXN0KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgIGNvbnN0IGJvb2wgZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTkyMywxMiAmIzQzOzkyMywxNCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIHsKICAqIEBjaGFubmVsX2VudHJ5OiB0aGUgQ2hhbm5lbCBFbnRyeSBibG9iIGFzIGRlZmluZWQgaW4gV2ktRmkgQXdhcmUKICAqCShUTSkgNC4wIHNwZWNpZmljYXRpb24gVGFibGUgMTAwIChDaGFubmVsIEVudHJ5IGZvcm1hdCBmb3IgdGhlIE5BTgogICoJQXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuCiYjNDM7ICogQG5vX2V2YWN1YXRlOiBpZiBzZXQsIHRoaXMgY2hhbm5lbCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQKICAqLwogc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxOwogCXU4IG5lZWRlZF9yeF9jaGFpbnM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjsKIAl1OCBjaGFubmVsX2VudHJ5WzZdOwomIzQzOwlib29sIG5vX2V2YWN1YXRlOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAppbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKQEAgLTEzODMsNiAmIzQzOzEzODMsMTMgQEAKICAqCWZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIGFuIGFubm91bmNlZCBzY2hlZHVsZSB1cGRhdGUuIFNlZQogICoJJU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQgZm9yIG1vcmUgZGV0YWlscy4KICAqCUlmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS4KJiM0MzsgKglTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuCiYjNDM7ICoJZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhcwomIzQzOyAqCW5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlCiYjNDM7ICoJbm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOgomIzQzOyAqCWNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVscwomIzQzOyAqCXRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmUKJiM0MzsgKglldmFjdWFibGUgYnkgZGVmYXVsdC4KICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdAogICoJYSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aAogICoJJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgYW5kICVOTDgwMjExX0FUVFJfTkFOX1NDSEVEX0RFRkVSUkVEKQpAQCAtMTQyNyw2ICYjNDM7MTQzNCwyOCBAQAogICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieQogICoJaXRzICVOTDgwMjExX0FUVFJfV0RFViBpbnRlcmZhY2UuCiAgKgomIzQzOyAqIEBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTOiBTZXQgdGhlIGxpc3Qgb2YgTkFOIGxvY2FsIHNjaGVkdWxlCiYjNDM7ICoJY2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsCiYjNDM7ICoJKCVOTDgwMjExX0NNRF9TVEFSVF9OQU4gd2FzIGV4ZWN1dGVkKSBhbmQgYSBsb2NhbCBzY2hlZHVsZSBtdXN0IGhhdmUKJiM0MzsgKgliZWVuIHNldCAoJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpLiBUaGUgY29tbWFuZCBjYXJyaWVzIHplcm8KJiM0MzsgKglvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYQomIzQzOyAqCWNoYW5uZWwgKGJ5IGl0cyBjaGFubmVsIGRlZmluaXRpb24pIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIHRoYXQKJiM0MzsgKgltdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3QKJiM0MzsgKglyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZQomIzQzOyAqCWN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGJlY29tZSBldmFjdWFibGUgYWdhaW4uIEFsbAomIzQzOyAqCXByb3ZpZGVkIGNoYW5uZWxzIG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUsIG90aGVyd2lzZQomIzQzOyAqCXRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3IKJiM0MzsgKglpbW11dGFibGUgc2NoZWR1bGVzLCB3aG9zZSBldmFjdWF0aW9uIHdvdWxkIGJyZWFrIGV4aXN0aW5nIE5EUAomIzQzOyAqCWNvbm5lY3Rpb25zLgomIzQzOyAqCVRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudAomIzQzOyAqCWxvY2FsIHNjaGVkdWxlIGFuZCBvbmx5IGFmZmVjdHMgZXZhY3VhdGlvbiBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zOwomIzQzOyAqCWl0IGRvZXMgbm90IHByZXZlbnQgdGhlIHNjaGVkdWxlIGl0c2VsZiBmcm9tIGJlaW5nIGNoYW5nZWQuIFJlbW92aW5nIGEKJiM0MzsgKgljaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYQomIzQzOyAqCXVzZXItaW5pdGlhdGVkIGNoYW5nZSwgbm90IGFuIGV2YWN1YXRpb24sIGFuZCBpcyBhbGxvd2VkIGV2ZW4gZm9yIGEKJiM0MzsgKglub24tZXZhY3VhYmxlIGNoYW5uZWwuIEFjcm9zcyBhIHNjaGVkdWxlIHVwZGF0ZSwgY2hhbm5lbHMgdGhhdCByZW1haW4KJiM0MzsgKglrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHkKJiM0MzsgKglhZGRlZCBjaGFubmVscyBhcmUgZXZhY3VhYmxlIGJ5IGRlZmF1bHQ7IGlzc3VlIHRoaXMgY29tbWFuZCBhZ2FpbiB0bwomIzQzOyAqCWNoYW5nZSB0aGUgbm9uLWV2YWN1YWJsZSBzZXQuCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0xNzA1LDYgJiM0MzsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHsKIAlOTDgwMjExX0NNRF9TVEFSVF9QRCwKIAlOTDgwMjExX0NNRF9TVE9QX1BELAogCiYjNDM7CU5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsCiYjNDM7CiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCAyM2Y0ZjllYzg2ZDBhLi5jZGNmMWYwNTc3MDc3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC01OTczLDYgJiM0Mzs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzZGF0YSwgc2NoZWQpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiYjNDM7CQkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpOwomIzQzOwomIzQzOwlyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2RlbF9pZmFjZSwKQEAgLTYwOTEsNCAmIzQzOzYxMDMsNSBAQCBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLAogCS5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsCiAJLm5hbl9zZXRfcGVlcl9zY2hlZCA9IGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQsCiYjNDM7CS5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzID0gaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA1M2IwYjA4ZDM0NTk3Li45MjlmYzg5MzBhMzVlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjA4Nyw2ICYjNDM7MjA4Nyw4IEBAIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIGludCBpZWVlODAyMTFfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKJiM0MztpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiYjNDM7CQkJCQlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiB2b2lkIGllZWU4MDIxMV9uYW5fZnJlZV9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTsKIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTsKIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL25hbi5jIGIvbmV0L21hYzgwMjExL25hbi5jCmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9uYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbmFuLmMKQEAgLTI0OCw2ICYjNDM7MjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztpbnQKJiM0MztpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKJiM0MzsJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSAmYW1wO3NkYXRhLSZndDt2aWYuY2ZnLm5hbl9zY2hlZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogY2ZnODAyMTEgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBhbGwgcHJvdmlkZWQgY2hhbm5lbHMgYmVsb25nIHRvIHRoZQomIzQzOwkgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlCiYjNDM7CSAqIG9uZXMgaW4gdGhlIGxpc3QuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGludCBqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoc2NoZWRfY2ZnLSZndDtjaGFubmVscyk7IGomIzQzOyYjNDM7KQomIzQzOwkJc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpbnQgaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKHNjaGVkX2NmZy0mZ3Q7Y2hhbm5lbHMpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghc2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIuY2hhbikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJaWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKCZhbXA7c2NoZWRfY2ZnLSZndDtjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7Y2hhbm5lbHMtJmd0O2NoYW5kZWZzW2ldKSkgewomIzQzOwkJCQlzY2hlZF9jZmctJmd0O2NoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKQogewpAQCAtNzg2LDYgJiM0Mzs4MTUsMTAgQEAgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAogCQl1c2FibGVfY2hhbm5lbHMmIzQzOyYjNDM7OwogCiYjNDM7CQkvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqLwomIzQzOwkJaWYgKGNoYW4tJmd0O25vX2V2YWN1YXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQljaGFuX2N0eCA9IGNvbnRhaW5lcl9vZihjaGFuLSZndDtjaGFuY3R4X2NvbmYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMzI1LDYgJiM0MzszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkZXYtJmd0O3dpcGh5Lm10eCk7CiYjNDM7CiYjNDM7CWlmICh3ZGV2LSZndDtpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWQKJiM0MzsJICogc2NoZWR1bGUgdXBkYXRlIGlzIHBlbmRpbmcsIGFzIHRoZSBzZXQgb2YgY2hhbm5lbHMgbWF5IHN0aWxsIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CWlmICh3ZGV2LSZndDt1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CS8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgd2Rldi0mZ3Q7dS5uYW4ubl9jaGFubmVsczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoJmFtcDt3ZGV2LSZndDt1Lm5hbi5jaGFuZGVmc1tqXSwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pKSB7CiYjNDM7CQkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFmb3VuZCkKJiM0MzsJCQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHJkZXYsIHdkZXYsIGNoYW5uZWxzKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC01NjUsNiAmIzQzOzU2NSwxMCBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTsKIAomIzQzO2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7CiYjNDM7CiBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKIGNmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggZTU4NWRhMWQ3OWM5ZS4uZjQ0MDM2YWQ0M2ZiNSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xNzc2Myw2ICYjNDM7MTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShyZGV2LCB3ZGV2LCBzY2hlZCk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqKmNoYW5uZWxfcGFyc2VkIF9fZnJlZShrZnJlZSkgPQomIzQzOwkJa2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLAomIzQzOwkJCUdGUF9LRVJORUwpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWNoYW5uZWxfcGFyc2VkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsCiYjNDM7CQkJICAgICAgIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tJmd0O2V4dGFjaywgY2hhbm5lbF9wYXJzZWQsCiYjNDM7CQkJCSAgICAgY2hhbmRlZiwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0mZ3Q7dXNlcl9wdHJbMF07CiYjNDM7CXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLSZndDt1c2VyX3B0clsxXTsKJiM0MzsJaW50IHJlbSwgaSA9IDAsIG5fY2hhbm5lbHMgPSAwOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpjaGFubmVsOwomIzQzOwomIzQzOwlpZiAod2Rldi0mZ3Q7aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCF3ZGV2X3J1bm5pbmcod2RldikpCiYjNDM7CQlyZXR1cm4gLUVOT1RDT05OOwomIzQzOwomIzQzOwkvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovCiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkKJiM0MzsJCW5fY2hhbm5lbHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyBfX2ZyZWUoa2ZyZWUpID0KJiM0MzsJCWt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSwKJiM0MzsJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjaGFubmVscykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljaGFubmVscy0mZ3Q7bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CiYjNDM7CiYjNDM7CW5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsCiYjNDM7CQkJCSBpbmZvLSZndDtubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChyZGV2LCBjaGFubmVsLCBpbmZvLAomIzQzOwkJCQkJCSAgICAgJmFtcDtjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CkBAIC0yMDYxOSw2ICYjNDM7MjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0gewogCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJCS5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUywKJiM0MzsJCS5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLAomIzQzOwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAomIzQzOwkJLmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLAomIzQzOwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCmluZGV4IDQ2ODQ5ZmU4ZDBiMzkuLjI2OTI1OGM5NGE0MmEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oCkBAIC0xMDkzLDYgJiM0MzsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0MztyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXRyYWNlX3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscygmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBjaGFubmVscyk7CiYjNDM7CWlmIChyZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpCiYjNDM7CQlyZXQgPSByZGV2LSZndDtvcHMtJmd0O25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwKJiM0MzsJCQkJCQkJICAgY2hhbm5lbHMpOwomIzQzOwllbHNlCiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgcmRldl9zdGFydF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKaW5kZXggOGMyYTkxYjg1YzM5Ni4uNDM1ZGM1OGNhZmJlZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKQEAgLTI0ODMsNiAmIzQzOzI0ODMsMzEgQEAgVFJBQ0VfRVZFTlQocmRldl9uYW5fc2V0X3BlZXJfc2NoZWQsCiAJKQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscywKJiM0MzsJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCSBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksCiYjNDM7CVRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSwKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSgKJiM0MzsJCVdJUEhZX0VOVFJZCiYjNDM7CQlXREVWX0VOVFJZCiYjNDM7CQlfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKQomIzQzOwkJX19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzKQomIzQzOwkpLAomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCXUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTsKJiM0MzsKJiM0MzsJCVdJUEhZX0FTU0lHTjsKJiM0MzsJCVdERVZfQVNTSUdOOwomIzQzOwkJX19lbnRyeS0mZ3Q7bl9jaGFubmVscyA9IGNoYW5uZWxzLSZndDtuX2NoYW5uZWxzOwomIzQzOwkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjaGFubmVscy0mZ3Q7bl9jaGFubmVsczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZnJlcXNbaV0gPSBjaGFubmVscy0mZ3Q7Y2hhbmRlZnNbaV0uY2hhbi0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CSksCiYjNDM7CVRQX3ByaW50ayhXSVBIWV9QUl9GTVQgJiMzNDssICYjMzQ7IFdERVZfUFJfRk1UICYjMzQ7LCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzJiMzNDssCiYjNDM7CQkgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktJmd0O25fY2hhbm5lbHMsCiYjNDM7CQkgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksCiYjNDM7CQkJCV9fZW50cnktJmd0O25fY2hhbm5lbHMsIHNpemVvZih1MzIpKSkKJiM0MzspOwomIzQzOwogVFJBQ0VfRVZFTlQocmRldl9zZXRfbWFjX2FjbCwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE5BTiBOb24tRXZhY3VhYmxlIENoYW5uZWwgU2V0dGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG1lY2hhbmlzbSB0byBkZXNpZ25hdGUgc3BlY2lmaWMgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZSB3aXRoaW4gdGhlIE5BTiBsb2NhbCBzY2hlZHVsZS4gVGhpcyBpcyBhY2hpZXZlZCB2aWEgYSBuZXcgTmV0bGluayBjb21tYW5kLCBgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMU2AuCgpGaXJzdCwgSSBzZWUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1cGRhdGVkOiBhIG5ldyBgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzYCBzdHJ1Y3QgaXMgZGVmaW5lZCwgZXNzZW50aWFsbHkgYSBjb250YWluZXIgZm9yIGEgbGlzdCBvZiBjaGFubmVsIGRlZmluaXRpb25zLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBgbm9fZXZhY3VhdGVgIGZsYWcgYmVpbmcgYWRkZWQgdG8gdGhlIGBpZWVlODAyMTFfbmFuX2NoYW5uZWxgIHN0cnVjdC4gVGhpcyBpcyB0aGUga2V5IOKAkyBpbmRpY2F0aW5nIHdoZXRoZXIgYSBjaGFubmVsIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGV2YWN1YXRpb24uCgpUaGUgY29kZSBjaGFuZ2VzIGNvbmZpcm0gdGhhdCB0aGUgbmV3IGNvbW1hbmQgd2lsbCBzZXQgdGhlIG5vbi1ldmFjdWF0ZWQgY2hhbm5lbHMuIFRoZSAgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIHRoZSBwcm92aWRlZCBjaGFubmVsIGxpc3QsIGFuZCBzZXRzIHRoZSBgbm9fZXZhY3VhdGVgIGZsYWcgYWNjb3JkaW5nbHkuIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCBpcyBtb2RpZmllZCB0byByZXNwZWN0IHRoZSBuZXcgc2V0dGluZy4KCmBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBpbiBgY29yZS5jYCBwZXJmb3JtcyBpbXBvcnRhbnQgdmFsaWRhdGlvbi4gSXQgbWFrZXMgc3VyZSB3ZSYjMzk7cmUgaW4gTkFOIG1vZGUsIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgYW5kIHRoYXQgdGhlIGNoYW5uZWwgZGVmaW5pdGlvbnMgd2UmIzM5O3JlIGJlaW5nIGdpdmVuIGFjdHVhbGx5IG1hdGNoIHRoZSBjaGFubmVscyB0aGF0IHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCB0byBzdXBwb3J0LCB3aGljaCBpcyBnb29kLiBUaGUgY2FsbCB0byBgcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBzaWduYWxzIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBiZWluZyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIuCgpUaGUgTmV0bGluayBzaWRlIG9mIHRoaW5ncywgaGFuZGxlZCBpbiBgbmw4MDIxMS5jYCwgaXMgcHJldHR5IHN0YW5kYXJkLiAgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAgcGFyc2VzIHRoZSBpbmRpdmlkdWFsIGNoYW5uZWwgZGVmaW5pdGlvbnMgZnJvbSB0aGUgTmV0bGluayBtZXNzYWdlLCBhbmQgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgZG9lcyB0aGUgaGVhdnkgbGlmdGluZzogY291bnRpbmcgdGhlIGNoYW5uZWxzLCBhbGxvY2F0aW5nIG1lbW9yeSwgcG9wdWxhdGluZyB0aGUgYGNoYW5uZWxzYCBzdHJ1Y3QsIGFuZCB1bHRpbWF0ZWx5IGNhbGxpbmcgdGhlIGNvcmUgZnVuY3Rpb24gdG8gc2V0IHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzLiBNZW1vcnkgYWxsb2NhdGlvbiBsb29rcyByZWFzb25hYmxlLCB3aXRoIGBrY2FsbG9jYCBhbmQgYGt6YWxsb2NgIGJlaW5nIHVzZWQsIGFuZCBpbml0aWFsaXphdGlvbiBvY2N1cnJpbmcuCgpOb3csIGEga2V5IGNvbmNlcm46IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIG5vdGhpbmcgaXMgbGVha2VkIHRvIHVzZXIgc3BhY2UgYW5kIHRoYXQgYWxsIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgbm8gb3V0cHV0dGluZyBvZiB0aGlzIGluZm9ybWF0aW9uLCB0aGlzIGlzIGEgc2V0dGVyLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoZSBhbGxvY2F0aW9ucyBhcmUgYWxsIHplcm9lZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCB0aGUgdXNlIG9mIGEgdHJhY2Vwb2ludCBkb2VzIGNhdGNoIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFkaW5nIGNoYW5uZWwgY2VudGVyIGZyZXF1ZW5jaWVzIGZyb20gdGhlIHBhcnNlZCBgY2hhbmRlZnNgLCBzbyBJIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgYW5kIHRoZSB2YWxpZGF0aW9uIHN0ZXBzLiBUaGUgaW1wb3J0YW50IHZhbGlkYXRpb24gaXMgdGhhdCBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBpbml0aWFsaXplcyBgY2hhbmRlZmAsIGFuZCB0aGF0IHZhbGlkYXRpb24gaW4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIG1ha2VzIHN1cmUgaXQmIzM5O3MgdmFsaWQuIFRoZXJlZm9yZSwgdGhlIHRyYWNlIGV2ZW50IHdpbGwgd29yay4KCk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgd2VsbC1zdHJ1Y3R1cmVkLCBidXQgSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCB0byBlbnN1cmUgY2hhbm5lbCBkZWZpbml0aW9ucyBhcmUgcHJvcGVybHkgaGFuZGxlZCBhbmQgdmFsaWRhdGVkIGJlZm9yZSB0aGUgdHJhY2Vwb2ludCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmIG5sODAyMTFfcGFyc2VfY2hhbmRlZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBubDgwMjExX3BhcnNlX2NoYW5kZWZgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggY2hhbm5lbCBkZWZpbml0aW9uIHBhcnNpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBpcyB0byBqdW1wIHJpZ2h0IGluIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBubDgwMjExX3BhcnNlX2NoYW5kZWZgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgY2hhbm5lbCBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIG5sODAyMTEgZnJhbWV3b3JrLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgcmVzcG9uc2libGUgZm9yIGV4dHJhY3RpbmcgdGhlIGNoYW5uZWwgcGFyYW1ldGVycyBmcm9tIHdoYXRldmVyIGRhdGEgc3RydWN0dXJlIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBubDgwMjExIGludGVyZmFjZSAtIGNvdWxkIGJlIG5ldGxpbmsgYXR0cmlidXRlcyBvciBzb21ldGhpbmcgc2ltaWxhci4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSB0b3VjaCB0aGluZ3MgbGlrZToKKiAgICoqRnJlcXVlbmN5OioqIFRoZSBhY3R1YWwgcmFkaW8gZnJlcXVlbmN5IGluIE1Iei4KKiAgICoqQ2hhbm5lbCBXaWR0aDoqKiBUaGlzIGlzIGNydWNpYWwsIGFzIGl0IGRldGVybWluZXMgdGhlIGJhbmR3aWR0aCB1c2VkIChlLmcuLCAyME1IeiwgNDBNSHosIDgwTUh6LCAxNjBNSHopLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGFyc2luZyBoYW5kbGVzIGFsbCB0aGUgY29tbW9uIChhbmQgZXZlbiBzb21lIGxlc3MgY29tbW9uKSB3aWR0aHMuCiogICAqKkNlbnRlciBGcmVxdWVuY3kgU2VnbWVudHM6KiogSWYgdGhpcyBpcyBhIHdpZGVyIGNoYW5uZWwsIGxpa2UgODBNSHogb3IgMTYwTUh6LCB0aGVuIEkmIzM5O2xsIGxvb2sgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaWRlbnRpZmllcyB0aGUgY2VudGVyIGZyZXF1ZW5jaWVzIG9mIHRoZSBzZWdtZW50cy4KKiAgICoqUmVndWxhdG9yeSBEb21haW4gSGFuZGxpbmc6KiogSG93IGl0IGRlYWxzIHdpdGggZGlmZmVyZW50IHJlZ3VsYXRvcnkgZG9tYWlucyBhbmQgdGhlaXIgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhbm5lbHMgYW5kIHdpZHRocyB3aWxsIGJlIGltcG9ydGFudC4gSSBiZXQgdGhlcmUgYXJlIGNoZWNrcyBhZ2FpbnN0IGEgcmVndWxhdG9yeSBkYXRhYmFzZS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQmIzM5O3MgY3JpdGljYWwgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBpbnZhbGlkIGNoYW5uZWwgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGUgZXJyb3IgY2hlY2tzIGFyZS4gRG9lcyBpdCByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCBwYXJzaW5nIG9mIG1hbGljaW91c2x5IGNyYWZ0ZWQgY2hhbm5lbCBkZWZpbml0aW9ucz8KCk15IGZpcnN0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBncmVwIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgc2VlIHRoZSBkaXJlY3QgdXNhZ2UuIFRoZW4gSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIGl0IGludGVyZmFjZXMgd2l0aCBhbnkgbmw4MDIxMSBtZXNzYWdlIHByb2Nlc3NpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcgYW5kIEkgYW50aWNpcGF0ZSBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggdGhlIGRlZmluaXRpb25zIG9mIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgZW51bXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sODAyMTFfcGFyc2VfY2hhbmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0zOTAzPXN0YXRpYyBib29sIG5sODAyMTFfY2FuX3NldF9kZXZfY2hhbm5lbChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzkyNi1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MzkyNzpzdGF0aWMgaW50IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0zOTI4LVx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MDk1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0MDk2OmludCBubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MDk3LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDEwMS17XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQxMDI6XHRyZXR1cm4gX25sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBleHRhY2ssIGF0dHJzLCBmYWxzZSwgY2hhbmRlZixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDEwMy1cdFx0XHRcdCAgICAgIHBlcm1pdF9ucGNhKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTQxMDY9c3RhdGljIGludCBfX25sODAyMTFfc2V0X2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDEzNC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NDEzNTpcdHJlc3VsdCA9IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQxMzYtXHRcdFx0XHRcdGlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzIxMD1zdGF0aWMgaW50IG5sODAyMTFfc3RhcnRfYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDctXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHtcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcdFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBpbmZvLVx1MDAzZWF0dHJzLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03MzQ5LVx0XHRcdFx0XHQgICAgXHUwMDI2cGFyYW1zLVx1MDAzZWNoYW5kZWYsIHRydWUpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTIwNDQ9c3RhdGljIGludCBubDgwMjExX3N0YXJ0X3JhZGFyX2RldGVjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIwNzUtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMDc2Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZjaGFuZGVmLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjA3Ny1cdFx0XHRcdCAgICBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjE0OD1zdGF0aWMgaW50IG5sODAyMTFfbm90aWZ5X3JhZGFyX2RldGVjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIxNjUtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMTY2Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZjaGFuZGVmLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE2Ny1cdFx0XHRcdCAgICBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjIzOT1zdGF0aWMgaW50IG5sODAyMTFfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzA1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMwNjpcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgaW5mby1cdTAwM2VhdHRycyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMDctXHRcdFx0XHQgICAgXHUwMDI2cGFyYW1zLmNoYW5kZWYsIHBlcm1pdF9ucGNhKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEzNTQ0PXN0YXRpYyBpbnQgbmw4MDIxMV9qb2luX2lic3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEzNTkxLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMzU5MjpcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgaW5mby1cdTAwM2VhdHRycyxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTM1OTMtXHRcdFx0XHQgICAgXHUwMDI2aWJzcy5jaGFuZGVmLCBmYWxzZSk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNDU4Mz1zdGF0aWMgaW50IG5sODAyMTFfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NjIyLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDYyMzpcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2Y2hhbmRlZixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ2MjQtXHRcdFx0XHQgICAgZmFsc2UpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ3Nzc9c3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0ODUyLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0ODUzOlx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0ODU0LVx0XHRcdFx0XHQgICAgXHUwMDI2Y2hhbmRlZiwgZmFsc2UpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTUyNTU9c3RhdGljIGludCBubDgwMjExX2pvaW5fb2NiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNTI2MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTUyNjI6XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MjYzLVx0XHRcdFx0ICAgIFx1MDAyNnNldHVwLmNoYW5kZWYsIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE1Mjc4PXN0YXRpYyBpbnQgbmw4MDIxMV9qb2luX21lc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MzM3LVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE1MzM4Olx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MzM5LVx0XHRcdFx0XHQgICAgXHUwMDI2c2V0dXAuY2hhbmRlZiwgZmFsc2UpO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTczMzU9c3RhdGljIGludCBubDgwMjExX3BhcnNlX25hbl9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3MzU1LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNzM1NjpcdHJldCA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgY2hhbm5lbF9wYXJzZWQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3MzU3LVx0XHRcdFx0ICAgIFx1MDAyNmNoYW5kZWYsIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NzY3PW5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzc4My1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3ODQ6XHRyZXR1cm4gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXHUwMDNlZXh0YWNrLCBjaGFubmVsX3BhcnNlZCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3ODUtXHRcdFx0XHQgICAgIGNoYW5kZWYsIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDAxPXN0YXRpYyBpbnQgbmw4MDIxMV90ZGxzX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODQyNy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0Mjg6XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsIFx1MDAyNmNoYW5kZWYsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDI5LVx0XHRcdFx0ICAgIGZhbHNlKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oPTE5PXN0YXRpYyBpbmxpbmUgdTY0IHdkZXZfaWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldilcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oLTI0LVxubmV0L3dpcmVsZXNzL25sODAyMTEuaDoyNTppbnQgbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmgtMjYtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L3dpcmVsZXNzL3Btc3IuYz0zMDk9c3RhdGljIGludCBwbXNyX3BhcnNlX3BlZXIoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLS1cbm5ldC93aXJlbGVzcy9wbXNyLmMtMzU0LVxubmV0L3dpcmVsZXNzL3Btc3IuYzozNTU6XHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGluZm8tXHUwMDNlYXR0cnMsXG5uZXQvd2lyZWxlc3MvcG1zci5jLTM1Ni1cdFx0XHRcdCAgICBcdTAwMjZvdXQtXHUwMDNlY2hhbmRlZiwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIENoYW5uZWwgUGFyc2luZyBMb2dpYyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBub24tZXZhY3VhdGlvbiBhbmQgTkFOIGNoYW5uZWwgcGFyc2luZyB3aXRoaW4gdGhlIGBubDgwMjExYCBjb250ZXh0LiBMZXQmIzM5O3MgemVybyBpbiBvbiBgbmw4MDIxMV9wYXJzZV9uYW5fY2hhbm5lbGAgYW5kIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHN1YnRsZSBkaWZmZXJlbmNlcyBvciBwb3RlbnRpYWwgb3ZlcmxhcCBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2ltaWxhcml0aWVzIGluIHRoZWlyIGNvcmUgZnVuY3Rpb24gb2YgZGVhbGluZyB3aXRoIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gY29tcGFyZSB0aGVpciBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3MzM1IGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgdG8gZmlndXJlIG91dCBhbnkgbnVhbmNlcy4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlIGhvdyB0aGV5IGhhbmRsZSBjaGFubmVsIHBhcmFtZXRlcnMgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbmNvbnNpc3RlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MzM1Olx0c3RhdGljIGludCBubDgwMjExX3BhcnNlX25hbl9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbjE3MzM2Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmNoYW5uZWwsXG4xNzMzNzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuMTczMzg6XHRcdFx0XHRcdCAgICAgc3RydWN0IGNmZzgwMjExX25hbl9jaGFubmVsICpuYW5fY2hhbm5lbHMsXG4xNzMzOTpcdFx0XHRcdFx0ICAgICB1OCBpbmRleCwgYm9vbCBsb2NhbClcbjE3MzQwOlx0e1xuMTczNDE6XHRcdHN0cnVjdCBubGF0dHIgKipjaGFubmVsX3BhcnNlZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbjE3MzQyOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjtcbjE3MzQzOlx0XHR1OCBuX3J4X25zcztcbjE3MzQ0Olx0XHRpbnQgcmV0O1xuMTczNDU6XHRcbjE3MzQ2Olx0XHRjaGFubmVsX3BhcnNlZCA9IGtjYWxsb2MoTkw4MDIxMV9BVFRSX01BWCAmIzQzOyAxLCBzaXplb2YoKmNoYW5uZWxfcGFyc2VkKSxcbjE3MzQ3Olx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4xNzM0ODpcdFx0aWYgKCFjaGFubmVsX3BhcnNlZClcbjE3MzQ5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTczNTA6XHRcbjE3MzUxOlx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGNoYW5uZWxfcGFyc2VkLCBOTDgwMjExX0FUVFJfTUFYLCBjaGFubmVsLCBOVUxMLFxuMTczNTI6XHRcdFx0XHQgICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuMTczNTM6XHRcdGlmIChyZXQpXG4xNzM1NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTczNTU6XHRcbjE3MzU2Olx0XHRyZXQgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuMTczNTc6XHRcdFx0XHRcdCAgICBcdTAwMjZjaGFuZGVmLCBmYWxzZSk7XG4xNzM1ODpcdFx0aWYgKHJldClcbjE3MzU5Olx0XHRcdHJldHVybiByZXQ7XG4xNzM2MDpcdFxuMTczNjE6XHRcdGlmIChjaGFuZGVmLmNoYW4tXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfNkdIWikge1xuMTczNjI6XHRcdFx0TkxfU0VUX0VSUl9NU0coaW5mby1cdTAwM2VleHRhY2ssXG4xNzM2MzpcdFx0XHRcdCAgICAgICBcJiMzNDs2IEdIeiBiYW5kIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMTczNjQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTczNjU6XHRcdH1cbjE3MzY2Olx0XG4xNzM2NzpcdFx0aWYgKCFjZmc4MDIxMV9yZWdfY2FuX2JlYWNvbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBcdTAwMjZjaGFuZGVmLFxuMTczNjg6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9JRlRZUEVfTkFOKSkge1xuMTczNjk6XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgY2hhbm5lbCxcbjE3MzcwOlx0XHRcdFx0XHQgICAgXCYjMzQ7Q2hhbm5lbCBpbiBOQU4gc2NoZWR1bGUgaXMgbm90IGFsbG93ZWQgZm9yIE5BTiBvcGVyYXRpb25cJiMzNDspO1xuMTczNzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzM3MjpcdFx0fVxuMTczNzM6XHRcbjE3Mzc0Olx0XHRpZiAobG9jYWwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NzkKCQkJCQkJCW91dHB1dDogMjkxCgkJCQkJCQl0aG91Z2h0czogMTE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGx1cmtpbmcgYXJvdW5kLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaGFuZGxpbmcgdGhlIHNldHRpbmcgb2Ygbm9uLWV2YWN1YWJsZSBjaGFubmVscyBmb3IgTkFOLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGZsb3c6IEl0IHBhcnNlcyBjaGFubmVsIGF0dHJpYnV0ZXMgZnJvbSBhIE5ldGxpbmsgbWVzc2FnZSwgYWxsb2NhdGVzIGEgc3RydWN0dXJlIChgY2hhbm5lbHNgKSB0byBob2xkIHRoZSBjaGFubmVsIGRlZmluaXRpb25zLCBwb3B1bGF0ZXMgaXQsIGFuZCB0aGVuIHBhc3NlcyBpdCBhbG9uZy4gSSBub3RlZCB0aGF0IGV2ZW4gaWYgYG5fY2hhbm5lbHNgIGlzIHplcm8gKG1lYW5pbmcgbm8gY2hhbm5lbCBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZCksIHRoZSBhbGxvY2F0aW9uIHN0aWxsIHdvcmtzIGNvcnJlY3RseSwgYWxsb2NhdGluZyBhIHN0cnVjdCB3aXRoIGEgemVyby1sZW5ndGggYXJyYXkuIFRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIHdpdGggbm8gaWxsIGVmZmVjdHMuCgpOb3csIEkgcGFpZCBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEJvdGggYGNoYW5uZWxzYCBhbmQgdGhlIGludGVybWVkaWFyeSBgY2hhbm5lbF9wYXJzZWRgIHdpdGhpbiBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYCBhcmUgemVyb2VkIHZpYSBga3phbGxvY2Agb3IgYGtjYWxsb2NgLiBUaGlzIGlzIGdvb2QgcHJhY3RpY2UuIEkgY29uZmlybWVkIHRoYXQgYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgcHJvcGVybHkgcG9wdWxhdGVzIHRoZSBmaWVsZHMgYW5kIHRoYXQgYWxsIGZpZWxkcyBpbiBgc2NoZWRfY2ZnLSZndDtjaGFubmVsc2AgKG9yIGl0cyBlcXVpdmFsZW50cykgYXJlIGV4cGxpY2l0bHkgc2V0LiBUaGVyZSYjMzk7cyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtpbmcgaW50byB1c2VyIHNwYWNlIHZpYSBjb3BpZXMgb3IgcmVzcG9uc2VzLiBDcnVjaWFsbHksIHRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGUgY29yZSBsb2dpYyBoYW5kbGVzIGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIG1lbW9yeSBpbiBhIHNhZmUgbWFubmVyLiBQb3RlbnRpYWwgY29uY3VycmVuY3ksIGluZGV4LXJlbGF0ZWQgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGxpa2VseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gb3IgZGF0YSBsZWFrZWQgYmFjayB0byB1c2Vyc3BhY2UsIGFuZCBubyBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIHdpdGhvdXQgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8ganVzdGlmaWNhdGlvbiB0byBydW4gS01TQU4gZm9yIHRoaXMuIFdlIGNhbiBzYWZlbHkgbWFyayB0aGlzIHBhdGNoIGFzIG5vdCBuZWVkaW5nIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyBhbmQgbWFjODAyMTEvY2ZnODAyMTEgaGFuZGxlcnMgdG8gbWFyayBjZXJ0YWluIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlLlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChpdCBpcyBhIHNldHRlciBjb21tYW5kIHJldHVybmluZyBvbmx5IGFuIGVycm9yIHN0YXR1cyksIHByZWNsdWRpbmcga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy5cbjIuIEFsbCBkeW5hbWljIGFsbG9jYXRpb25zIChzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzLCBubGF0dHIgYXJyYXkpIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChremFsbG9jLCBrY2FsbG9jKSBhbmQgYXV0b21hdGljYWxseSBtYW5hZ2VkIHZpYSBfX2ZyZWUoa2ZyZWUpLlxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cbjQuIE5vIGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS5cblxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgYW5kIG1hYzgwMjExL2NmZzgwMjExIGhhbmRsZXJzIHRvIG1hcmsgY2VydGFpbiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZS5cblxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoaXQgaXMgYSBzZXR0ZXIgY29tbWFuZCByZXR1cm5pbmcgb25seSBhbiBlcnJvciBzdGF0dXMpLCBwcmVjbHVkaW5nIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuXG4yLiBBbGwgZHluYW1pYyBhbGxvY2F0aW9ucyAoc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscywgbmxhdHRyIGFycmF5KSBhcmUgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgYWxsb2NhdG9ycyAoa3phbGxvYywga2NhbGxvYykgYW5kIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCB2aWEgX19mcmVlKGtmcmVlKS5cbjMuIFRoZSBuZXcgYm9vbCBmaWVsZCBgbm9fZXZhY3VhdGVgIGluIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoY2xlYXJlZCB0byBmYWxzZSBhbmQgc2V0IHRvIHRydWUgd2hlbiBtYXRjaGluZykuXG40LiBObyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuXG5cbkFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2NraW5nIGlzc3VlcyBpbiB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXJzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGNvbmZpZ3VyYXRpb25zLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDAuODIwNzUxOTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM2Mjg4MDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxcIixcbiAgICBcImNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgYW5kIG1hYzgwMjExL2NmZzgwMjExIGhhbmRsZXJzIHRvIG1hcmsgY2VydGFpbiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZS5cXG5cXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoaXQgaXMgYSBzZXR0ZXIgY29tbWFuZCByZXR1cm5pbmcgb25seSBhbiBlcnJvciBzdGF0dXMpLCBwcmVjbHVkaW5nIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuXFxuMi4gQWxsIGR5bmFtaWMgYWxsb2NhdGlvbnMgKHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsIG5sYXR0ciBhcnJheSkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGt6YWxsb2MsIGtjYWxsb2MpIGFuZCBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgdmlhIF9fZnJlZShrZnJlZSkuXFxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cXG40LiBObyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyB0byBjb25maWd1cmUgbm9uLWV2YWN1YWJsZSBOQU4gc2NoZWR1bGUgY2hhbm5lbHMuIEl0IGFkZHMgbmV0bGluayBhdHRyaWJ1dGUgcGFyc2luZywgdmVyaWZpY2F0aW9uIGxvZ2ljIGFnYWluc3QgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgaW4gY2ZnODAyMTEsIGRyaXZlci9zdGFjayBvcHMgaW4gbWFjODAyMTEsIGFuZCBtb2RpZmllcyBjaGFubmVsIGV2YWN1YXRpb24gc2VsZWN0aW9uIGluIG1hYzgwMjExLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmw4MDIxMSBzb2NrZXRzIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo0MC44MjA3NjAxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNzYwOTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3MTlhMmFhYzFkNzM5MjlkNmJhYTA1N2I4MWE5ZTlkZmU0Y2M3YzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtNDI1Niw2ICs0MjU2LDIxIEBAIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQge1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgbmFuX2NoYW5uZWxzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVsc1xcbisgKlxcbisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSBzZXQgb2YgTkFOIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXQgbXVzdCBub3RcXG4rICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuXFxuKyAqXFxuKyAqIEBuX2NoYW5uZWxzOiBudW1iZXIgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyBpbiAlY2hhbmRlZnMuXFxuKyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaFxcbisgKlxcdG11c3QgbWF0Y2ggYSBjaGFubmVsIG9mIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxcbisgKi9cXG4rc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyB7XFxuK1xcdHU4IG5fY2hhbm5lbHM7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBjaGFuZGVmc1tdIF9fY291bnRlZF9ieShuX2NoYW5uZWxzKTtcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfbWFwIC0gTkFOIHBlZXIgc2NoZWR1bGUgbWFwXFxuICAqXFxuQEAgLTUyMDQsNiArNTIxOSwxMiBAQCBzdHJ1Y3QgbWdtdF9mcmFtZV9yZWdzIHtcXG4gICpcXHRzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3RcXG4gICpcXHRzdXBwb3J0ZWQsIGFuZCB0aGUgbmV3IHNjaGVkdWxlIGNvbXBsZXRlbHkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZS5cXG4gICpcXG4rICogQG5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHM6IHNldCB0aGUgbGlzdCBvZiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0XFxuKyAqXFx0bXVzdCBub3QgYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBwcm92aWRlZCBsaXN0XFxuKyAqXFx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldDsgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmVcXG4rICpcXHRub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsIHByb3ZpZGVkIGNoYW5uZWxzIGFyZVxcbisgKlxcdGd1YXJhbnRlZWQgYnkgY2ZnODAyMTEgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxcbisgKlxcbiAgKiBAc2V0X211bHRpY2FzdF90b191bmljYXN0OiBjb25maWd1cmUgbXVsdGljYXN0IHRvIHVuaWNhc3QgY29udmVyc2lvbiBmb3IgQlNTXFxuICAqXFxuICAqIEBnZXRfdHhxX3N0YXRzOiBHZXQgVFhRIHN0YXRzIGZvciBpbnRlcmZhY2Ugb3IgcGh5LiBJZiB3ZGV2IGlzICVOVUxMLCB0aGlzXFxuQEAgLTU1OTAsNiArNTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMge1xcbiBcXHRpbnRcXHQoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XFxuK1xcdGludFxcdCgqbmFuX3NldF9ub25fZXZhY19jaGFubmVscykoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcXG4gXFx0aW50XFx0KCpzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QpKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgYm9vbCBlbmFibGVkKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcXG5pbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuQEAgLTkyMywxMiArOTIzLDE0IEBAIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYge1xcbiAgKiBAY2hhbm5lbF9lbnRyeTogdGhlIENoYW5uZWwgRW50cnkgYmxvYiBhcyBkZWZpbmVkIGluIFdpLUZpIEF3YXJlXFxuICAqXFx0KFRNKSA0LjAgc3BlY2lmaWNhdGlvbiBUYWJsZSAxMDAgKENoYW5uZWwgRW50cnkgZm9ybWF0IGZvciB0aGUgTkFOXFxuICAqXFx0QXZhaWxhYmlsaXR5IGF0dHJpYnV0ZSkuXFxuKyAqIEBub19ldmFjdWF0ZTogaWYgc2V0LCB0aGlzIGNoYW5uZWwgbXVzdCBub3QgYmUgZXZhY3VhdGVkXFxuICAqL1xcbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxO1xcbiBcXHR1OCBuZWVkZWRfcnhfY2hhaW5zO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xcbiBcXHR1OCBjaGFubmVsX2VudHJ5WzZdO1xcbitcXHRib29sIG5vX2V2YWN1YXRlO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuaW5kZXggZDhmZWZlZmMxMWE5NS4uZmIzMDBiMGM0YTI4NyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbkBAIC0xMzgzLDYgKzEzODMsMTMgQEBcXG4gICpcXHRmcm9tIHRoZSBkZXZpY2UgdG8gcGVyZm9ybSBhbiBhbm5vdW5jZWQgc2NoZWR1bGUgdXBkYXRlLiBTZWVcXG4gICpcXHQlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgKlxcdElmIG5vdCBzZXQsIHRoZSBzY2hlZHVsZSBzaG91bGQgYmUgYXBwbGllZCBpbW1lZGlhdGVseS5cXG4rICpcXHRTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuXFxuKyAqXFx0ZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhc1xcbisgKlxcdG5vbi1ldmFjdWFibGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUy4gVGhlXFxuKyAqXFx0bm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOlxcbisgKlxcdGNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVsc1xcbisgKlxcdHRoYXQgYXJlIHJlbW92ZWQgc2ltcGx5IGxvc2UgaXQsIGFuZCBuZXdseSBhZGRlZCBjaGFubmVscyBhcmVcXG4rICpcXHRldmFjdWFibGUgYnkgZGVmYXVsdC5cXG4gICogQE5MODAyMTFfQ01EX05BTl9TQ0hFRF9VUERBVEVfRE9ORTogRXZlbnQgc2VudCB0byB1c2VyIHNwYWNlIHRvIG5vdGlmeSB0aGF0XFxuICAqXFx0YSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aFxcbiAgKlxcdCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGFuZCAlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRClcXG5AQCAtMTQyNyw2ICsxNDM0LDI4IEBAXFxuICAqIEBOTDgwMjExX0NNRF9TVE9QX1BEOiBTdG9wIHRoZSBQRCBvcGVyYXRpb24sIGlkZW50aWZpZWQgYnlcXG4gICpcXHRpdHMgJU5MODAyMTFfQVRUUl9XREVWIGludGVyZmFjZS5cXG4gICpcXG4rICogQE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFM6IFNldCB0aGUgbGlzdCBvZiBOQU4gbG9jYWwgc2NoZWR1bGVcXG4rICpcXHRjaGFubmVscyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gTkFOIG11c3QgYmUgb3BlcmF0aW9uYWxcXG4rICpcXHQoJU5MODAyMTFfQ01EX1NUQVJUX05BTiB3YXMgZXhlY3V0ZWQpIGFuZCBhIGxvY2FsIHNjaGVkdWxlIG11c3QgaGF2ZVxcbisgKlxcdGJlZW4gc2V0ICglTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkuIFRoZSBjb21tYW5kIGNhcnJpZXMgemVyb1xcbisgKlxcdG9yIG1vcmUgbmVzdGVkICVOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwgYXR0cmlidXRlcywgZWFjaCBpZGVudGlmeWluZyBhXFxuKyAqXFx0Y2hhbm5lbCAoYnkgaXRzIGNoYW5uZWwgZGVmaW5pdGlvbikgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgdGhhdFxcbisgKlxcdG11c3Qgbm90IGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLiBUaGUgcHJvdmlkZWQgbGlzdFxcbisgKlxcdHJlcGxhY2VzIHRoZSBwcmV2aW91cyBzZXQgb2Ygbm9uLWV2YWN1YWJsZSBjaGFubmVsczsgY2hhbm5lbHMgb2YgdGhlXFxuKyAqXFx0Y3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsXFxuKyAqXFx0cHJvdmlkZWQgY2hhbm5lbHMgbXVzdCBleGlzdCBpbiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSwgb3RoZXJ3aXNlXFxuKyAqXFx0dGhlIGNvbW1hbmQgZmFpbHMuIFRoaXMgaXMgdXNlZCB0byBwcm90ZWN0IGNoYW5uZWxzIGNhcnJ5aW5nIE5EQyBvclxcbisgKlxcdGltbXV0YWJsZSBzY2hlZHVsZXMsIHdob3NlIGV2YWN1YXRpb24gd291bGQgYnJlYWsgZXhpc3RpbmcgTkRQXFxuKyAqXFx0Y29ubmVjdGlvbnMuXFxuKyAqXFx0VGhlIG5vbi1ldmFjdWFibGUgbWFya2luZyBpcyBhIHBlci1jaGFubmVsIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50XFxuKyAqXFx0bG9jYWwgc2NoZWR1bGUgYW5kIG9ubHkgYWZmZWN0cyBldmFjdWF0aW9uIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnM7XFxuKyAqXFx0aXQgZG9lcyBub3QgcHJldmVudCB0aGUgc2NoZWR1bGUgaXRzZWxmIGZyb20gYmVpbmcgY2hhbmdlZC4gUmVtb3ZpbmcgYVxcbisgKlxcdGNoYW5uZWwgZnJvbSB0aGUgc2NoZWR1bGUgd2l0aCAlTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCBpcyBhXFxuKyAqXFx0dXNlci1pbml0aWF0ZWQgY2hhbmdlLCBub3QgYW4gZXZhY3VhdGlvbiwgYW5kIGlzIGFsbG93ZWQgZXZlbiBmb3IgYVxcbisgKlxcdG5vbi1ldmFjdWFibGUgY2hhbm5lbC4gQWNyb3NzIGEgc2NoZWR1bGUgdXBkYXRlLCBjaGFubmVscyB0aGF0IHJlbWFpblxcbisgKlxcdGtlZXAgdGhlaXIgbm9uLWV2YWN1YWJsZSBtYXJraW5nLCByZW1vdmVkIGNoYW5uZWxzIGxvc2UgaXQsIGFuZCBuZXdseVxcbisgKlxcdGFkZGVkIGNoYW5uZWxzIGFyZSBldmFjdWFibGUgYnkgZGVmYXVsdDsgaXNzdWUgdGhpcyBjb21tYW5kIGFnYWluIHRvXFxuKyAqXFx0Y2hhbmdlIHRoZSBub24tZXZhY3VhYmxlIHNldC5cXG4gICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyXFxuICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxcbiAgKi9cXG5AQCAtMTcwNSw2ICsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHtcXG4gXFx0Tkw4MDIxMV9DTURfU1RBUlRfUEQsXFxuIFxcdE5MODAyMTFfQ01EX1NUT1BfUEQsXFxuIFxcbitcXHROTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLFxcbitcXG4gXFx0LyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovXFxuIFxcbiBcXHQvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXFxuaW5kZXggMjNmNGY5ZWM4NmQwYS4uY2RjZjFmMDU3NzA3NyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcXG5AQCAtNTk3Myw2ICs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc2RhdGEsIHNjaGVkKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbitpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkod2lwaHkpO1xcbitcXG4rXFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHNkYXRhLCBjaGFubmVscyk7XFxuK31cXG4rXFxuIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4gXFx0LmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLFxcbiBcXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsXFxuQEAgLTYwOTEsNCArNjEwMyw1IEBAIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4gXFx0LnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLFxcbiBcXHQubmFuX3NldF9sb2NhbF9zY2hlZCA9IGllZWU4MDIxMV9zZXRfbG9jYWxfbmFuX3NjaGVkLFxcbiBcXHQubmFuX3NldF9wZWVyX3NjaGVkID0gaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZCxcXG4rXFx0Lm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMgPSBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjkyOWZjODkzMGEzNWUgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG4rKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbkBAIC0yMDg3LDYgKzIwODcsOCBAQCBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBjZmc4MDIxMV9uYW5fcGVlcl9zY2hlZCAqc2NoZWQpO1xcbitpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcXG4gdm9pZCBpZWVlODAyMTFfbmFuX2ZyZWVfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XFxuIHZvaWQgaWVlZTgwMjExX25hbl91cGRhdGVfbmRpX2NhcnJpZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbmRpX3NkYXRhKTtcXG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9uYW4uYyBiL25ldC9tYWM4MDIxMS9uYW4uY1xcbmluZGV4IDE5ZTA4NjYxYmU0M2EuLjM4YmQxMDUxMjFhY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL25hbi5jXFxuKysrIGIvbmV0L21hYzgwMjExL25hbi5jXFxuQEAgLTI0OCw2ICsyNDgsMzUgQEAgaWVlZTgwMjExX25hbl9maW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZylcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK2ludFxcbitpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnID0gXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYuY2ZnLm5hbl9zY2hlZDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGNmZzgwMjExIGFscmVhZHkgdmFsaWRhdGVkIHRoYXQgYWxsIHByb3ZpZGVkIGNoYW5uZWxzIGJlbG9uZyB0byB0aGVcXG4rXFx0ICogY3VycmVudCBzY2hlZHVsZSwgc28ganVzdCBjbGVhciBhbGwgbm9uLWV2YWN1YWJsZSBmbGFncyBhbmQgc2V0IHRoZVxcbitcXHQgKiBvbmVzIGluIHRoZSBsaXN0LlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHMpOyBqKyspXFxuK1xcdFxcdHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHM7IGkrKykge1xcbitcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVscyk7IGorKykge1xcbitcXHRcXHRcXHRpZiAoIXNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLmNoYW4pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXFx1MDAyNnNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNoYW5uZWxzLVxcdTAwM2VjaGFuZGVmc1tpXSkpIHtcXG4rXFx0XFx0XFx0XFx0c2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBpZWVlODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcXG4ge1xcbkBAIC03ODYsNiArODE1LDEwIEBAIGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcbiBcXHRcXHR1c2FibGVfY2hhbm5lbHMrKztcXG4gXFxuK1xcdFxcdC8qIE5vLWV2YWN1YXRlIGNoYW5uZWwgaXMgdXNhYmxlIGJ1dCBjYW5ub3QgYmUgZXZhY3VhdGVkICovXFxuK1xcdFxcdGlmIChjaGFuLVxcdTAwM2Vub19ldmFjdWF0ZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRjaGFuX2N0eCA9IGNvbnRhaW5lcl9vZihjaGFuLVxcdTAwM2VjaGFuY3R4X2NvbmYsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmNcXG5AQCAtMzI1LDYgKzMyNSw0MSBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHkubXR4KTtcXG4rXFxuK1xcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgYWxsb3cgdXBkYXRpbmcgdGhlIG5vbi1ldmFjdWFibGUgY2hhbm5lbHMgd2hpbGUgYSBkZWZlcnJlZFxcbitcXHQgKiBzY2hlZHVsZSB1cGRhdGUgaXMgcGVuZGluZywgYXMgdGhlIHNldCBvZiBjaGFubmVscyBtYXkgc3RpbGwgY2hhbmdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHdkZXYtXFx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0LyogQWxsIHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLiAqL1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIGNoYW5uZWxzLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcXG4rXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyB3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqKyspIHtcXG4rXFx0XFx0XFx0aWYgKGNmZzgwMjExX2NoYW5kZWZfaWRlbnRpY2FsKFxcdTAwMjZ3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjaGFubmVscy1cXHUwMDNlY2hhbmRlZnNbaV0pKSB7XFxuK1xcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFmb3VuZClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xcbit9XFxuK1xcbiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXFxuaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbkBAIC01NjUsNiArNTY1LDEwIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCk7XFxuIFxcbitpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpO1xcbitcXG4gc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXFxuIGNmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHQgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqdG1wLFxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbmluZGV4IGU1ODVkYTFkNzljOWUuLmY0NDAzNmFkNDNmYjUgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5AQCAtMTc3NjMsNiArMTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50XFxuK25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpjaGFubmVsLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKipjaGFubmVsX3BhcnNlZCBfX2ZyZWUoa2ZyZWUpID1cXG4rXFx0XFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICsgMSwgc2l6ZW9mKCpjaGFubmVsX3BhcnNlZCksXFxuK1xcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFjaGFubmVsX3BhcnNlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGNoYW5uZWxfcGFyc2VkLCBOTDgwMjExX0FUVFJfTUFYLCBjaGFubmVsLCBOVUxMLFxcbitcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBjaGFubmVsX3BhcnNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBjaGFuZGVmLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4rXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbitcXHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmNoYW5uZWw7XFxuK1xcbitcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXFxuK1xcdFxcdHJldHVybiAtRU5PVENPTk47XFxuK1xcbitcXHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXFxuK1xcdG5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsXFxuK1xcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcXG4rXFx0XFx0bl9jaGFubmVscysrO1xcbitcXG4rXFx0c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMgX19mcmVlKGtmcmVlKSA9XFxuK1xcdFxcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcXG4rXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghY2hhbm5lbHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Y2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzO1xcbitcXG4rXFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcXG4rXFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZW5saGRyLCBHRU5MX0hEUkxFTiwgcmVtKSB7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWwocmRldiwgY2hhbm5lbCwgaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbm5lbHMtXFx1MDAzZWNoYW5kZWZzW2ldKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aSsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG5AQCAtMjA2MTksNiArMjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xcbiBcXHRcXHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXFxuIFxcdFxcdC5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuY21kID0gTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyxcXG4rXFx0XFx0LmRvaXQgPSBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMsXFxuK1xcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG4rXFx0XFx0LmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcXG5pbmRleCA0Njg0OWZlOGQwYjM5Li4yNjkyNThjOTRhNDJhIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcXG5AQCAtMTA5Myw2ICsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnRcXG4rcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dHJhY2VfcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgY2hhbm5lbHMpO1xcbitcXHRpZiAocmRldi1cXHUwMDNlb3BzLVxcdTAwM2VuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKVxcbitcXHRcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjaGFubmVscyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfc3RhcnRfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcXG5pbmRleCA4YzJhOTFiODVjMzk2Li40MzVkYzU4Y2FmYmVkIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy90cmFjZS5oXFxuKysrIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcXG5AQCAtMjQ4Myw2ICsyNDgzLDMxIEBAIFRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkLFxcbiBcXHQpXFxuICk7XFxuIFxcbitUUkFDRV9FVkVOVChyZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMsXFxuK1xcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksXFxuK1xcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSxcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0V0lQSFlfRU5UUllcXG4rXFx0XFx0V0RFVl9FTlRSWVxcbitcXHRcXHRfX2ZpZWxkKHU4LCBuX2NoYW5uZWxzKVxcbitcXHRcXHRfX2R5bmFtaWNfYXJyYXkodTMyLCBmcmVxcywgY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHMpXFxuK1xcdCksXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHR1MzIgKmZyZXFzID0gX19nZXRfZHluYW1pY19hcnJheShmcmVxcyk7XFxuK1xcbitcXHRcXHRXSVBIWV9BU1NJR047XFxuK1xcdFxcdFdERVZfQVNTSUdOO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VuX2NoYW5uZWxzID0gY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHM7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgY2hhbm5lbHMtXFx1MDAzZW5fY2hhbm5lbHM7IGkrKylcXG4rXFx0XFx0XFx0ZnJlcXNbaV0gPSBjaGFubmVscy1cXHUwMDNlY2hhbmRlZnNbaV0uY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuK1xcdCksXFxuK1xcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXFxcIiwgXFxcIiBXREVWX1BSX0ZNVCBcXFwiLCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzXFxcIixcXG4rXFx0XFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVxcdTAwM2VuX2NoYW5uZWxzLFxcbitcXHRcXHQgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksXFxuK1xcdFxcdFxcdFxcdF9fZW50cnktXFx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZih1MzIpKSlcXG4rKTtcXG4rXFxuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X21hY19hY2wsXFxuIFxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfYWNsX2RhdGEgKnBhcmFtcyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE4OjQyLjY1OTM5NDcwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDMzODQxNzc3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwibmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsXCIsXG4gICAgXCJjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGdlbmVyaWMgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgdG8gY29uZmlndXJlIG5vbi1ldmFjdWFibGUgTkFOIHNjaGVkdWxlIGNoYW5uZWxzLiBJdCBhZGRzIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcsIHZlcmlmaWNhdGlvbiBsb2dpYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlIGluIGNmZzgwMjExLCBkcml2ZXIvc3RhY2sgb3BzIGluIG1hYzgwMjExLCBhbmQgbW9kaWZpZXMgY2hhbm5lbCBldmFjdWF0aW9uIHNlbGVjdGlvbiBpbiBtYWM4MDIxMS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5sODAyMTEgc29ja2V0cyBhbmQgdmlydHVhbCB3aXJlbGVzcyBkZXZpY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzE5YTJhYWMxZDczOTI5ZDZiYWEwNTdiODFhOWU5ZGZlNGNjN2M3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjoxODozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCA2NDYxYTdiZDAxNjlkLi41OWQ3NmEwZGFmMmNiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTQyNTYsNiArNDI1NiwyMSBAQCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkIHtcbiBcdHN0cnVjdCBjZmc4MDIxMV9uYW5fY2hhbm5lbCBuYW5fY2hhbm5lbHNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzIC0gTkFOIG5vbi1ldmFjdWFibGUgY2hhbm5lbHNcbisgKlxuKyAqIFRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHNldCBvZiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgdGhhdCBtdXN0IG5vdFxuKyAqIGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLlxuKyAqXG4rICogQG5fY2hhbm5lbHM6IG51bWJlciBvZiBjaGFubmVsIGRlZmluaXRpb25zIGluICVjaGFuZGVmcy5cbisgKiBAY2hhbmRlZnM6IGFycmF5IG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIEVhY2hcbisgKlx0bXVzdCBtYXRjaCBhIGNoYW5uZWwgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuXG4rICovXG4rc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyB7XG4rXHR1OCBuX2NoYW5uZWxzO1xuK1x0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWZzW10gX19jb3VudGVkX2J5KG5fY2hhbm5lbHMpO1xuK307XG4rXG4gLyoqXG4gICogc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX21hcCAtIE5BTiBwZWVyIHNjaGVkdWxlIG1hcFxuICAqXG5AQCAtNTIwNCw2ICs1MjE5LDEyIEBAIHN0cnVjdCBtZ210X2ZyYW1lX3JlZ3Mge1xuICAqXHRzY2hlZHVsZSwgdGhlIGZ1bGwgbmV3IHNjaGVkdWxlIGlzIHByb3ZpZGVkIC0gcGFydGlhbCB1cGRhdGVzIGFyZSBub3RcbiAgKlx0c3VwcG9ydGVkLCBhbmQgdGhlIG5ldyBzY2hlZHVsZSBjb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUuXG4gICpcbisgKiBAbmFuX3NldF9ub25fZXZhY19jaGFubmVsczogc2V0IHRoZSBsaXN0IG9mIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIHRoYXRcbisgKlx0bXVzdCBub3QgYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuIFRoZSBwcm92aWRlZCBsaXN0XG4rICpcdHJlcGxhY2VzIHRoZSBwcmV2aW91cyBzZXQ7IGNoYW5uZWxzIG9mIHRoZSBjdXJyZW50IHNjaGVkdWxlIHRoYXQgYXJlXG4rICpcdG5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgYXJlXG4rICpcdGd1YXJhbnRlZWQgYnkgY2ZnODAyMTEgdG8gYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLlxuKyAqXG4gICogQHNldF9tdWx0aWNhc3RfdG9fdW5pY2FzdDogY29uZmlndXJlIG11bHRpY2FzdCB0byB1bmljYXN0IGNvbnZlcnNpb24gZm9yIEJTU1xuICAqXG4gICogQGdldF90eHFfc3RhdHM6IEdldCBUWFEgc3RhdHMgZm9yIGludGVyZmFjZSBvciBwaHkuIElmIHdkZXYgaXMgJU5VTEwsIHRoaXNcbkBAIC01NTkwLDYgKzU2MTEsOSBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHtcbiBcdGludFx0KCpuYW5fc2V0X3BlZXJfc2NoZWQpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4rXHRpbnRcdCgqbmFuX3NldF9ub25fZXZhY19jaGFubmVscykoc3RydWN0IHdpcGh5ICp3aXBoeSxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiBcdGludFx0KCpzZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgICAgY29uc3QgYm9vbCBlbmFibGVkKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuaW5kZXggN2JiNDYxODA2NWI2Ny4uMzNmZjAxOGMzM2VjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC05MjMsMTIgKzkyMywxNCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIHtcbiAgKiBAY2hhbm5lbF9lbnRyeTogdGhlIENoYW5uZWwgRW50cnkgYmxvYiBhcyBkZWZpbmVkIGluIFdpLUZpIEF3YXJlXG4gICpcdChUTSkgNC4wIHNwZWNpZmljYXRpb24gVGFibGUgMTAwIChDaGFubmVsIEVudHJ5IGZvcm1hdCBmb3IgdGhlIE5BTlxuICAqXHRBdmFpbGFiaWxpdHkgYXR0cmlidXRlKS5cbisgKiBAbm9fZXZhY3VhdGU6IGlmIHNldCwgdGhpcyBjaGFubmVsIG11c3Qgbm90IGJlIGV2YWN1YXRlZFxuICAqL1xuIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwge1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuX3JlcSBjaGFucmVxO1xuIFx0dTggbmVlZGVkX3J4X2NoYWlucztcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7XG4gXHR1OCBjaGFubmVsX2VudHJ5WzZdO1xuK1x0Ym9vbCBub19ldmFjdWF0ZTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5pbmRleCBkOGZlZmVmYzExYTk1Li5mYjMwMGIwYzRhMjg3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuQEAgLTEzODMsNiArMTM4MywxMyBAQFxuICAqXHRmcm9tIHRoZSBkZXZpY2UgdG8gcGVyZm9ybSBhbiBhbm5vdW5jZWQgc2NoZWR1bGUgdXBkYXRlLiBTZWVcbiAgKlx0JU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQgZm9yIG1vcmUgZGV0YWlscy5cbiAgKlx0SWYgbm90IHNldCwgdGhlIHNjaGVkdWxlIHNob3VsZCBiZSBhcHBsaWVkIGltbWVkaWF0ZWx5LlxuKyAqXHRTZXR0aW5nIGEgbmV3IHNjaGVkdWxlIGlzIGFsd2F5cyBhbGxvd2VkIGFuZCBpcyBuZXZlciB0cmVhdGVkIGFzIGFuXG4rICpcdGV2YWN1YXRpb24sIGV2ZW4gaWYgaXQgcmVtb3ZlcyBjaGFubmVscyB0aGF0IHdlcmUgcHJldmlvdXNseSBtYXJrZWQgYXNcbisgKlx0bm9uLWV2YWN1YWJsZSB3aXRoICVOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLiBUaGVcbisgKlx0bm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIHNjaGVkdWxlOlxuKyAqXHRjaGFubmVscyB0aGF0IHJlbWFpbiBpbiB0aGUgbmV3IHNjaGVkdWxlIGtlZXAgdGhlaXIgbWFya2luZywgY2hhbm5lbHNcbisgKlx0dGhhdCBhcmUgcmVtb3ZlZCBzaW1wbHkgbG9zZSBpdCwgYW5kIG5ld2x5IGFkZGVkIGNoYW5uZWxzIGFyZVxuKyAqXHRldmFjdWFibGUgYnkgZGVmYXVsdC5cbiAgKiBATkw4MDIxMV9DTURfTkFOX1NDSEVEX1VQREFURV9ET05FOiBFdmVudCBzZW50IHRvIHVzZXIgc3BhY2UgdG8gbm90aWZ5IHRoYXRcbiAgKlx0YSBkZWZlcnJlZCBsb2NhbCBOQU4gc2NoZWR1bGUgdXBkYXRlIChyZXF1ZXN0ZWQgd2l0aFxuICAqXHQlTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCBhbmQgJU5MODAyMTFfQVRUUl9OQU5fU0NIRURfREVGRVJSRUQpXG5AQCAtMTQyNyw2ICsxNDM0LDI4IEBAXG4gICogQE5MODAyMTFfQ01EX1NUT1BfUEQ6IFN0b3AgdGhlIFBEIG9wZXJhdGlvbiwgaWRlbnRpZmllZCBieVxuICAqXHRpdHMgJU5MODAyMTFfQVRUUl9XREVWIGludGVyZmFjZS5cbiAgKlxuKyAqIEBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTOiBTZXQgdGhlIGxpc3Qgb2YgTkFOIGxvY2FsIHNjaGVkdWxlXG4rICpcdGNoYW5uZWxzIHRoYXQgbXVzdCBub3QgYmUgZXZhY3VhdGVkLiBOQU4gbXVzdCBiZSBvcGVyYXRpb25hbFxuKyAqXHQoJU5MODAyMTFfQ01EX1NUQVJUX05BTiB3YXMgZXhlY3V0ZWQpIGFuZCBhIGxvY2FsIHNjaGVkdWxlIG11c3QgaGF2ZVxuKyAqXHRiZWVuIHNldCAoJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQpLiBUaGUgY29tbWFuZCBjYXJyaWVzIHplcm9cbisgKlx0b3IgbW9yZSBuZXN0ZWQgJU5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCBhdHRyaWJ1dGVzLCBlYWNoIGlkZW50aWZ5aW5nIGFcbisgKlx0Y2hhbm5lbCAoYnkgaXRzIGNoYW5uZWwgZGVmaW5pdGlvbikgb2YgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgdGhhdFxuKyAqXHRtdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3RcbisgKlx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldCBvZiBub24tZXZhY3VhYmxlIGNoYW5uZWxzOyBjaGFubmVscyBvZiB0aGVcbisgKlx0Y3VycmVudCBzY2hlZHVsZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYmVjb21lIGV2YWN1YWJsZSBhZ2Fpbi4gQWxsXG4rICpcdHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUsIG90aGVyd2lzZVxuKyAqXHR0aGUgY29tbWFuZCBmYWlscy4gVGhpcyBpcyB1c2VkIHRvIHByb3RlY3QgY2hhbm5lbHMgY2FycnlpbmcgTkRDIG9yXG4rICpcdGltbXV0YWJsZSBzY2hlZHVsZXMsIHdob3NlIGV2YWN1YXRpb24gd291bGQgYnJlYWsgZXhpc3RpbmcgTkRQXG4rICpcdGNvbm5lY3Rpb25zLlxuKyAqXHRUaGUgbm9uLWV2YWN1YWJsZSBtYXJraW5nIGlzIGEgcGVyLWNoYW5uZWwgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnRcbisgKlx0bG9jYWwgc2NoZWR1bGUgYW5kIG9ubHkgYWZmZWN0cyBldmFjdWF0aW9uIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnM7XG4rICpcdGl0IGRvZXMgbm90IHByZXZlbnQgdGhlIHNjaGVkdWxlIGl0c2VsZiBmcm9tIGJlaW5nIGNoYW5nZWQuIFJlbW92aW5nIGFcbisgKlx0Y2hhbm5lbCBmcm9tIHRoZSBzY2hlZHVsZSB3aXRoICVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGlzIGFcbisgKlx0dXNlci1pbml0aWF0ZWQgY2hhbmdlLCBub3QgYW4gZXZhY3VhdGlvbiwgYW5kIGlzIGFsbG93ZWQgZXZlbiBmb3IgYVxuKyAqXHRub24tZXZhY3VhYmxlIGNoYW5uZWwuIEFjcm9zcyBhIHNjaGVkdWxlIHVwZGF0ZSwgY2hhbm5lbHMgdGhhdCByZW1haW5cbisgKlx0a2VlcCB0aGVpciBub24tZXZhY3VhYmxlIG1hcmtpbmcsIHJlbW92ZWQgY2hhbm5lbHMgbG9zZSBpdCwgYW5kIG5ld2x5XG4rICpcdGFkZGVkIGNoYW5uZWxzIGFyZSBldmFjdWFibGUgYnkgZGVmYXVsdDsgaXNzdWUgdGhpcyBjb21tYW5kIGFnYWluIHRvXG4rICpcdGNoYW5nZSB0aGUgbm9uLWV2YWN1YWJsZSBzZXQuXG4gICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyXG4gICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG4gICovXG5AQCAtMTcwNSw2ICsxNzM0LDggQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHtcbiBcdE5MODAyMTFfQ01EX1NUQVJUX1BELFxuIFx0Tkw4MDIxMV9DTURfU1RPUF9QRCxcbiBcbitcdE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsXG4rXG4gXHQvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi9cbiBcbiBcdC8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqL1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuaW5kZXggMjNmNGY5ZWM4NmQwYS4uY2RjZjFmMDU3NzA3NyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9jZmcuY1xuKysrIGIvbmV0L21hYzgwMjExL2NmZy5jXG5AQCAtNTk3Myw2ICs1OTczLDE4IEBAIGllZWU4MDIxMV9zZXRfcGVlcl9uYW5fc2NoZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdHJldHVybiBpZWVlODAyMTFfbmFuX3NldF9wZWVyX3NjaGVkKHNkYXRhLCBzY2hlZCk7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbitpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfV0RFVl9UT19TVUJfSUYod2Rldik7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF93aXBoeSh3aXBoeSk7XG4rXG4rXHRyZXR1cm4gaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc2RhdGEsIGNoYW5uZWxzKTtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xuIFx0LmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLFxuIFx0LmRlbF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfZGVsX2lmYWNlLFxuQEAgLTYwOTEsNCArNjEwMyw1IEBAIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbiBcdC5zZXRfZXBjcyA9IGllZWU4MDIxMV9zZXRfZXBjcyxcbiBcdC5uYW5fc2V0X2xvY2FsX3NjaGVkID0gaWVlZTgwMjExX3NldF9sb2NhbF9uYW5fc2NoZWQsXG4gXHQubmFuX3NldF9wZWVyX3NjaGVkID0gaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZCxcbitcdC5uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzID0gaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1M2IwYjA4ZDM0NTk3Li45MjlmYzg5MzBhMzVlIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjA4Nyw2ICsyMDg3LDggQEAgaW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZCk7XG4gaW50IGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgc3RydWN0IGNmZzgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4raW50IGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7XG4gdm9pZCBpZWVlODAyMTFfbmFuX2ZyZWVfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX25hbl9wZWVyX3NjaGVkICpzY2hlZCk7XG4gdm9pZCBpZWVlODAyMTFfbmFuX3VwZGF0ZV9uZGlfY2FycmllcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpuZGlfc2RhdGEpO1xuIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKlxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9uYW4uYyBiL25ldC9tYWM4MDIxMS9uYW4uY1xuaW5kZXggMTllMDg2NjFiZTQzYS4uMzhiZDEwNTEyMWFjZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9uYW4uY1xuKysrIGIvbmV0L21hYzgwMjExL25hbi5jXG5AQCAtMjQ4LDYgKzI0OCwzNSBAQCBpZWVlODAyMTFfbmFuX2ZpbmRfZnJlZV9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK2ludFxuK2llZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnID0gXHUwMDI2c2RhdGEtXHUwMDNldmlmLmNmZy5uYW5fc2NoZWQ7XG4rXG4rXHQvKlxuK1x0ICogY2ZnODAyMTEgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBhbGwgcHJvdmlkZWQgY2hhbm5lbHMgYmVsb25nIHRvIHRoZVxuK1x0ICogY3VycmVudCBzY2hlZHVsZSwgc28ganVzdCBjbGVhciBhbGwgbm9uLWV2YWN1YWJsZSBmbGFncyBhbmQgc2V0IHRoZVxuK1x0ICogb25lcyBpbiB0aGUgbGlzdC5cbitcdCAqL1xuK1x0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzKTsgaisrKVxuK1x0XHRzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcbitcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzKTsgaisrKSB7XG4rXHRcdFx0aWYgKCFzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLmNoYW4pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2c2NoZWRfY2ZnLVx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3BlcixcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pKSB7XG4rXHRcdFx0XHRzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSB0cnVlO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcbiB7XG5AQCAtNzg2LDYgKzgxNSwxMCBAQCBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFxuIFx0XHR1c2FibGVfY2hhbm5lbHMrKztcbiBcbitcdFx0LyogTm8tZXZhY3VhdGUgY2hhbm5lbCBpcyB1c2FibGUgYnV0IGNhbm5vdCBiZSBldmFjdWF0ZWQgKi9cbitcdFx0aWYgKGNoYW4tXHUwMDNlbm9fZXZhY3VhdGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdGNoYW5fY3R4ID0gY29udGFpbmVyX29mKGNoYW4tXHUwMDNlY2hhbmN0eF9jb25mLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHgsIGNvbmYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5pbmRleCBkMTMzMTBmZWY2OTFhLi4yZjQ2MjQzNzczZjk0IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuY1xuQEAgLTMyNSw2ICszMjUsNDEgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeS5tdHgpO1xuK1xuK1x0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiB8fCAhd2Rldl9ydW5uaW5nKHdkZXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBEb24ndCBhbGxvdyB1cGRhdGluZyB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscyB3aGlsZSBhIGRlZmVycmVkXG4rXHQgKiBzY2hlZHVsZSB1cGRhdGUgaXMgcGVuZGluZywgYXMgdGhlIHNldCBvZiBjaGFubmVscyBtYXkgc3RpbGwgY2hhbmdlLlxuK1x0ICovXG4rXHRpZiAod2Rldi1cdTAwM2V1Lm5hbi5zY2hlZF91cGRhdGVfcGVuZGluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdC8qIEFsbCBwcm92aWRlZCBjaGFubmVscyBtdXN0IGJlbG9uZyB0byB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS4gKi9cbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcbitcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1xuK1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2Mgd2Rldi1cdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqKyspIHtcbitcdFx0XHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXHUwMDI2d2Rldi1cdTAwM2V1Lm5hbi5jaGFuZGVmc1tqXSxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pKSB7XG4rXHRcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0aWYgKCFmb3VuZClcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcbitcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xuK31cbitcbiB2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHQgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuaW5kZXggYjQ2MTBmNjY4NWRjYi4uNGVlNDhiOTM3MDgwMCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmhcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmhcbkBAIC01NjUsNiArNTY1LDEwIEBAIGludCBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcbiBcbitpbnQgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyk7XG4rXG4gc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqXG4gY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICp0bXAsXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IGU1ODVkYTFkNzljOWUuLmY0NDAzNmFkNDNmYjUgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTc3NjMsNiArMTc3NjMsNjkgQEAgc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkdWxlKHJkZXYsIHdkZXYsIHNjaGVkKTtcbiB9XG4gXG4rc3RhdGljIGludFxuK25sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmNoYW5uZWwsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZilcbit7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqY2hhbm5lbF9wYXJzZWQgX19mcmVlKGtmcmVlKSA9XG4rXHRcdGtjYWxsb2MoTkw4MDIxMV9BVFRSX01BWCArIDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxuK1x0XHRcdEdGUF9LRVJORUwpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghY2hhbm5lbF9wYXJzZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbmxhX3BhcnNlX25lc3RlZChjaGFubmVsX3BhcnNlZCwgTkw4MDIxMV9BVFRSX01BWCwgY2hhbm5lbCwgTlVMTCxcbitcdFx0XHQgICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxuK1x0XHRcdFx0ICAgICBjaGFuZGVmLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuK1x0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4rXHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XG4rXHRzdHJ1Y3QgbmxhdHRyICpjaGFubmVsO1xuK1xuK1x0aWYgKHdkZXYtXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXG4rXHRcdHJldHVybiAtRU5PVENPTk47XG4rXG4rXHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXG4rXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxuK1x0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pXG4rXHRcdG5fY2hhbm5lbHMrKztcbitcbitcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzIF9fZnJlZShrZnJlZSkgPVxuK1x0XHRremFsbG9jKHN0cnVjdF9zaXplKGNoYW5uZWxzLCBjaGFuZGVmcywgbl9jaGFubmVscyksXG4rXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWNoYW5uZWxzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzO1xuK1xuK1x0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcbitcdFx0XHRcdCBpbmZvLVx1MDAzZW5saGRyLCBHRU5MX0hEUkxFTiwgcmVtKSB7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdHJldCA9IG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChyZGV2LCBjaGFubmVsLCBpbmZvLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2Y2hhbm5lbHMtXHUwMDNlY2hhbmRlZnNbaV0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGkrKztcbitcdH1cbitcbitcdHJldHVybiBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHJkZXYsIHdkZXYsIGNoYW5uZWxzKTtcbit9XG4rXG4gc3RhdGljIGludCBubDgwMjExX2dldF9wcm90b2NvbF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjA2MTksNiArMjA2ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBubDgwMjExX3NtYWxsX29wc1tdID0ge1xuIFx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4gXHRcdC5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5jbWQgPSBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTLFxuK1x0XHQuZG9pdCA9IG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyxcbitcdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuK1x0XHQuaW50ZXJuYWxfZmxhZ3MgPSBJRkxBR1MoTkw4MDIxMV9GTEFHX05FRURfV0RFVl9VUCksXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjExX2ZhbSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNDY4NDlmZThkMGIzOS4uMjY5MjU4Yzk0YTQyYSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTEwOTMsNiArMTA5MywyMyBAQCByZGV2X25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludFxuK3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHR0cmFjZV9yZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgY2hhbm5lbHMpO1xuK1x0aWYgKHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMpXG4rXHRcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZW5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldixcbitcdFx0XHRcdFx0XHRcdCAgIGNoYW5uZWxzKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4rXHR0cmFjZV9yZGV2X3JldHVybl9pbnQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfc3RhcnRfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3RyYWNlLmggYi9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuaW5kZXggOGMyYTkxYjg1YzM5Ni4uNDM1ZGM1OGNhZmJlZCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy90cmFjZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuQEAgLTI0ODMsNiArMjQ4MywzMSBAQCBUUkFDRV9FVkVOVChyZGV2X25hbl9zZXRfcGVlcl9zY2hlZCxcbiBcdClcbiApO1xuIFxuK1RSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyxcbitcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscyksXG4rXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBjaGFubmVscyksXG4rXHRUUF9TVFJVQ1RfX2VudHJ5KFxuK1x0XHRXSVBIWV9FTlRSWVxuK1x0XHRXREVWX0VOVFJZXG4rXHRcdF9fZmllbGQodTgsIG5fY2hhbm5lbHMpXG4rXHRcdF9fZHluYW1pY19hcnJheSh1MzIsIGZyZXFzLCBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzKVxuK1x0KSxcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHR1MzIgKmZyZXFzID0gX19nZXRfZHluYW1pY19hcnJheShmcmVxcyk7XG4rXG4rXHRcdFdJUEhZX0FTU0lHTjtcbitcdFx0V0RFVl9BU1NJR047XG4rXHRcdF9fZW50cnktXHUwMDNlbl9jaGFubmVscyA9IGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7XG4rXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBjaGFubmVscy1cdTAwM2VuX2NoYW5uZWxzOyBpKyspXG4rXHRcdFx0ZnJlcXNbaV0gPSBjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXS5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuK1x0KSxcbitcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCIsIFwiIFdERVZfUFJfRk1UIFwiLCBuX2NoYW5uZWxzOiAldSwgZnJlcXM6ICVzXCIsXG4rXHRcdCAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS1cdTAwM2VuX2NoYW5uZWxzLFxuK1x0XHQgIF9fcHJpbnRfYXJyYXkoX19nZXRfZHluYW1pY19hcnJheShmcmVxcyksXG4rXHRcdFx0XHRfX2VudHJ5LVx1MDAzZW5fY2hhbm5lbHMsIHNpemVvZih1MzIpKSlcbispO1xuK1xuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X21hY19hY2wsXG4gXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHQgc3RydWN0IGNmZzgwMjExX2FjbF9kYXRhICpwYXJhbXMpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDIuNjU5Mzk2OTMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI0NjUyMTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3Igc3l6a2FsbGVyLiBGcm9tIHRoZSBmaWxlIGxpc3QsIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBpbnRlcmVzdGluZyB0byBtZTpcblxuRmlyc3QsIGl0IHRvdWNoZXMgYGNmZzgwMjExYCBhbmQgYG1hYzgwMjExYCBoZWF2aWx5LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBOQU4gKE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nKS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIOKAkyBib3RoIGFyZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29tcG9uZW50cywgd2hpY2ggYXJlIG5vdG9yaW91cyBmb3IgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGJ1Z3MuIEknbSBzZWVpbmcgc3RydWN0dXJlcyBsaWtlIGBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgLCBjYWxsYmFja3MsIGFuZCBgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMU2AuIFRoaXMgYE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFNgIGlzIGtleSBiZWNhdXNlIG5ldGxpbmsgaW50ZXJmYWNlcyBhcmUgcHJpbWUgc3l6a2FsbGVyIHRhcmdldHMuXG5cblRoZSBwcmVzZW5jZSBvZiBgbWFjODAyMTFfaHdzaW1gIGlzIGludHJpZ3VpbmcuIFRoYXQgdmlydHVhbCBXaUZpIGRyaXZlciBpcyBjcnVjaWFsIGZvciBzeXprYWxsZXIuIElmIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggYG1hYzgwMjExX2h3c2ltYCwgdGhlbiB3ZSdyZSBpbiBsdWNrIGJlY2F1c2Ugd2UgY2FuIHJlYWRpbHkgdGVzdCBpdCB3aXRob3V0IG5lZWRpbmcgcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydHMgTkFOLCBvciBpZiBtYWM4MDIxMSBldmVuIHN1cHBvcnRzIHRob3NlIE5BTiBjb21tYW5kcyB2aWEgbmw4MDIxMS4gSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYW55IHJlbGV2YW50IEtjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbWFrZSB0aGlzIGNvZGUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBvdGhlcndpc2Ugbm90IHJlYWNoYWJsZS5cblxuVGhlIGZhY3QgdGhhdCBgbmw4MDIxMWAgaXMgYWxzbyBpbnZvbHZlZCBpcyBhIGJpZyBwbHVzLiBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCBgbmw4MDIxMWAsIHNvIGdldHRpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkIHRocm91Z2ggdGhhdCBpbnRlcmZhY2UgaXMgYSBnb29kIHNpZ24uIFRoZSBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYCBhbmQgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgZnVuY3Rpb25zIGxvb2sgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5UbyBxdWlja2x5IGFzc2VzcyByZWFjaGFiaWxpdHksIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZG8gc29tZSBncmVwcyBvbiB0aGUga2VybmVsIHNvdXJjZSB0byBpZGVudGlmeSBjYWxsIHNpdGVzIGFuZCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDcuOTA1OTIxNTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzMzNTg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMy1vYmoteSArPSB0ZXN0cy9cXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xMj1jZmc4MDIxMS0kKENPTkZJR19PRikgKz0gb2Yub1xcbm5ldC93aXJlbGVzcy9NYWtlZmlsZToxMzpjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTQ6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTE1LVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1DRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0xNy1cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTg6Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTKSArPSBzaGlwcGVkLWNlcnRzLm9cXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTk6aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1jZmc4MDIxMS15ICs9IGV4dHJhLWNlcnRzLm9cXG4tLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZT0yMz0kKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxcbi0tXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlLTMxLVxcbm5ldC93aXJlbGVzcy9NYWtlZmlsZTozMjokKG9iaikvZXh0cmEtY2VydHMuYzogJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSBcXFxcXFxubmV0L3dpcmVsZXNzL01ha2VmaWxlOjMzOlxcdFxcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcXG5uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMzQtXFx0QCQoa2VjaG8pIFxcXCIgIEdFTiAgICAgJEBcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jPTE2OTQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaXJfcGVybWlzc2l2ZV9jaGFuKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvd2lyZWxlc3MvY2hhbi5jLTE3MDItXFxubmV0L3dpcmVsZXNzL2NoYW4uYzoxNzAzOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSKSB8fFxcbm5ldC93aXJlbGVzcy9jaGFuLmMtMTcwNC1cXHQgICAgISh3aXBoeS1cXHUwMDNlcmVndWxhdG9yeV9mbGFncyBcXHUwMDI2IFJFR1VMQVRPUllfRU5BQkxFX1JFTEFYX05PX0lSKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmM9NTg0PXN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02NzEtXFx0XFx0XFx0ICBjZmc4MDIxMV9kZnNfY2hhbm5lbHNfdXBkYXRlX3dvcmspO1xcbm5ldC93aXJlbGVzcy9jb3JlLmM6NjcyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtNjczLVxcdHJkZXYtXFx1MDAzZXdpcGh5LndleHQgPSBcXHUwMDI2Y2ZnODAyMTFfd2V4dF9oYW5kbGVyO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02OTMtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzo2OTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL2NvcmUuYy02OTUtXFx0cmRldi1cXHUwMDNld2lwaHkuZmxhZ3MgfD0gV0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNDQzPXN0YXRpYyB2b2lkIF9jZmc4MDIxMV91bnJlZ2lzdGVyX3dkZXYoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTQ4My1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE0ODQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNDg1LVxcdGtmcmVlX3NlbnNpdGl2ZSh3ZGV2LVxcdTAwM2V3ZXh0LmtleXMpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNTM4PXZvaWQgY2ZnODAyMTFfbGVhdmVfbG9ja2VkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTU2Mi1cXG5uZXQvd2lyZWxlc3MvY29yZS5jOjE1NjM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xNTY0LVxcdFxcdGtmcmVlKHdkZXYtXFx1MDAzZXdleHQuaWUpO1xcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYz0xNjQ5PXZvaWQgY2ZnODAyMTFfaW5pdF93ZGV2KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTE2NTctXFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxNjU4OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTY1OS1cXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfa2V5ID0gLTE7XFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jPTE3NDI9c3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy0xODE2LVxcdFxcdHN3aXRjaCAod2Rldi1cXHUwMDNlaWZ0eXBlKSB7XFxubmV0L3dpcmVsZXNzL2NvcmUuYzoxODE3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9jb3JlLmMtMTgxOC1cXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD01Nzg9Y2ZnODAyMTFfZ2V0XzZnaHpfcG93ZXJfdHlwZShjb25zdCB1OCAqZWxlbXMsIHNpemVfdCBlbGVtc19sZW4sXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTU4MC1cXG5uZXQvd2lyZWxlc3MvY29yZS5oOjU4MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9jb3JlLmgtNTgyLSNkZWZpbmUgQ0ZHODAyMTFfREVWX1dBUk5fT04oY29uZClcXHRXQVJOX09OKGNvbmQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oPTYyOD1zdHJ1Y3QgY2ZnODAyMTFfY29sb2NhdGVkX2FwIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ0LVxcbm5ldC93aXJlbGVzcy9jb3JlLmg6NjQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9LVU5JVF9URVNUKVxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNjQ2LSNkZWZpbmUgRVhQT1JUX1NZTUJPTF9JRl9DRkc4MDIxMV9LVU5JVChzeW0pIEVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoc3ltKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuaD02NTM9c2l6ZV90IGNmZzgwMjExX2dlbl9uZXdfaWUoY29uc3QgdTggKmllLCBzaXplX3QgaWVsZW4sXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5oLTY1OC0jZGVmaW5lIFZJU0lCTEVfSUZfQ0ZHODAyMTFfS1VOSVQgc3RhdGljXFxubmV0L3dpcmVsZXNzL2NvcmUuaDo2NTk6I2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICovXFxubmV0L3dpcmVsZXNzL2NvcmUuaC02NjAtXFxuLS1cXG5uZXQvd2lyZWxlc3MvZGVidWdmcy5oLTQtXFxubmV0L3dpcmVsZXNzL2RlYnVnZnMuaDo1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgtNi12b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTk9dm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCxcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMjMtXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MjQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yNS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTUxLVxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6NTI6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy01My1cXHRtZW1zZXQoXFx1MDAyNndycXUsIDAsIHNpemVvZih3cnF1KSk7XFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jPTg3PWludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0MC1cXG5uZXQvd2lyZWxlc3MvaWJzcy5jOjE0MTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvaWJzcy5jLTE0Mi1cXHR3ZGV2LVxcdTAwM2V3ZXh0Lmlic3MuY2hhbmRlZiA9IHBhcmFtcy1cXHUwMDNlY2hhbmRlZjtcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmM9MTU2PXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcXG4tLVxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg0LVxcdG1lbXNldChcXHUwMDI2d2Rldi1cXHUwMDNldS5pYnNzLmNoYW5kZWYsIDAsIHNpemVvZih3ZGV2LVxcdTAwM2V1Lmlic3MuY2hhbmRlZikpO1xcbm5ldC93aXJlbGVzcy9pYnNzLmM6MTg1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9pYnNzLmMtMTg2LVxcdGlmICghbm93ZXh0KVxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYz0xOTI9aW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTMtXFxubmV0L3dpcmVsZXNzL2lic3MuYzoyMTQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL2lic3MuYy0yMTUtaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmM9Mjc3PXZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjgyLVxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpO1xcbm5ldC93aXJlbGVzcy9tbG1lLmM6MjgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9tbG1lLmMtMjg0LVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTQ2Nz1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NTA5LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTUxMDojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MTEtXFx0XFx0d2Rldi1cXHUwMDNld2V4dC5kZWZhdWx0X2tleSA9IGtleS5pZHg7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU1MzItXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NTMzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTUzNC1cXHRcXHR3ZGV2LVxcdTAwM2V3ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4O1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz01NjQ1PXN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2OTEtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo1NjkyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY5My1cXHRpZiAoIWVycikge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDgxNz1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODU4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTA4NTk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEwODYwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSByZWdfcnVsZV9wb2xpY3lbTkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMDkxMD1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMDk4OC19XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMDk4OTojZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVCAqL1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTA5OTAtXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5ODA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTk5ODItXFx0fSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE5OTgzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xOTk4NC1cXHR7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTIzNDg4PXZvaWQgY2ZnODAyMTFfc2NoZWR1bGVfY2hhbm5lbHNfY2hlY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjM0OTUtXFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0RGU19DT05DVVJSRU5UKSB8fFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjM0OTY6XFx0ICAgIChJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMzQ5Ny1cXHQgICAgIHdpcGh5LVxcdTAwM2VyZWd1bGF0b3J5X2ZsYWdzIFxcdTAwMjYgUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIpKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz00OTc9c3RhdGljIGludCByZWdfc2NoZWR1bGVfYXBwbHkoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2RvbSlcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYy01MTYtXFxubmV0L3dpcmVsZXNzL3JlZy5jOjUxNzojaWZkZWYgQ09ORklHX0NGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9yZWcuYy01MTgtLyogTWF4IG51bWJlciBvZiBjb25zZWN1dGl2ZSBhdHRlbXB0cyB0byBjb21tdW5pY2F0ZSB3aXRoIENSREEgICovXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NTg2PXN0YXRpYyBpbmxpbmUgaW50IGNhbGxfY3JkYShjb25zdCBjaGFyICphbHBoYTIpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNTg5LX1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6NTkwOiNlbmRpZiAvKiBDT05GSUdfQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUICovXFxubmV0L3dpcmVsZXNzL3JlZy5jLTU5MS1cXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz02OTc9c3RhdGljIGJvb2wgdmFsaWRfY291bnRyeShjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzI5LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo3MzA6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9yZWcuYy03MzEtI2luY2x1ZGUgXFx1MDAzY2tleXMvYXN5bW1ldHJpYy10eXBlLmhcXHUwMDNlXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmM9NzM1PXN0YXRpYyBpbnQgX19pbml0IGxvYWRfYnVpbHRpbl9yZWdkYl9rZXlzKHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ3LVxcbm5ldC93aXJlbGVzcy9yZWcuYzo3NDg6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzQ5LVxcdHg1MDlfbG9hZF9jZXJ0aWZpY2F0ZV9saXN0KHNoaXBwZWRfcmVnZGJfY2VydHMsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtNzUyLSNlbmRpZlxcbm5ldC93aXJlbGVzcy9yZWcuYzo3NTM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvcmVnLmM6NzU0OlxcdGlmIChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSWzBdICE9ICdcXFxcMCcpXFxubmV0L3dpcmVsZXNzL3JlZy5jLTc1NS1cXHRcXHR4NTA5X2xvYWRfY2VydGlmaWNhdGVfbGlzdChleHRyYV9yZWdkYl9jZXJ0cyxcXG4tLVxcbm5ldC93aXJlbGVzcy9yZWcuYz03OTg9c3RhdGljIHZvaWQgZnJlZV9yZWdkYl9rZXlyaW5nKHZvaWQpXFxuLS1cXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAwLX1cXG5uZXQvd2lyZWxlc3MvcmVnLmM6ODAxOiNlbmRpZiAvKiBDT05GSUdfQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREIgKi9cXG5uZXQvd2lyZWxlc3MvcmVnLmMtODAyLVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jPTIwMzg9Ym9vbCByZWdfbGFzdF9yZXF1ZXN0X2NlbGxfYmFzZSh2b2lkKVxcbi0tXFxubmV0L3dpcmVsZXNzL3JlZy5jLTIwNDItXFxubmV0L3dpcmVsZXNzL3JlZy5jOjIwNDM6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvcmVnLmMtMjA0NC0vKiBDb3JlIHNwZWNpZmljIGNoZWNrICovXFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jPTExMTc9dm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0xMTIyLVxcdHN0cnVjdCBza19idWZmICptc2c7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTIzOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTEyNC1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTExNjUtXFxubmV0L3dpcmVsZXNzL3NjYW4uYzoxMTY2OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMTE2Ny1cXHRpZiAod2Rldi1cXHUwMDNlbmV0ZGV2IFxcdTAwMjZcXHUwMDI2ICFyZXF1ZXN0LVxcdTAwM2VpbmZvLmFib3J0ZWQpIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmM9MzQ0Mz12b2lkIGNmZzgwMjExX3VwZGF0ZV9hc3NvY19ic3NfZW50cnkoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zY2FuLmMtMzUxNi1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjM1MTc6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NjYW4uYy0zNTE4LXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKlxcbi0tXFxubmV0L3dpcmVsZXNzL3NtZS5jPTczNT12b2lkIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy03NDMtXFx0dTggY291bnRyeV9kYXRhbGVuO1xcbm5ldC93aXJlbGVzcy9zbWUuYzo3NDQ6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc0NS1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtNzc0LVxcbm5ldC93aXJlbGVzcy9zbWUuYzo3NzU6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3NtZS5jLTc3Ni1cXHRpZiAod2V4dGV2IFxcdTAwMjZcXHUwMDI2ICFjci1cXHUwMDNldmFsaWRfbGlua3MpIHtcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYz0xMDc5PXZvaWQgX19jZmc4MDIxMV9yb2FtZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMDgxLXtcXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTA4MjojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTA4My1cXHR1bmlvbiBpd3JlcV9kYXRhIHdycXU7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTEzNC1cXG5uZXQvd2lyZWxlc3Mvc21lLmM6MTEzNTojaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3Mvc21lLmMtMTEzNi1cXHRpZiAoIWluZm8tXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvc21lLmM9MTM0Mz12b2lkIF9fY2ZnODAyMTFfZGlzY29ubmVjdGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICppZSxcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzQ4LVxcdGludCBpO1xcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzQ5OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzUwLVxcdHVuaW9uIGl3cmVxX2RhdGEgd3JxdTtcXG4tLVxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk0LVxcbm5ldC93aXJlbGVzcy9zbWUuYzoxMzk1OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9zbWUuYy0xMzk2LVxcdG1lbXNldChcXHUwMDI2d3JxdSwgMCwgc2l6ZW9mKHdycXUpKTtcXG4tLVxcbm5ldC93aXJlbGVzcy90ZXN0cy9NYWtlZmlsZT0xPWNmZzgwMjExLXRlc3RzLXkgKz0gbW9kdWxlLm8gZnJhZ21lbnRhdGlvbi5vIHNjYW4ubyB1dGlsLm8gY2hhbi5vXFxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlLTItXFxubmV0L3dpcmVsZXNzL3Rlc3RzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0NGRzgwMjExX0tVTklUX1RFU1QpICs9IGNmZzgwMjExLXRlc3RzLm9cXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02Mzc9RVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTtcXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMtNjM4LVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYzo2Mzk6I2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY0MC1zdGF0aWMgdm9pZCB3aXJlbGVzc193YXJuX2NmZzgwMjExX3dleHQodm9pZClcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYz02NDk9c3RydWN0IGl3X3N0YXRpc3RpY3MgKmdldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTY1Ni1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NjU3OiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy02NTgtXFx0aWYgKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jPTY5Nj1zdGF0aWMgaXdfaGFuZGxlciBnZXRfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29yZS5jLTcwMS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmM6NzAyOiNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy93ZXh0LWNvcmUuYy03MDMtXFx0aWYgKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5KSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM9Mjg9c3RhdGljIHZvaWQgd2lyZWxlc3Nfc2VxX3ByaW50Zl9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC93aXJlbGVzcy93ZXh0LXByb2MuYy00MC0jZW5kaWZcXG5uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmM6NDE6I2lmZGVmIENPTkZJR19DRkc4MDIxMVxcbm5ldC93aXJlbGVzcy93ZXh0LXByb2MuYy00Mi1cXHRcXHRpZiAoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo0OC4wNzMyNjMwMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ4NzA3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgTUFDODAyMTEgYW5kIENGRzgwMjExKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBmZWVscyBvZmYgd2l0aCB0aGUgTUFDODAyMTEgYW5kIENGRzgwMjExIHNldHVwLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCwgd2hpY2ggb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scywgdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyB0aGV5IGhhdmUgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtIG9yIGV2ZW4gdGhlIGtlcm5lbCBhcyBhIHdob2xlLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdW51c3VhbCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gYSBjb25maWd1cmF0aW9uIGlzc3VlIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQgcmVjZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NDkuOTIxOTczNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTAxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMXxjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1MC4xMDY0ODExN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODU1MzM4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgODAyLjExIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWFjODAyMTEgc3Vic3lzdGVtIGxpdmUsIHNvIGl0J3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQgYW55IGludmVzdGlnYXRpb24gb3IgbW9kaWZpY2F0aW9uIHJlbGF0ZWQgdG8gaXRzIGNvbmZpZ3VyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgdmFyaWFibGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0cyB0aGF0IG1pZ2h0IGluZm9ybSB0aGUgbmV4dCBzdGVwcy4gSXQncyB0aW1lIHRvIHNpZnQgdGhyb3VnaCB0aGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1MS45OTIwMTg3MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjE2NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1Mi4xNjMyNDI2MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzM0ODE4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gbWFjODAyMTFfaHdzaW0gYW5kIE5BTioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgbWFjODAyMTFfaHdzaW1gIGFuZCBOQU4sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIGl0J3MgY29ycmVjdGx5IGhhbmRsaW5nIHRoZXNlIGZlYXR1cmVzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS4gSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgcmVsaWVzIG9uIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoYXQncyBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgLm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGxpbmtzIHRvIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AsIGlzIGJlaW5nIGhhbmRsZWQuIElzIGl0IGJlaW5nIHNldCBjb3JyZWN0bHk/IElzIGl0IGJlaW5nIGNhbGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZXM/IEnigJlsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgTkFOIG5vbi1ldmFjdWF0aW9uIGNoYW5uZWxzIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYG1hYzgwMjExX2h3c2ltYCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBhbmQgaG93IGBtYWM4MDIxMWAgdXNlcyB0aGUgYG1hYzgwMjExX2NvbmZpZ19vcHNgIGluIGdlbmVyYWwuIElzIGBod3NpbWAgb3IgYGNmZzgwMjExYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGRzPyBUaGlzIGlzIHNvbWV0aGluZyBJIHNob3VsZCBhbHNvIGJlYXIgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NTQuODk4MDYzNzg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM1ODA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWM4MDIxMV9jb25maWdfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nz1pZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU5ODctXFxubmV0L21hYzgwMjExL2NmZy5jOjU5ODg6Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTg5LVxcdC5hZGRfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2FkZF9pZmFjZSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTM4LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjM5OmV4dGVybiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHM7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtNDAtXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jPTc5Mz1zdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTg1Mi1cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjg1MzpcXHR3aXBoeSA9IHdpcGh5X25ld19ubShcXHUwMDI2bWFjODAyMTFfY29uZmlnX29wcywgcHJpdl9zaXplLCByZXF1ZXN0ZWRfbmFtZSk7XFxubmV0L21hYzgwMjExL21haW4uYy04NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE4OjU0Ljk5NzQyODE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTExMDA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIG1hYzgwMjExIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWFjODAyMTFfY29uZmlnX29wc2AuLi4gdGhhdCdzIHRoZSBzaGFyZWQgb3BlcmF0aW9uYWwgc3RydWN0dXJlIHVzZWQgYWNyb3NzICphbGwqIHRoZSBtYWM4MDIxMSBkcml2ZXJzLiAgVGhhdCBtZWFucyBpdCdzIGZ1bmRhbWVudGFsLiBBbmQgSSBrbm93IGBtYWM4MDIxMV9od3NpbWAgbGV2ZXJhZ2VzIGl0IHRvbywgbmF0dXJhbGx5LiBOb3csIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucy4gTGV0J3MgZ2V0IHRoYXQgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgc2V0dGluZyBhbmQgc2VlIHdoYXQncyB3aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBhbmQgYmVoYXZpb3Igb2YgdGhlIGhhcmR3YXJlIHNpbXVsYXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1Ni45NDg1MzI4ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU5NjUxOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTg6NTguMDg0NTAzOTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTMwODA1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIFZpcnR1YWwgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHZpcnR1YWwgd2lyZWxlc3MgbmV0d29yayBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBkcml2ZXIuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQncyB0aGUgZmlyc3Qgc3RvcCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgd2lyZWxlc3MgbGFuZHNjYXBlIGFuZCB3aGF0J3MgY29uZmlndXJhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1OS45OTc1ODc2NzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxODo1OS45OTc3MDY1NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4MjEzNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTkFOIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gb2YgTkFOLCBzcGVjaWZpY2FsbHkgdGhlIGV2YWN1YXRpb24gY2hhbm5lbCBsb2dpYy4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgbWFjODAyMTFgIGNvZGUgYmFzZS4gTXkgZmlyc3Qgc3RlcCBpcyBhIGNvZGUgcmV2aWV3IG9mIGBubDgwMjExLmNgLCBgY29yZS5jYCwgYW5kIGBuYW4uY2AuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZpbGVzIGludGVyYWN0IGFuZCB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBub24tZXZhY3VhdGlvbiBjaGFubmVscyBhcmUgbWFuYWdlZC4gSSdsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgLCBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGFuZCBgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuXG5cbkknbGwgc3RhcnQgd2l0aCBgbmw4MDIxMS5jYCwgYW5kIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTc3NjMgYXMgYSBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzIHdpbGwgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDIuNDc5ODQ1ODUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDA3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzc2MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc3NjA6XFx0XFx0XFx0XFx0bmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTkFOX0FWQUlMX0JMT0JdKTtcXG4xNzc2MTpcXHRcXHR9XFxuMTc3NjI6XFx0XFxuMTc3NjM6XFx0XFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xcbjE3NzY0OlxcdH1cXG4xNzc2NTpcXHRcXG4xNzc2NjpcXHRzdGF0aWMgaW50XFxuMTc3Njc6XFx0bmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4xNzc2ODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcXG4xNzc2OTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxcbjE3NzcwOlxcdHtcXG4xNzc3MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqY2hhbm5lbF9wYXJzZWQgX19mcmVlKGtmcmVlKSA9XFxuMTc3NzI6XFx0XFx0XFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICsgMSwgc2l6ZW9mKCpjaGFubmVsX3BhcnNlZCksXFxuMTc3NzM6XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuMTc3NzQ6XFx0XFx0aW50IHJldDtcXG4xNzc3NTpcXHRcXG4xNzc3NjpcXHRcXHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxcbjE3Nzc3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3Nzc4OlxcdFxcbjE3Nzc5OlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXFxuMTc3ODA6XFx0XFx0XFx0XFx0ICAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTc3ODE6XFx0XFx0aWYgKHJldClcXG4xNzc4MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3NzgzOlxcdFxcbjE3Nzg0OlxcdFxcdHJldHVybiBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBjaGFubmVsX3BhcnNlZCxcXG4xNzc4NTpcXHRcXHRcXHRcXHRcXHQgICAgIGNoYW5kZWYsIGZhbHNlKTtcXG4xNzc4NjpcXHR9XFxuMTc3ODc6XFx0XFxuMTc3ODg6XFx0c3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNzc4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTc3OTA6XFx0e1xcbjE3NzkxOlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbjE3NzkyOlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xNzc5MzpcXHRcXHRpbnQgcmVtLCBpID0gMCwgbl9jaGFubmVscyA9IDA7XFxuMTc3OTQ6XFx0XFx0c3RydWN0IG5sYXR0ciAqY2hhbm5lbDtcXG4xNzc5NTpcXHRcXG4xNzc5NjpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTilcXG4xNzc5NzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTc3OTg6XFx0XFxuMTc3OTk6XFx0XFx0aWYgKCF3ZGV2X3J1bm5pbmcod2RldikpXFxuMTc4MDA6XFx0XFx0XFx0cmV0dXJuIC1FTk9UQ09OTjtcXG4xNzgwMTpcXHRcXG4xNzgwMjpcXHRcXHQvKiBDb3VudCBob3cgbWFueSBjaGFubmVsIGF0dHJpYnV0ZXMgd2UgZ290ICovXFxuMTc4MDM6XFx0XFx0bmxtc2dfZm9yX2VhY2hfYXR0cl90eXBlKGNoYW5uZWwsIE5MODAyMTFfQVRUUl9OQU5fQ0hBTk5FTCxcXG4xNzgwNDpcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pXFxuMTc4MDU6XFx0XFx0XFx0bl9jaGFubmVscysrO1xcbjE3ODA2OlxcdFxcbjE3ODA3OlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzIF9fZnJlZShrZnJlZSkgPVxcbjE3ODA4OlxcdFxcdFxcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcXG4xNzgwOTpcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4xNzgxMDpcXHRcXHRpZiAoIWNoYW5uZWxzKVxcbjE3ODExOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3ODEyOlxcdFxcbjE3ODEzOlxcdFxcdGNoYW5uZWxzLVxcdTAwM2VuX2NoYW5uZWxzID0gbl9jaGFubmVscztcXG4xNzgxNDpcXHRcXG4xNzgxNTpcXHRcXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxcbjE3ODE2OlxcdFxcdFxcdFxcdFxcdCBpbmZvLVxcdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSkge1xcbjE3ODE3OlxcdFxcdFxcdGludCByZXQ7XFxuMTc4MTg6XFx0XFxuMTc4MTk6XFx0XFx0XFx0cmV0ID0gbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHJkZXYsIGNoYW5uZWwsIGluZm8sXFxuMTc4MjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbm5lbHMtXFx1MDAzZWNoYW5kZWZzW2ldKTtcXG4xNzgyMTpcXHRcXHRcXHRpZiAocmV0KVxcbjE3ODIyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc4MjM6XFx0XFx0XFx0aSsrO1xcbjE3ODI0OlxcdFxcdH1cXG4xNzgyNTpcXHRcXG4xNzgyNjpcXHRcXHRyZXR1cm4gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XFxuMTc4Mjc6XFx0fVxcbjE3ODI4OlxcdFxcbjE3ODI5OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcHJvdG9jb2xfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNzgzMDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xNzgzMTpcXHR7XFxuMTc4MzI6XFx0XFx0dm9pZCAqaGRyO1xcbjE3ODMzOlxcdFxcdHN0cnVjdCBza19idWZmICptc2c7XFxuMTc4MzQ6XFx0XFxuMTc4MzU6XFx0XFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XFxuMTc4MzY6XFx0XFx0aWYgKCFtc2cpXFxuMTc4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc4Mzg6XFx0XFxuMTc4Mzk6XFx0XFx0aGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLCAwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTowMi40ODE0OTE0ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0MTY1NTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gV2lyZWxlc3MgQ29yZSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBuZXQvd2lyZWxlc3MvY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzMjAgdG8gMzcwLiBUaGF0IHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggc29tZSBjcml0aWNhbCwgZm91bmRhdGlvbmFsIGFzcGVjdHMgb2YgdGhlIHdpcmVsZXNzIGNvcmUg4oCTIHByb2JhYmx5IHRoZSBpbml0aWFsaXphdGlvbiwgcmVnaXN0cmF0aW9uLCBvciBoYW5kbGluZyBvZiBzb21lIGNvcmUgd2lyZWxlc3Mgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhvc2UgY29tcG9uZW50cy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgY29yZSBvZiBzb21lIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBvciB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbW9zdCBiYXNpYyB3aXJlbGVzcyBmdW5jdGlvbnMuIEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gcmVndWxhdG9yeSBoYW5kbGluZyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiwgb3IgZXZlbiBzb21lIGFzcGVjdHMgb2YgbmV0IGRldmljZSBpbnRlZ3JhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIGJhc2ljLCBsaWtlIGEgbXV0ZXggaW5pdCwgb3IgaWYgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgYml0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDQuNTIzMTUwMzExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspXFxuIDMyMTpcXHRcXHRcXHR3ZGV2LVxcdTAwM2V1Lm5hbi5jaGFuZGVmc1tpXSA9IHNjaGVkLVxcdTAwM2VuYW5fY2hhbm5lbHNbaV0uY2hhbmRlZjtcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0d2Rldi1cXHUwMDNldS5uYW4ubl9jaGFubmVscyA9IHNjaGVkLVxcdTAwM2VuX2NoYW5uZWxzO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRyZXR1cm4gMDtcXG4gMzI2OlxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0aW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAzMjk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXFxuIDMzMTpcXHR7XFxuIDMzMjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeS5tdHgpO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRpZiAod2Rldi1cXHUwMDNlaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiB8fCAhd2Rldl9ydW5uaW5nKHdkZXYpKVxcbiAzMzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qXFxuIDMzODpcXHRcXHQgKiBEb24ndCBhbGxvdyB1cGRhdGluZyB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscyB3aGlsZSBhIGRlZmVycmVkXFxuIDMzOTpcXHRcXHQgKiBzY2hlZHVsZSB1cGRhdGUgaXMgcGVuZGluZywgYXMgdGhlIHNldCBvZiBjaGFubmVscyBtYXkgc3RpbGwgY2hhbmdlLlxcbiAzNDA6XFx0XFx0ICovXFxuIDM0MTpcXHRcXHRpZiAod2Rldi1cXHUwMDNldS5uYW4uc2NoZWRfdXBkYXRlX3BlbmRpbmcpXFxuIDM0MjpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHQvKiBBbGwgcHJvdmlkZWQgY2hhbm5lbHMgbXVzdCBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuICovXFxuIDM0NTpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIGNoYW5uZWxzLVxcdTAwM2VuX2NoYW5uZWxzOyBpKyspIHtcXG4gMzQ2OlxcdFxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyB3ZGV2LVxcdTAwM2V1Lm5hbi5uX2NoYW5uZWxzOyBqKyspIHtcXG4gMzQ5OlxcdFxcdFxcdFxcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2lkZW50aWNhbChcXHUwMDI2d2Rldi1cXHUwMDNldS5uYW4uY2hhbmRlZnNbal0sXFxuIDM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNoYW5uZWxzLVxcdTAwM2VjaGFuZGVmc1tpXSkpIHtcXG4gMzUxOlxcdFxcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4gMzUyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNTM6XFx0XFx0XFx0XFx0fVxcbiAzNTQ6XFx0XFx0XFx0fVxcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRcXHRpZiAoIWZvdW5kKVxcbiAzNTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDM1ODpcXHRcXHR9XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHJldHVybiByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xcbiAzNjE6XFx0fVxcbiAzNjI6XFx0XFxuIDM2MzpcXHR2b2lkIGNmZzgwMjExX3N0b3BfcGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAzNjQ6XFx0XFx0XFx0ICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldilcXG4gMzY1OlxcdHtcXG4gMzY2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5Lm10eCk7XFxuIDM2NzpcXHRcXG4gMzY4OlxcdFxcdGlmIChXQVJOX09OKHdkZXYtXFx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QRCkpXFxuIDM2OTpcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjA0LjUyMzQ0NzE0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM1NzA0MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTkFOIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTkFOIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgaXMgdW5kb3VidGVkbHkgYG5ldC9tYWM4MDIxMS9uYW4uY2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE5laWdoYm9yIEF3YXJlbmVzcyBOZXR3b3JraW5nIChOQU4pIHNob3VsZCBiZS4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAyNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDguNTU5MTU1MTQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL25hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqXFxuIDI0MTpcXHRpZWVlODAyMTFfbmFuX2ZpbmRfZnJlZV9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbmFuX3NjaGVkX2NmZyAqc2NoZWRfY2ZnKVxcbiAyNDI6XFx0e1xcbiAyNDM6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHMpOyBpKyspIHtcXG4gMjQ0OlxcdFxcdFxcdGlmICghc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVsc1tpXS5jaGFucmVxLm9wZXIuY2hhbilcXG4gMjQ1OlxcdFxcdFxcdFxcdHJldHVybiBcXHUwMDI2c2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVsc1tpXTtcXG4gMjQ2OlxcdFxcdH1cXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdGludFxcbiAyNTI6XFx0aWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIDI1MzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9zY2hlZF9jZmcgKnNjaGVkX2NmZyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmLmNmZy5uYW5fc2NoZWQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qXFxuIDI1ODpcXHRcXHQgKiBjZmc4MDIxMSBhbHJlYWR5IHZhbGlkYXRlZCB0aGF0IGFsbCBwcm92aWRlZCBjaGFubmVscyBiZWxvbmcgdG8gdGhlXFxuIDI1OTpcXHRcXHQgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlXFxuIDI2MDpcXHRcXHQgKiBvbmVzIGluIHRoZSBsaXN0LlxcbiAyNjE6XFx0XFx0ICovXFxuIDI2MjpcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVscyk7IGorKylcXG4gMjYzOlxcdFxcdFxcdHNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0ubm9fZXZhY3VhdGUgPSBmYWxzZTtcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBjaGFubmVscy1cXHUwMDNlbl9jaGFubmVsczsgaSsrKSB7XFxuIDI2NjpcXHRcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoc2NoZWRfY2ZnLVxcdTAwM2VjaGFubmVscyk7IGorKykge1xcbiAyNjc6XFx0XFx0XFx0XFx0aWYgKCFzY2hlZF9jZmctXFx1MDAzZWNoYW5uZWxzW2pdLmNoYW5yZXEub3Blci5jaGFuKVxcbiAyNjg6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI2OTpcXHRcXHRcXHRcXHRpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoXFx1MDAyNnNjaGVkX2NmZy1cXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLFxcbiAyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjaGFubmVscy1cXHUwMDNlY2hhbmRlZnNbaV0pKSB7XFxuIDI3MTpcXHRcXHRcXHRcXHRcXHRzY2hlZF9jZmctXFx1MDAzZWNoYW5uZWxzW2pdLm5vX2V2YWN1YXRlID0gdHJ1ZTtcXG4gMjcyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNzM6XFx0XFx0XFx0XFx0fVxcbiAyNzQ6XFx0XFx0XFx0fVxcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHRyZXR1cm4gMDtcXG4gMjc4OlxcdH1cXG4gMjc5OlxcdFxcbiAyODA6XFx0aW50IGllZWU4MDIxMV9uYW5fc2V0X2xvY2FsX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiAyODE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2xvY2FsX3NjaGVkICpzY2hlZClcXG4gMjgyOlxcdHtcXG4gMjgzOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgKnNjaGVkX2lkeF90b19jaGFuW0lFRUU4MDIxMV9OQU5fTUFYX0NIQU5ORUxTXSA9IHt9O1xcbiAyODQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZi5jZmcubmFuX3NjaGVkO1xcbiAyODU6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpiYWNrdXBfc2NoZWQgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKCpiYWNrdXBfc2NoZWQpO1xcbiAyODY6XFx0XFx0aW50IHJldDtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0aWYgKCFiYWNrdXBfc2NoZWQpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MDguNTYxNjE0NjY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDgxOTc1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5BTiBFdmFjdWF0aW9uIENoYW5uZWwgU2VhcmNoKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgTkFOIGNvZGUgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlIGhhbmRsZSBjaGFubmVsIGV2YWN1YXRpb24gaW4gdGhlIDgwMi4xMSBOQU4gc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAgZnVuY3Rpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyBpbiBgbmV0L21hYzgwMjExL25hbi5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGNvcmUgb2Ygd2hlcmUgdGhlIGNoYW5uZWwgc2VsZWN0aW9uIGxvZ2ljIGZvciBldmFjdWF0aW9uIHJlc2lkZXMuIEknbSBob3BpbmcgSSBjYW4gZWl0aGVyIGlkZW50aWZ5IHRoZSBleGFjdCBhbGdvcml0aG0gaW4gdXNlLCBvciBkZXRlcm1pbmUgdGhlIGlucHV0cyBpdCBsZXZlcmFnZXMuIE15IGd1ZXNzIGlzIGl0J3MgaGFuZGxpbmcgYSBsb3Qgb2YgdGhlIGNoYW5uZWwtaG9wcGluZyBhbmQgcG90ZW50aWFsbHkgZHluYW1pYyBjb25maWd1cmF0aW9uIHRoYXQncyBpbnZvbHZlZCwgYW5kIGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyBzb3BoaXN0aWNhdGVkIHRoZSBzZWxlY3Rpb24gaXMuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBjb25zaWRlcmF0aW9ucyBmb3IgaW50ZXJmZXJlbmNlIG1pdGlnYXRpb24sIHRocm91Z2hwdXQgb3B0aW1pemF0aW9uLCBhbmQgcGVyaGFwcyBldmVuIHBvd2VyIG1hbmFnZW1lbnQgaW4gdGhpcyBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjEwLjcwOTgxNjUwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL25hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdFxcdGlmIChXQVJOX09OKHNkYXRhLVxcdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU4pKVxcbiA4MDI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdHNjaGVkX2NmZyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmLmNmZy5uYW5fc2NoZWQ7XFxuIDgwNTpcXHRcXG4gODA2OlxcdFxcdC8qIEZpbmQgdGhlIGNoYW5uZWwgdG8gZXZhY3VhdGUgYW5kIGNvdW50IHVzYWJsZSBjaGFubmVscyAqL1xcbiA4MDc6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJRUVFODAyMTFfTkFOX01BWF9DSEFOTkVMUzsgaSsrKSB7XFxuIDgwODpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsICpjaGFuID1cXG4gODA5OlxcdFxcdFxcdFxcdFxcdTAwMjZzY2hlZF9jZmctXFx1MDAzZWNoYW5uZWxzW2ldO1xcbiA4MTA6XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4ICpjaGFuX2N0eDtcXG4gODExOlxcdFxcdFxcdGludCBzbG90X2NvdW50ID0gMDtcXG4gODEyOlxcdFxcbiA4MTM6XFx0XFx0XFx0aWYgKCFjaGFuLVxcdTAwM2VjaGFucmVxLm9wZXIuY2hhbiB8fCAhY2hhbi1cXHUwMDNlY2hhbmN0eF9jb25mKVxcbiA4MTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdFxcdHVzYWJsZV9jaGFubmVscysrO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRcXHQvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqL1xcbiA4MTk6XFx0XFx0XFx0aWYgKGNoYW4tXFx1MDAzZW5vX2V2YWN1YXRlKVxcbiA4MjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyMTpcXHRcXG4gODIyOlxcdFxcdFxcdGNoYW5fY3R4ID0gY29udGFpbmVyX29mKGNoYW4tXFx1MDAzZWNoYW5jdHhfY29uZixcXG4gODIzOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdFxcdC8qIElmIGN0eCBzcGVjaWZpZWQsIG9ubHkgY29uc2lkZXIgdGhhdCBzcGVjaWZpYyBjaGFuY3R4ICovXFxuIDgyNjpcXHRcXHRcXHRpZiAoY3R4KSB7XFxuIDgyNzpcXHRcXHRcXHRcXHRpZiAoY2hhbl9jdHggPT0gY3R4KVxcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0ZXZhY19jaGFuID0gY2hhbjtcXG4gODI5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MzA6XFx0XFx0XFx0fVxcbiA4MzE6XFx0XFxuIDgzMjpcXHRcXHRcXHQvKiBDYW4gb25seSBldmFjdWF0ZSBjaGFubmVscyB3aG9zZSBjaGFuY3R4IGlzIE5BTi1vbmx5ICovXFxuIDgzMzpcXHRcXHRcXHRpZiAoaWVlZTgwMjExX2NoYW5jdHhfcmVmY291bnQobG9jYWwsIGNoYW5fY3R4KSBcXHUwMDNlIDEpXFxuIDgzNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0XFx0LyogQ291bnQgaG93IG1hbnkgdGltZSBzbG90cyB1c2UgdGhpcyBjaGFubmVsICovXFxuIDgzNzpcXHRcXHRcXHRmb3IgKGludCBzID0gMDsgcyBcXHUwMDNjIENGRzgwMjExX05BTl9TQ0hFRF9OVU1fVElNRV9TTE9UUzsgcysrKVxcbiA4Mzg6XFx0XFx0XFx0XFx0aWYgKHNjaGVkX2NmZy1cXHUwMDNlc2NoZWR1bGVbc10gPT0gY2hhbilcXG4gODM5OlxcdFxcdFxcdFxcdFxcdHNsb3RfY291bnQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MTAuNzA5OTY5MDgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MzY2NzE2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBSYWRhciBpcyBCbGlua2luZyEqKlxuXG5Pa2F5LCB0aGlzIGxvb2tzICp2ZXJ5KiBwcm9taXNpbmcgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBpdC4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbmV3IGBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTYCBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciwgYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IEknbSBsb29raW5nIGZvci4gV2hhdCBjYXRjaGVzIG15IGV5ZSBpbW1lZGlhdGVseSBhcmUgdGhlc2UgY3JpdGljYWwgZmFjdG9yczpcblxuKiAgICoqVXNlcnNwYWNlIEludGVyZmFjZToqKiBJdCdzIGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgc2V0dXAgc2lnbmlmaWNhbnRseS4gTm8gY29tcGxleCBkZXZpY2UgZHJpdmVycyB0byBkZWFsIHdpdGggaW5pdGlhbGx5LlxuKiAgICoqRHluYW1pYyBBbGxvY2F0aW9ucyBhbmQgUGFyc2luZzoqKiBOZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzIHdpdGggZHluYW1pYyBhbGxvY2F0aW9ucz8gUGVyZmVjdCEgVGhpcyBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBUaGUgcGFyc2luZyBsb2dpYyBpcyByaXBlIGZvciBtYWxmb3JtZWQgaW5wdXQgZXhwbG9pdGF0aW9uLlxuKiAgICoqV2lkZXNwcmVhZCBJbXBhY3Q6KiogSXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgKGBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYGllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgYW5kIGV2YWN1YXRpb24gbG9naWMgaW4gYGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW5gKSwgd2hpY2ggYnJvYWRlbnMgdGhlIHNjb3BlIGZvciB2dWxuZXJhYmlsaXRpZXMgdG8gYmUgZm91bmQuXG4qICAgKipWaXJ0dWFsaXphdGlvbiBGcmllbmRseToqKiBGdWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobmw4MDIxMSBhbmQgbWFjODAyMTEgLyBtYWM4MDIxMVxcX2h3c2ltKS4gVGhpcyBtZWFucyBJIGNhbiBydW4gdGhpcyB3aXRoIGVhc2UgaW4gYW4gYXV0b21hdGVkIGZ1enplci4gVGhpcyB3aWxsIG1ha2UgdGVzdGluZyBlYXNpZXIuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSBpbiwgbGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zIHNldCB1cCBjb3JyZWN0bHkuIEkgbmVlZCB0byBjb25maXJtOlxuXG4qICAgYENGRzgwMjExYFxuKiAgIGBNQUM4MDIxMWBcbiogICBgTUFDODAyMTFfSFdTSU1gXG5cbkFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIFwiTkFOXCIgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgTkFOLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSdtIG1pc3NpbmcuIEdvdCB0byBoYXZlIGFsbCBteSBiYXNlcyBjb3ZlcmVkIGZvciB0aGUgZnV6emluZyBydW4uIFRoaXMgaXMgZ29pbmcgdG8gYmUgZnVuIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE0LjM0NjY0MzQ2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTgxMjk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE0LjUxMjYzNTA4OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ5MTA2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3Qgc2F5cyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyBzdGFjayB3YXJyYW50cyBhIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhhdCBmaWxlIHRvIGNoZWNrIHdoYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZSwgYW5kIGlmIGFueSBhcmUgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0uIEknbSBsb29raW5nIGZvciBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBzZWUgaWYgYSBzaW1wbGUga2VybmVsIHJlY29uZmlndXJlIGlzIHRoZSBzb2x1dGlvbiBvciBpZiB0aGlzIHJlcXVpcmVzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToxNi41NjE3NDQwMDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjkyMjQ1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToxNi43NTQ2NzM4OTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1NzQwODg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBXaXJlbGVzcyBEcml2ZXIgQnVpbGQgUHJvY2Vzc2VzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHdpcmVsZXNzIGRyaXZlcnMgYXJlIGJ1aWx0LCBzbyBJJ2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBjb3JlIGJ1aWxkIGxvZ2ljIGZvciB0aGUgbWFjODAyMTEgZnJhbWV3b3JrIGFuZCBhbnkgZ2VuZXJhbCB3aXJlbGVzcyBjb21wb25lbnRzIHdpbGwgcHJvYmFibHkgcmVzaWRlIGluIHRob3NlIHRvcC1sZXZlbCBgTWFrZWZpbGVgIGZpbGVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBgbmV0L21hYzgwMjExL01ha2VmaWxlYCBhbmQgYG5ldC93aXJlbGVzcy9NYWtlZmlsZWAuIFRob3NlIGFyZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHM7IEkgY2FuIHByb2JhYmx5IGZpbmQgdGhlIGluY2x1c2lvbiBvZiB0aG9zZSBmaWxlcyBhbmQgc2VlIGhvdyB0aG9zZSBjb21wb25lbnQgcGFydHMgYXJlIHRpZWQgdG9nZXRoZXIuIEknbGwgbmVlZCB0byByZXZpZXcgdGhvc2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBmb3IgdGhpcyBhbmQgc2VlIHdoZXJlIHRoZSBhY3R1YWwgZHJpdmVycyBmaXQgaW50byB0aGlzIG92ZXJhbGwgc3RydWN0dXJlLiBUaGlzIHNob3VsZCBob3BlZnVsbHkgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoZSBkcml2ZXJzIGFyZSBpbnRlZ3JhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE4LjgxMjA4NjAzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX01BQzgwMjExKSArPSBtYWM4MDIxMS5vXFxuICAgMzpcXHRcXG4gICA0OlxcdCMgbWFjODAyMTEgb2JqZWN0c1xcbiAgIDU6XFx0bWFjODAyMTEteSA6PSBcXFxcXFxuICAgNjpcXHRcXHRtYWluLm8gc3RhdHVzLm8gXFxcXFxcbiAgIDc6XFx0XFx0ZHJpdmVyLW9wcy5vIFxcXFxcXG4gICA4OlxcdFxcdHN0YV9pbmZvLm8gXFxcXFxcbiAgIDk6XFx0XFx0d2VwLm8gXFxcXFxcbiAgMTA6XFx0XFx0YWVhZF9hcGkubyBcXFxcXFxuICAxMTpcXHRcXHR3cGEubyBcXFxcXFxuICAxMjpcXHRcXHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXFxcXG4gIDEzOlxcdFxcdGh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXFxcXFxcbiAgMTQ6XFx0XFx0dmh0Lm8gXFxcXFxcbiAgMTU6XFx0XFx0aGUubyBcXFxcXFxuICAxNjpcXHRcXHRzMWcubyBcXFxcXFxuICAxNzpcXHRcXHRpYnNzLm8gXFxcXFxcbiAgMTg6XFx0XFx0aWZhY2UubyBcXFxcXFxuICAxOTpcXHRcXHRsaW5rLm8gXFxcXFxcbiAgMjA6XFx0XFx0cmF0ZS5vIFxcXFxcXG4gIDIxOlxcdFxcdHRraXAubyBcXFxcXFxuICAyMjpcXHRcXHRhZXNfY21hYy5vIFxcXFxcXG4gIDIzOlxcdFxcdGFlc19nbWFjLm8gXFxcXFxcbiAgMjQ6XFx0XFx0Zmlsc19hZWFkLm8gXFxcXFxcbiAgMjU6XFx0XFx0Y2ZnLm8gXFxcXFxcbiAgMjY6XFx0XFx0ZXRodG9vbC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJ4Lm8gXFxcXFxcbiAgMjg6XFx0XFx0c3BlY3RtZ210Lm8gXFxcXFxcbiAgMjk6XFx0XFx0dHgubyBcXFxcXFxuICAzMDpcXHRcXHRrZXkubyBcXFxcXFxuICAzMTpcXHRcXHR1dGlsLm8gcGFyc2UubyBcXFxcXFxuICAzMjpcXHRcXHR3bWUubyBcXFxcXFxuICAzMzpcXHRcXHRjaGFuLm8gYXAubyBcXFxcXFxuICAzNDpcXHRcXHR0cmFjZS5vIG1sbWUubyBcXFxcXFxuICAzNTpcXHRcXHR0ZGxzLm8gXFxcXFxcbiAgMzY6XFx0XFx0b2NiLm8gXFxcXFxcbiAgMzc6XFx0XFx0YWlydGltZS5vIFxcXFxcXG4gIDM4OlxcdFxcdGVodC5vIHVoci5vIG5hbi5vXFxuICAzOTpcXHRcXG4gIDQwOlxcdG1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICs9IGxlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjE4LjgxMjI0MzMxM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDM5Nzg2NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOQU4gQ2hhbm5lbCBFdmFjdWF0aW9uIExvZ2ljIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ3ZlIGJlZW4gd29ya2luZyB0aHJvdWdoLiBGaXJzdCwgSSBrbm93IHRoYXQgYG5hbi5vYCBpcyBpbmhlcmVudGx5IHBhcnQgb2YgYG1hYzgwMjExLm9gIHdoZW4gYENPTkZJR19NQUM4MDIxMWAgaXMgZW5hYmxlZC4gU2ltaWxhcmx5LCBgbmw4MDIxMS5vYCBhbmQgYGNvcmUub2AgYXJlIGJ1aWx0IGludG8gYGNmZzgwMjExLm9gIHdoZW4gYENPTkZJR19DRkc4MDIxMWAgaXMgYWN0aXZlLiBUaGlzIGRpY3RhdGVzIHRoZSBjb3JlIG1vZHVsZXMgaW4gcGxheS5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdDogYG5sODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgLCBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AsIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AsIGFuZCBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmAuXG5cbk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlaXIgdmlzaWJpbGl0eS4gQSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIHJldmVhbHMgdGhhdCBgbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCBhbmQgYG5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBgY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgaXMgbG9jYXRlZCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AsIHdoaWxlIGBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVsc2AgaXMgc3RhdGljIGluIGBuZXQvbWFjODAyMTEvY2ZnLmNgIGFuZCBib3RoIGBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgYW5kIGBpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuYCBhcmUgaW4gYG5ldC9tYWM4MDIxMS9uYW4uY2AuIEkgaGF2ZSB0byByZW1lbWJlciB0byBmaWx0ZXIgb3V0IGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMgc3VjaCBhcyBgcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC93aXJlbGVzcy9yZGV2LW9wcy5oYCwgc2luY2UgdGhvc2UgY2FuJ3QgYmUgZGlyZWN0bHkgY2FsbGVkLlxuXG5UaGUgZXNzZW50aWFsIGBFbmFibGVDb25maWdzYCBmb3IgdGhpcyBhcmUgYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuXG5cbk5vdywgSSdtIHJlYWR5IHRvIGNyYWZ0IHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIFRoZSBmdXp6aW5nIHRhcmdldCBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmdgIGR1ZSB0byB0aGUgaGFuZGxpbmcgb2YgYSBuZXcgbmV0bGluayBjb21tYW5kLCBjaGFubmVsIGV2YWN1YXRpb24gbG9naWMgZm9yIE5BTiwgdGhlIHBhcnNpbmcgb2YgbmVzdGVkIG5sODAyMTEgYXR0cmlidXRlcywgYW5kIHRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgYm90aCBuZXRsaW5rIGFuZCBtYWM4MDIxMSB2aXJ0dWFsIGludGVyZmFjZXMuXG5cblRoZXJlZm9yZSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgaGlnaGxpZ2h0IHRoaXMgbmV3IGNvZGUgcGF0aCwgaW5jbHVkaW5nIGl0cyBuZXN0ZWQgcGFyc2luZyBsb2dpYy4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgdGhhdCBmdWxsIGxpc3Qgb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHRoZSB0aHJlZSBjb25maWd1cmF0aW9ucyBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZC5cblxuQmVmb3JlIEkgYWN0dWFsbHkgbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGFsbCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYW5kIGNvbmZpZ3MgYXJlIGNvcnJlY3QuXG5cbkZ1bmN0aW9uczpcbjEuIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgXG4yLiBgbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsYFxuMy4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgXG40LiBgaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHNgXG41LiBgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgXG42LiBgaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhbmBcblxuQ29uZmlnczpcbi0gYENGRzgwMjExYFxuLSBgTUFDODAyMTFgXG4tIGBNQUM4MDIxMV9IV1NJTWBcblxuT2theSwgZXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MTYsIk91dHB1dFRva2VucyI6MzAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MjUuODUyMDMyNzc2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTM1NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxcIixcbiAgICBcImNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX25hbl9maW5kX2V2YWNfY2hhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyB0byBjb25maWd1cmUgbm9uLWV2YWN1YWJsZSBOQU4gc2NoZWR1bGUgY2hhbm5lbHMuIEl0IGFkZHMgbmV0bGluayBhdHRyaWJ1dGUgcGFyc2luZywgdmVyaWZpY2F0aW9uIGxvZ2ljIGFnYWluc3QgdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUgaW4gY2ZnODAyMTEsIGRyaXZlci9zdGFjayBvcHMgaW4gbWFjODAyMTEsIGFuZCBtb2RpZmllcyBjaGFubmVsIGV2YWN1YXRpb24gc2VsZWN0aW9uIGluIG1hYzgwMjExLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmw4MDIxMSBzb2NrZXRzIGFuZCB2aXJ0dWFsIHdpcmVsZXNzIGRldmljZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcIm5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbFwiLFxuICAgIFwiY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc1wiLFxuICAgIFwiaWVlZTgwMjExX3NldF9uYW5fbm9uX2V2YWNfY2hhbm5lbHNcIixcbiAgICBcImllZWU4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzXCIsXG4gICAgXCJpZWVlODAyMTFfbmFuX2ZpbmRfZXZhY19jaGFuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBnZW5lcmljIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIHRvIGNvbmZpZ3VyZSBub24tZXZhY3VhYmxlIE5BTiBzY2hlZHVsZSBjaGFubmVscy4gSXQgYWRkcyBuZXRsaW5rIGF0dHJpYnV0ZSBwYXJzaW5nLCB2ZXJpZmljYXRpb24gbG9naWMgYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSBpbiBjZmc4MDIxMSwgZHJpdmVyL3N0YWNrIG9wcyBpbiBtYWM4MDIxMSwgYW5kIG1vZGlmaWVzIGNoYW5uZWwgZXZhY3VhdGlvbiBzZWxlY3Rpb24gaW4gbWFjODAyMTEuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBubDgwMjExIHNvY2tldHMgYW5kIHZpcnR1YWwgd2lyZWxlc3MgZGV2aWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjI2LjA0MzU3NzE3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNDAwNDE2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToyNi4wNDQyOTE4MTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzEzOTMyMTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgbmV0bGluayBjb21tYW5kIE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMgYW5kIG1hYzgwMjExL2NmZzgwMjExIGhhbmRsZXJzIHRvIG1hcmsgY2VydGFpbiBOQU4gbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgYXMgbm9uLWV2YWN1YWJsZS5cXG5cXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoaXQgaXMgYSBzZXR0ZXIgY29tbWFuZCByZXR1cm5pbmcgb25seSBhbiBlcnJvciBzdGF0dXMpLCBwcmVjbHVkaW5nIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuXFxuMi4gQWxsIGR5bmFtaWMgYWxsb2NhdGlvbnMgKHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMsIG5sYXR0ciBhcnJheSkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGt6YWxsb2MsIGtjYWxsb2MpIGFuZCBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgdmlhIF9fZnJlZShrZnJlZSkuXFxuMy4gVGhlIG5ldyBib29sIGZpZWxkIGBub19ldmFjdWF0ZWAgaW4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChjbGVhcmVkIHRvIGZhbHNlIGFuZCBzZXQgdG8gdHJ1ZSB3aGVuIG1hdGNoaW5nKS5cXG40LiBObyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGludmFsaWQgcG9pbnRlcnMsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE3MTlhMmFhYzFkNzM5MjlkNmJhYTA1N2I4MWE5ZTlkZmU0Y2M3YzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIyOjE4OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IDY0NjFhN2JkMDE2OWQuLjU5ZDc2YTBkYWYyY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDI1Niw2ICs0MjU2LDIxIEBAIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQge1xuIFx0c3RydWN0IGNmZzgwMjExX25hbl9jaGFubmVsIG5hbl9jaGFubmVsc1tdIF9fY291bnRlZF9ieShuX2NoYW5uZWxzKTtcbiB9O1xuIFxuKy8qKlxuKyAqIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgLSBOQU4gbm9uLWV2YWN1YWJsZSBjaGFubmVsc1xuKyAqXG4rICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgc2V0IG9mIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyB0aGF0IG11c3Qgbm90XG4rICogYmUgZXZhY3VhdGVkIGZvciBjb25jdXJyZW50IG9wZXJhdGlvbnMuXG4rICpcbisgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWwgZGVmaW5pdGlvbnMgaW4gJWNoYW5kZWZzLlxuKyAqIEBjaGFuZGVmczogYXJyYXkgb2YgY2hhbm5lbCBkZWZpbml0aW9ucyB0aGF0IG11c3Qgbm90IGJlIGV2YWN1YXRlZC4gRWFjaFxuKyAqXHRtdXN0IG1hdGNoIGEgY2hhbm5lbCBvZiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZS5cbisgKi9cbitzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzIHtcbitcdHU4IG5fY2hhbm5lbHM7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZnNbXSBfX2NvdW50ZWRfYnkobl9jaGFubmVscyk7XG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfbWFwIC0gTkFOIHBlZXIgc2NoZWR1bGUgbWFwXG4gICpcbkBAIC01MjA0LDYgKzUyMTksMTIgQEAgc3RydWN0IG1nbXRfZnJhbWVfcmVncyB7XG4gICpcdHNjaGVkdWxlLCB0aGUgZnVsbCBuZXcgc2NoZWR1bGUgaXMgcHJvdmlkZWQgLSBwYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdFxuICAqXHRzdXBwb3J0ZWQsIGFuZCB0aGUgbmV3IHNjaGVkdWxlIGNvbXBsZXRlbHkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZS5cbiAgKlxuKyAqIEBuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzOiBzZXQgdGhlIGxpc3Qgb2YgbG9jYWwgc2NoZWR1bGUgY2hhbm5lbHMgdGhhdFxuKyAqXHRtdXN0IG5vdCBiZSBldmFjdWF0ZWQgZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gVGhlIHByb3ZpZGVkIGxpc3RcbisgKlx0cmVwbGFjZXMgdGhlIHByZXZpb3VzIHNldDsgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgc2NoZWR1bGUgdGhhdCBhcmVcbisgKlx0bm90IGluY2x1ZGVkIGJlY29tZSBldmFjdWFibGUgYWdhaW4uIEFsbCBwcm92aWRlZCBjaGFubmVscyBhcmVcbisgKlx0Z3VhcmFudGVlZCBieSBjZmc4MDIxMSB0byBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWwgc2NoZWR1bGUuXG4rICpcbiAgKiBAc2V0X211bHRpY2FzdF90b191bmljYXN0OiBjb25maWd1cmUgbXVsdGljYXN0IHRvIHVuaWNhc3QgY29udmVyc2lvbiBmb3IgQlNTXG4gICpcbiAgKiBAZ2V0X3R4cV9zdGF0czogR2V0IFRYUSBzdGF0cyBmb3IgaW50ZXJmYWNlIG9yIHBoeS4gSWYgd2RldiBpcyAlTlVMTCwgdGhpc1xuQEAgLTU1OTAsNiArNTYxMSw5IEBAIHN0cnVjdCBjZmc4MDIxMV9vcHMge1xuIFx0aW50XHQoKm5hbl9zZXRfcGVlcl9zY2hlZCkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbitcdGludFx0KCpuYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpO1xuIFx0aW50XHQoKnNldF9tdWx0aWNhc3RfdG9fdW5pY2FzdCkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdCAgICBjb25zdCBib29sIGVuYWJsZWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA3YmI0NjE4MDY1YjY3Li4zM2ZmMDE4YzMzZWNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTkyMywxMiArOTIzLDE0IEBAIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYge1xuICAqIEBjaGFubmVsX2VudHJ5OiB0aGUgQ2hhbm5lbCBFbnRyeSBibG9iIGFzIGRlZmluZWQgaW4gV2ktRmkgQXdhcmVcbiAgKlx0KFRNKSA0LjAgc3BlY2lmaWNhdGlvbiBUYWJsZSAxMDAgKENoYW5uZWwgRW50cnkgZm9ybWF0IGZvciB0aGUgTkFOXG4gICpcdEF2YWlsYWJpbGl0eSBhdHRyaWJ1dGUpLlxuKyAqIEBub19ldmFjdWF0ZTogaWYgc2V0LCB0aGlzIGNoYW5uZWwgbXVzdCBub3QgYmUgZXZhY3VhdGVkXG4gICovXG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5fcmVxIGNoYW5yZXE7XG4gXHR1OCBuZWVkZWRfcnhfY2hhaW5zO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjtcbiBcdHU4IGNoYW5uZWxfZW50cnlbNl07XG4rXHRib29sIG5vX2V2YWN1YXRlO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IGQ4ZmVmZWZjMTFhOTUuLmZiMzAwYjBjNGEyODcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtMTM4Myw2ICsxMzgzLDEzIEBAXG4gICpcdGZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIGFuIGFubm91bmNlZCBzY2hlZHVsZSB1cGRhdGUuIFNlZVxuICAqXHQlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRCBmb3IgbW9yZSBkZXRhaWxzLlxuICAqXHRJZiBub3Qgc2V0LCB0aGUgc2NoZWR1bGUgc2hvdWxkIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXG4rICpcdFNldHRpbmcgYSBuZXcgc2NoZWR1bGUgaXMgYWx3YXlzIGFsbG93ZWQgYW5kIGlzIG5ldmVyIHRyZWF0ZWQgYXMgYW5cbisgKlx0ZXZhY3VhdGlvbiwgZXZlbiBpZiBpdCByZW1vdmVzIGNoYW5uZWxzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG1hcmtlZCBhc1xuKyAqXHRub24tZXZhY3VhYmxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMuIFRoZVxuKyAqXHRub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgc2NoZWR1bGU6XG4rICpcdGNoYW5uZWxzIHRoYXQgcmVtYWluIGluIHRoZSBuZXcgc2NoZWR1bGUga2VlcCB0aGVpciBtYXJraW5nLCBjaGFubmVsc1xuKyAqXHR0aGF0IGFyZSByZW1vdmVkIHNpbXBseSBsb3NlIGl0LCBhbmQgbmV3bHkgYWRkZWQgY2hhbm5lbHMgYXJlXG4rICpcdGV2YWN1YWJsZSBieSBkZWZhdWx0LlxuICAqIEBOTDgwMjExX0NNRF9OQU5fU0NIRURfVVBEQVRFX0RPTkU6IEV2ZW50IHNlbnQgdG8gdXNlciBzcGFjZSB0byBub3RpZnkgdGhhdFxuICAqXHRhIGRlZmVycmVkIGxvY2FsIE5BTiBzY2hlZHVsZSB1cGRhdGUgKHJlcXVlc3RlZCB3aXRoXG4gICpcdCVOTDgwMjExX0NNRF9OQU5fU0VUX0xPQ0FMX1NDSEVEIGFuZCAlTkw4MDIxMV9BVFRSX05BTl9TQ0hFRF9ERUZFUlJFRClcbkBAIC0xNDI3LDYgKzE0MzQsMjggQEBcbiAgKiBATkw4MDIxMV9DTURfU1RPUF9QRDogU3RvcCB0aGUgUEQgb3BlcmF0aW9uLCBpZGVudGlmaWVkIGJ5XG4gICpcdGl0cyAlTkw4MDIxMV9BVFRSX1dERVYgaW50ZXJmYWNlLlxuICAqXG4rICogQE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFM6IFNldCB0aGUgbGlzdCBvZiBOQU4gbG9jYWwgc2NoZWR1bGVcbisgKlx0Y2hhbm5lbHMgdGhhdCBtdXN0IG5vdCBiZSBldmFjdWF0ZWQuIE5BTiBtdXN0IGJlIG9wZXJhdGlvbmFsXG4rICpcdCglTkw4MDIxMV9DTURfU1RBUlRfTkFOIHdhcyBleGVjdXRlZCkgYW5kIGEgbG9jYWwgc2NoZWR1bGUgbXVzdCBoYXZlXG4rICpcdGJlZW4gc2V0ICglTkw4MDIxMV9DTURfTkFOX1NFVF9MT0NBTF9TQ0hFRCkuIFRoZSBjb21tYW5kIGNhcnJpZXMgemVyb1xuKyAqXHRvciBtb3JlIG5lc3RlZCAlTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMIGF0dHJpYnV0ZXMsIGVhY2ggaWRlbnRpZnlpbmcgYVxuKyAqXHRjaGFubmVsIChieSBpdHMgY2hhbm5lbCBkZWZpbml0aW9uKSBvZiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSB0aGF0XG4rICpcdG11c3Qgbm90IGJlIGV2YWN1YXRlZCBmb3IgY29uY3VycmVudCBvcGVyYXRpb25zLiBUaGUgcHJvdmlkZWQgbGlzdFxuKyAqXHRyZXBsYWNlcyB0aGUgcHJldmlvdXMgc2V0IG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHM7IGNoYW5uZWxzIG9mIHRoZVxuKyAqXHRjdXJyZW50IHNjaGVkdWxlIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBiZWNvbWUgZXZhY3VhYmxlIGFnYWluLiBBbGxcbisgKlx0cHJvdmlkZWQgY2hhbm5lbHMgbXVzdCBleGlzdCBpbiB0aGUgY3VycmVudCBsb2NhbCBzY2hlZHVsZSwgb3RoZXJ3aXNlXG4rICpcdHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCBjaGFubmVscyBjYXJyeWluZyBOREMgb3JcbisgKlx0aW1tdXRhYmxlIHNjaGVkdWxlcywgd2hvc2UgZXZhY3VhdGlvbiB3b3VsZCBicmVhayBleGlzdGluZyBORFBcbisgKlx0Y29ubmVjdGlvbnMuXG4rICpcdFRoZSBub24tZXZhY3VhYmxlIG1hcmtpbmcgaXMgYSBwZXItY2hhbm5lbCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudFxuKyAqXHRsb2NhbCBzY2hlZHVsZSBhbmQgb25seSBhZmZlY3RzIGV2YWN1YXRpb24gZm9yIGNvbmN1cnJlbnQgb3BlcmF0aW9ucztcbisgKlx0aXQgZG9lcyBub3QgcHJldmVudCB0aGUgc2NoZWR1bGUgaXRzZWxmIGZyb20gYmVpbmcgY2hhbmdlZC4gUmVtb3ZpbmcgYVxuKyAqXHRjaGFubmVsIGZyb20gdGhlIHNjaGVkdWxlIHdpdGggJU5MODAyMTFfQ01EX05BTl9TRVRfTE9DQUxfU0NIRUQgaXMgYVxuKyAqXHR1c2VyLWluaXRpYXRlZCBjaGFuZ2UsIG5vdCBhbiBldmFjdWF0aW9uLCBhbmQgaXMgYWxsb3dlZCBldmVuIGZvciBhXG4rICpcdG5vbi1ldmFjdWFibGUgY2hhbm5lbC4gQWNyb3NzIGEgc2NoZWR1bGUgdXBkYXRlLCBjaGFubmVscyB0aGF0IHJlbWFpblxuKyAqXHRrZWVwIHRoZWlyIG5vbi1ldmFjdWFibGUgbWFya2luZywgcmVtb3ZlZCBjaGFubmVscyBsb3NlIGl0LCBhbmQgbmV3bHlcbisgKlx0YWRkZWQgY2hhbm5lbHMgYXJlIGV2YWN1YWJsZSBieSBkZWZhdWx0OyBpc3N1ZSB0aGlzIGNvbW1hbmQgYWdhaW4gdG9cbisgKlx0Y2hhbmdlIHRoZSBub24tZXZhY3VhYmxlIHNldC5cbiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXJcbiAgKiBAX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcbiAgKi9cbkBAIC0xNzA1LDYgKzE3MzQsOCBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMge1xuIFx0Tkw4MDIxMV9DTURfU1RBUlRfUEQsXG4gXHROTDgwMjExX0NNRF9TVE9QX1BELFxuIFxuK1x0Tkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyxcbitcbiBcdC8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqL1xuIFxuIFx0LyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAyM2Y0ZjllYzg2ZDBhLi5jZGNmMWYwNTc3MDc3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC01OTczLDYgKzU5NzMsMTggQEAgaWVlZTgwMjExX3NldF9wZWVyX25hbl9zY2hlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0cmV0dXJuIGllZWU4MDIxMV9uYW5fc2V0X3BlZXJfc2NoZWQoc2RhdGEsIHNjaGVkKTtcbiB9XG4gXG4rc3RhdGljIGludFxuK2llZWU4MDIxMV9zZXRfbmFuX25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4rXHRcdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzICpjaGFubmVscylcbit7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3dpcGh5KHdpcGh5KTtcbitcbitcdHJldHVybiBpZWVlODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhzZGF0YSwgY2hhbm5lbHMpO1xuK31cbitcbiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4gXHQuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsXG4gXHQuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsXG5AQCAtNjA5MSw0ICs2MTAzLDUgQEAgY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xuIFx0LnNldF9lcGNzID0gaWVlZTgwMjExX3NldF9lcGNzLFxuIFx0Lm5hbl9zZXRfbG9jYWxfc2NoZWQgPSBpZWVlODAyMTFfc2V0X2xvY2FsX25hbl9zY2hlZCxcbiBcdC5uYW5fc2V0X3BlZXJfc2NoZWQgPSBpZWVlODAyMTFfc2V0X3BlZXJfbmFuX3NjaGVkLFxuK1x0Lm5hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMgPSBpZWVlODAyMTFfc2V0X25hbl9ub25fZXZhY19jaGFubmVscyxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjkyOWZjODkzMGEzNWUgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0yMDg3LDYgKzIwODcsOCBAQCBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKTtcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfcGVlcl9zY2hlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbitpbnQgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4rXHRcdFx0XHRcdHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbiB2b2lkIGllZWU4MDIxMV9uYW5fZnJlZV9wZWVyX3NjaGVkKHN0cnVjdCBpZWVlODAyMTFfbmFuX3BlZXJfc2NoZWQgKnNjaGVkKTtcbiB2b2lkIGllZWU4MDIxMV9uYW5fdXBkYXRlX25kaV9jYXJyaWVyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKm5kaV9zZGF0YSk7XG4gc3RydWN0IGllZWU4MDIxMV9uYW5fY2hhbm5lbCAqXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL25hbi5jIGIvbmV0L21hYzgwMjExL25hbi5jXG5pbmRleCAxOWUwODY2MWJlNDNhLi4zOGJkMTA1MTIxYWNmIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL25hbi5jXG4rKysgYi9uZXQvbWFjODAyMTEvbmFuLmNcbkBAIC0yNDgsNiArMjQ4LDM1IEBAIGllZWU4MDIxMV9uYW5fZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4raW50XG4raWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4rXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9uYW5fc2NoZWRfY2ZnICpzY2hlZF9jZmcgPSBcdTAwMjZzZGF0YS1cdTAwM2V2aWYuY2ZnLm5hbl9zY2hlZDtcbitcbitcdC8qXG4rXHQgKiBjZmc4MDIxMSBhbHJlYWR5IHZhbGlkYXRlZCB0aGF0IGFsbCBwcm92aWRlZCBjaGFubmVscyBiZWxvbmcgdG8gdGhlXG4rXHQgKiBjdXJyZW50IHNjaGVkdWxlLCBzbyBqdXN0IGNsZWFyIGFsbCBub24tZXZhY3VhYmxlIGZsYWdzIGFuZCBzZXQgdGhlXG4rXHQgKiBvbmVzIGluIHRoZSBsaXN0LlxuK1x0ICovXG4rXHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqKyspXG4rXHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IGZhbHNlO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkrKykge1xuK1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHMpOyBqKyspIHtcbitcdFx0XHRpZiAoIXNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5jaGFucmVxLm9wZXIuY2hhbilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2lkZW50aWNhbChcdTAwMjZzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNbal0uY2hhbnJlcS5vcGVyLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSkpIHtcbitcdFx0XHRcdHNjaGVkX2NmZy1cdTAwM2VjaGFubmVsc1tqXS5ub19ldmFjdWF0ZSA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgaWVlZTgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbG9jYWxfc2NoZWQgKnNjaGVkKVxuIHtcbkBAIC03ODYsNiArODE1LDEwIEBAIGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXG4gXHRcdHVzYWJsZV9jaGFubmVscysrO1xuIFxuK1x0XHQvKiBOby1ldmFjdWF0ZSBjaGFubmVsIGlzIHVzYWJsZSBidXQgY2Fubm90IGJlIGV2YWN1YXRlZCAqL1xuK1x0XHRpZiAoY2hhbi1cdTAwM2Vub19ldmFjdWF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0Y2hhbl9jdHggPSBjb250YWluZXJfb2YoY2hhbi1cdTAwM2VjaGFuY3R4X2NvbmYsXG4gXHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCwgY29uZik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmNcbmluZGV4IGQxMzMxMGZlZjY5MWEuLjJmNDYyNDM3NzNmOTQgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jXG5AQCAtMzI1LDYgKzMyNSw0MSBAQCBpbnQgY2ZnODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZHVsZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5Lm10eCk7XG4rXG4rXHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8ICF3ZGV2X3J1bm5pbmcod2RldikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LypcbitcdCAqIERvbid0IGFsbG93IHVwZGF0aW5nIHRoZSBub24tZXZhY3VhYmxlIGNoYW5uZWxzIHdoaWxlIGEgZGVmZXJyZWRcbitcdCAqIHNjaGVkdWxlIHVwZGF0ZSBpcyBwZW5kaW5nLCBhcyB0aGUgc2V0IG9mIGNoYW5uZWxzIG1heSBzdGlsbCBjaGFuZ2UuXG4rXHQgKi9cbitcdGlmICh3ZGV2LVx1MDAzZXUubmFuLnNjaGVkX3VwZGF0ZV9wZW5kaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0LyogQWxsIHByb3ZpZGVkIGNoYW5uZWxzIG11c3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGxvY2FsIHNjaGVkdWxlLiAqL1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkrKykge1xuK1x0XHRib29sIGZvdW5kID0gZmFsc2U7XG4rXG4rXHRcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyB3ZGV2LVx1MDAzZXUubmFuLm5fY2hhbm5lbHM7IGorKykge1xuK1x0XHRcdGlmIChjZmc4MDIxMV9jaGFuZGVmX2lkZW50aWNhbChcdTAwMjZ3ZGV2LVx1MDAzZXUubmFuLmNoYW5kZWZzW2pdLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSkpIHtcbitcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRpZiAoIWZvdW5kKVxuK1x0XHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhyZGV2LCB3ZGV2LCBjaGFubmVscyk7XG4rfVxuK1xuIHZvaWQgY2ZnODAyMTFfc3RvcF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdCAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5pbmRleCBiNDYxMGY2Njg1ZGNiLi40ZWU0OGI5MzcwODAwIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuQEAgLTU2NSw2ICs1NjUsMTAgQEAgaW50IGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IGNmZzgwMjExX25hbl9sb2NhbF9zY2hlZCAqc2NoZWQpO1xuIFxuK2ludCBjZmc4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKTtcbitcbiBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpcbiBjZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnRtcCxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggZTU4NWRhMWQ3OWM5ZS4uZjQ0MDM2YWQ0M2ZiNSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xNzc2Myw2ICsxNzc2Myw2OSBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmFuX3NldF9sb2NhbF9zY2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbG9jYWxfc2NoZWR1bGUocmRldiwgd2Rldiwgc2NoZWQpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4rbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuK3tcbitcdHN0cnVjdCBubGF0dHIgKipjaGFubmVsX3BhcnNlZCBfX2ZyZWUoa2ZyZWUpID1cbitcdFx0a2NhbGxvYyhOTDgwMjExX0FUVFJfTUFYICsgMSwgc2l6ZW9mKCpjaGFubmVsX3BhcnNlZCksXG4rXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFjaGFubmVsX3BhcnNlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGNoYW5uZWxfcGFyc2VkLCBOTDgwMjExX0FUVFJfTUFYLCBjaGFubmVsLCBOVUxMLFxuK1x0XHRcdCAgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVx1MDAzZWV4dGFjaywgY2hhbm5lbF9wYXJzZWQsXG4rXHRcdFx0XHQgICAgIGNoYW5kZWYsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4rXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbitcdGludCByZW0sIGkgPSAwLCBuX2NoYW5uZWxzID0gMDtcbitcdHN0cnVjdCBubGF0dHIgKmNoYW5uZWw7XG4rXG4rXHRpZiAod2Rldi1cdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoIXdkZXZfcnVubmluZyh3ZGV2KSlcbitcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbitcbitcdC8qIENvdW50IGhvdyBtYW55IGNoYW5uZWwgYXR0cmlidXRlcyB3ZSBnb3QgKi9cbitcdG5sbXNnX2Zvcl9lYWNoX2F0dHJfdHlwZShjaGFubmVsLCBOTDgwMjExX0FUVFJfTkFOX0NIQU5ORUwsXG4rXHRcdFx0XHQgaW5mby1cdTAwM2VubGhkciwgR0VOTF9IRFJMRU4sIHJlbSlcbitcdFx0bl9jaGFubmVscysrO1xuK1xuK1x0c3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMgX19mcmVlKGtmcmVlKSA9XG4rXHRcdGt6YWxsb2Moc3RydWN0X3NpemUoY2hhbm5lbHMsIGNoYW5kZWZzLCBuX2NoYW5uZWxzKSxcbitcdFx0XHRHRlBfS0VSTkVMKTtcbitcdGlmICghY2hhbm5lbHMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y2hhbm5lbHMtXHUwMDNlbl9jaGFubmVscyA9IG5fY2hhbm5lbHM7XG4rXG4rXHRubG1zZ19mb3JfZWFjaF9hdHRyX3R5cGUoY2hhbm5lbCwgTkw4MDIxMV9BVFRSX05BTl9DSEFOTkVMLFxuK1x0XHRcdFx0IGluZm8tXHUwMDNlbmxoZHIsIEdFTkxfSERSTEVOLCByZW0pIHtcbitcdFx0aW50IHJldDtcbitcbitcdFx0cmV0ID0gbmw4MDIxMV9wYXJzZV9ub25fZXZhY19jaGFubmVsKHJkZXYsIGNoYW5uZWwsIGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZjaGFubmVscy1cdTAwM2VjaGFuZGVmc1tpXSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aSsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHMocmRldiwgd2RldiwgY2hhbm5lbHMpO1xuK31cbitcbiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X3Byb3RvY29sX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbkBAIC0yMDYxOSw2ICsyMDY4MiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4gXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbiBcdFx0LmludGVybmFsX2ZsYWdzID0gSUZMQUdTKE5MODAyMTFfRkxBR19ORUVEX1dERVZfVVApLFxuIFx0fSxcbitcdHtcbitcdFx0LmNtZCA9IE5MODAyMTFfQ01EX05BTl9TRVRfTk9OX0VWQUNfQ0hBTk5FTFMsXG4rXHRcdC5kb2l0ID0gbmw4MDIxMV9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLFxuK1x0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4rXHRcdC5pbnRlcm5hbF9mbGFncyA9IElGTEFHUyhOTDgwMjExX0ZMQUdfTkVFRF9XREVWX1VQKSxcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTFfZmFtIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaCBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5pbmRleCA0Njg0OWZlOGQwYjM5Li4yNjkyNThjOTRhNDJhIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbisrKyBiL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG5AQCAtMTA5Myw2ICsxMDkzLDIzIEBAIHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50XG4rcmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbitcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscyAqY2hhbm5lbHMpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHRyYWNlX3JkZXZfbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LCBjaGFubmVscyk7XG4rXHRpZiAocmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9ub25fZXZhY19jaGFubmVscylcbitcdFx0cmV0ID0gcmRldi1cdTAwM2VvcHMtXHUwMDNlbmFuX3NldF9ub25fZXZhY19jaGFubmVscyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LFxuK1x0XHRcdFx0XHRcdFx0ICAgY2hhbm5lbHMpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgcmRldl9zdGFydF9wZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdHJhY2UuaCBiL25ldC93aXJlbGVzcy90cmFjZS5oXG5pbmRleCA4YzJhOTFiODVjMzk2Li40MzVkYzU4Y2FmYmVkIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbisrKyBiL25ldC93aXJlbGVzcy90cmFjZS5oXG5AQCAtMjQ4Myw2ICsyNDgzLDMxIEBAIFRSQUNFX0VWRU5UKHJkZXZfbmFuX3NldF9wZWVyX3NjaGVkLFxuIFx0KVxuICk7XG4gXG4rVFJBQ0VfRVZFTlQocmRldl9uYW5fc2V0X25vbl9ldmFjX2NoYW5uZWxzLFxuK1x0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0IHN0cnVjdCBjZmc4MDIxMV9uYW5fbm9uX2V2YWNfY2hhbm5lbHMgKmNoYW5uZWxzKSxcbitcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGNoYW5uZWxzKSxcbitcdFRQX1NUUlVDVF9fZW50cnkoXG4rXHRcdFdJUEhZX0VOVFJZXG4rXHRcdFdERVZfRU5UUllcbitcdFx0X19maWVsZCh1OCwgbl9jaGFubmVscylcbitcdFx0X19keW5hbWljX2FycmF5KHUzMiwgZnJlcXMsIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHMpXG4rXHQpLFxuK1x0VFBfZmFzdF9hc3NpZ24oXG4rXHRcdHUzMiAqZnJlcXMgPSBfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKTtcbitcbitcdFx0V0lQSFlfQVNTSUdOO1xuK1x0XHRXREVWX0FTU0lHTjtcbitcdFx0X19lbnRyeS1cdTAwM2VuX2NoYW5uZWxzID0gY2hhbm5lbHMtXHUwMDNlbl9jaGFubmVscztcbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNoYW5uZWxzLVx1MDAzZW5fY2hhbm5lbHM7IGkrKylcbitcdFx0XHRmcmVxc1tpXSA9IGNoYW5uZWxzLVx1MDAzZWNoYW5kZWZzW2ldLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4rXHQpLFxuK1x0VFBfcHJpbnRrKFdJUEhZX1BSX0ZNVCBcIiwgXCIgV0RFVl9QUl9GTVQgXCIsIG5fY2hhbm5lbHM6ICV1LCBmcmVxczogJXNcIixcbitcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZW5fY2hhbm5lbHMsXG4rXHRcdCAgX19wcmludF9hcnJheShfX2dldF9keW5hbWljX2FycmF5KGZyZXFzKSxcbitcdFx0XHRcdF9fZW50cnktXHUwMDNlbl9jaGFubmVscywgc2l6ZW9mKHUzMikpKVxuKyk7XG4rXG4gVFJBQ0VfRVZFTlQocmRldl9zZXRfbWFjX2FjbCxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdCBzdHJ1Y3QgY2ZnODAyMTFfYWNsX2RhdGEgKnBhcmFtcyksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOToyNi4wNDQyOTM4MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODUxOTQzNDI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogTkFOIE5vbi1FdmFjdWFibGUgQ2hhbm5lbCBTZXR0aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgbWVjaGFuaXNtIHRvIGRlc2lnbmF0ZSBzcGVjaWZpYyBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlIHdpdGhpbiB0aGUgTkFOIGxvY2FsIHNjaGVkdWxlLiBUaGlzIGlzIGFjaGlldmVkIHZpYSBhIG5ldyBOZXRsaW5rIGNvbW1hbmQsIGBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTYC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXBkYXRlZDogYSBuZXcgYGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVsc2Agc3RydWN0IGlzIGRlZmluZWQsIGVzc2VudGlhbGx5IGEgY29udGFpbmVyIGZvciBhIGxpc3Qgb2YgY2hhbm5lbCBkZWZpbml0aW9ucy4gVGhlbiB0aGVyZSdzIHRoZSBgbm9fZXZhY3VhdGVgIGZsYWcgYmVpbmcgYWRkZWQgdG8gdGhlIGBpZWVlODAyMTFfbmFuX2NoYW5uZWxgIHN0cnVjdC4gVGhpcyBpcyB0aGUga2V5IOKAkyBpbmRpY2F0aW5nIHdoZXRoZXIgYSBjaGFubmVsIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGV2YWN1YXRpb24uXG5cblRoZSBjb2RlIGNoYW5nZXMgY29uZmlybSB0aGF0IHRoZSBuZXcgY29tbWFuZCB3aWxsIHNldCB0aGUgbm9uLWV2YWN1YXRlZCBjaGFubmVscy4gVGhlICBgaWVlZTgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggdGhlIHByb3ZpZGVkIGNoYW5uZWwgbGlzdCwgYW5kIHNldHMgdGhlIGBub19ldmFjdWF0ZWAgZmxhZyBhY2NvcmRpbmdseS4gYGllZWU4MDIxMV9uYW5fZmluZF9ldmFjX2NoYW5gIGlzIG1vZGlmaWVkIHRvIHJlc3BlY3QgdGhlIG5ldyBzZXR0aW5nLlxuXG5gY2ZnODAyMTFfbmFuX3NldF9ub25fZXZhY19jaGFubmVsc2AgaW4gYGNvcmUuY2AgcGVyZm9ybXMgaW1wb3J0YW50IHZhbGlkYXRpb24uIEl0IG1ha2VzIHN1cmUgd2UncmUgaW4gTkFOIG1vZGUsIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgYW5kIHRoYXQgdGhlIGNoYW5uZWwgZGVmaW5pdGlvbnMgd2UncmUgYmVpbmcgZ2l2ZW4gYWN0dWFsbHkgbWF0Y2ggdGhlIGNoYW5uZWxzIHRoYXQgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIHRvIHN1cHBvcnQsIHdoaWNoIGlzIGdvb2QuIFRoZSBjYWxsIHRvIGByZGV2X25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIHNpZ25hbHMgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQgYnkgdGhlIGRyaXZlci5cblxuVGhlIE5ldGxpbmsgc2lkZSBvZiB0aGluZ3MsIGhhbmRsZWQgaW4gYG5sODAyMTEuY2AsIGlzIHByZXR0eSBzdGFuZGFyZC4gIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgIHBhcnNlcyB0aGUgaW5kaXZpZHVhbCBjaGFubmVsIGRlZmluaXRpb25zIGZyb20gdGhlIE5ldGxpbmsgbWVzc2FnZSwgYW5kIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmc6IGNvdW50aW5nIHRoZSBjaGFubmVscywgYWxsb2NhdGluZyBtZW1vcnksIHBvcHVsYXRpbmcgdGhlIGBjaGFubmVsc2Agc3RydWN0LCBhbmQgdWx0aW1hdGVseSBjYWxsaW5nIHRoZSBjb3JlIGZ1bmN0aW9uIHRvIHNldCB0aGUgbm9uLWV2YWN1YWJsZSBjaGFubmVscy4gTWVtb3J5IGFsbG9jYXRpb24gbG9va3MgcmVhc29uYWJsZSwgd2l0aCBga2NhbGxvY2AgYW5kIGBremFsbG9jYCBiZWluZyB1c2VkLCBhbmQgaW5pdGlhbGl6YXRpb24gb2NjdXJyaW5nLlxuXG5Ob3csIGEga2V5IGNvbmNlcm46IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBtYWtlIHN1cmUgbm90aGluZyBpcyBsZWFrZWQgdG8gdXNlciBzcGFjZSBhbmQgdGhhdCBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gTG9va3MgbGlrZSB0aGVyZSdzIG5vIG91dHB1dHRpbmcgb2YgdGhpcyBpbmZvcm1hdGlvbiwgdGhpcyBpcyBhIHNldHRlciwgc28gdGhhdCdzIGdvb2QuIFRoZSBhbGxvY2F0aW9ucyBhcmUgYWxsIHplcm9lZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCB0aGUgdXNlIG9mIGEgdHJhY2Vwb2ludCBkb2VzIGNhdGNoIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWFkaW5nIGNoYW5uZWwgY2VudGVyIGZyZXF1ZW5jaWVzIGZyb20gdGhlIHBhcnNlZCBgY2hhbmRlZnNgLCBzbyBJIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgYW5kIHRoZSB2YWxpZGF0aW9uIHN0ZXBzLiBUaGUgaW1wb3J0YW50IHZhbGlkYXRpb24gaXMgdGhhdCBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBpbml0aWFsaXplcyBgY2hhbmRlZmAsIGFuZCB0aGF0IHZhbGlkYXRpb24gaW4gYGNmZzgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIG1ha2VzIHN1cmUgaXQncyB2YWxpZC4gVGhlcmVmb3JlLCB0aGUgdHJhY2UgZXZlbnQgd2lsbCB3b3JrLlxuXG5PdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIHdlbGwtc3RydWN0dXJlZCwgYnV0IEkgd2lsbCBuZWVkIHRvIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAgdG8gZW5zdXJlIGNoYW5uZWwgZGVmaW5pdGlvbnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYW5kIHZhbGlkYXRlZCBiZWZvcmUgdGhlIHRyYWNlcG9pbnQgaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTg2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjE5OjM0LjU2MzczMDU2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MjM2NTY0NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmIG5sODAyMTFfcGFyc2VfY2hhbmRlZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6MzkuMjI2MTQ2NzI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MjcyOTU1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBjaGFubmVsIGRlZmluaXRpb24gcGFyc2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHdpcmVsZXNzIG5ldHdvcmtpbmcsIGlzIHRvIGp1bXAgcmlnaHQgaW4gYW5kIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYG5sODAyMTFfcGFyc2VfY2hhbmRlZmAuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjaGFubmVsIGRlZmluaXRpb25zIHdpdGhpbiB0aGUgbmw4MDIxMSBmcmFtZXdvcmsuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvciBleHRyYWN0aW5nIHRoZSBjaGFubmVsIHBhcmFtZXRlcnMgZnJvbSB3aGF0ZXZlciBkYXRhIHN0cnVjdHVyZSBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgbmw4MDIxMSBpbnRlcmZhY2UgLSBjb3VsZCBiZSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkknbSB0aGlua2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHRvdWNoIHRoaW5ncyBsaWtlOlxuKiAgICoqRnJlcXVlbmN5OioqIFRoZSBhY3R1YWwgcmFkaW8gZnJlcXVlbmN5IGluIE1Iei5cbiogICAqKkNoYW5uZWwgV2lkdGg6KiogVGhpcyBpcyBjcnVjaWFsLCBhcyBpdCBkZXRlcm1pbmVzIHRoZSBiYW5kd2lkdGggdXNlZCAoZS5nLiwgMjBNSHosIDQwTUh6LCA4ME1IeiwgMTYwTUh6KS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhcnNpbmcgaGFuZGxlcyBhbGwgdGhlIGNvbW1vbiAoYW5kIGV2ZW4gc29tZSBsZXNzIGNvbW1vbikgd2lkdGhzLlxuKiAgICoqQ2VudGVyIEZyZXF1ZW5jeSBTZWdtZW50czoqKiBJZiB0aGlzIGlzIGEgd2lkZXIgY2hhbm5lbCwgbGlrZSA4ME1IeiBvciAxNjBNSHosIHRoZW4gSSdsbCBsb29rIGZvciBob3cgdGhlIGZ1bmN0aW9uIGlkZW50aWZpZXMgdGhlIGNlbnRlciBmcmVxdWVuY2llcyBvZiB0aGUgc2VnbWVudHMuXG4qICAgKipSZWd1bGF0b3J5IERvbWFpbiBIYW5kbGluZzoqKiBIb3cgaXQgZGVhbHMgd2l0aCBkaWZmZXJlbnQgcmVndWxhdG9yeSBkb21haW5zIGFuZCB0aGVpciByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFubmVscyBhbmQgd2lkdGhzIHdpbGwgYmUgaW1wb3J0YW50LiBJIGJldCB0aGVyZSBhcmUgY2hlY2tzIGFnYWluc3QgYSByZWd1bGF0b3J5IGRhdGFiYXNlLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQncyBjcml0aWNhbCB0aGlzIGZ1bmN0aW9uIGNvcnJlY3RseSBpZGVudGlmaWVzIGFuZCBoYW5kbGVzIGludmFsaWQgY2hhbm5lbCBkZWZpbml0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgcm9idXN0IHRoZSBlcnJvciBjaGVja3MgYXJlLiBEb2VzIGl0IHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2Rlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5jb3JyZWN0IHBhcnNpbmcgb2YgbWFsaWNpb3VzbHkgY3JhZnRlZCBjaGFubmVsIGRlZmluaXRpb25zP1xuXG5NeSBmaXJzdCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZ3JlcCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHNlZSB0aGUgZGlyZWN0IHVzYWdlLiBUaGVuIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIGl0IGludGVyZmFjZXMgd2l0aCBhbnkgbmw4MDIxMSBtZXNzYWdlIHByb2Nlc3NpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcgYW5kIEkgYW50aWNpcGF0ZSBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggdGhlIGRlZmluaXRpb25zIG9mIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgZW51bXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6NDIuNjUzNDQ0NzUyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3OTM2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmw4MDIxMV9wYXJzZV9jaGFuZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0zOTAzPXN0YXRpYyBib29sIG5sODAyMTFfY2FuX3NldF9kZXZfY2hhbm5lbChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0zOTI2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MzkyNzpzdGF0aWMgaW50IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMzkyOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNDA5NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQwOTY6aW50IG5sODAyMTFfcGFyc2VfY2hhbmRlZihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MDk3LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MTAxLXtcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjQxMDI6XFx0cmV0dXJuIF9ubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgZXh0YWNrLCBhdHRycywgZmFsc2UsIGNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy00MTAzLVxcdFxcdFxcdFxcdCAgICAgIHBlcm1pdF9ucGNhKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NDEwNj1zdGF0aWMgaW50IF9fbmw4MDIxMV9zZXRfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQxMzQtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo0MTM1OlxcdHJlc3VsdCA9IF9ubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTQxMzYtXFx0XFx0XFx0XFx0XFx0aWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTcyMTA9c3RhdGljIGludCBubDgwMjExX3N0YXJ0X2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDctXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcXHRcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDktXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwYXJhbXMtXFx1MDAzZWNoYW5kZWYsIHRydWUpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjA0ND1zdGF0aWMgaW50IG5sODAyMTFfc3RhcnRfcmFkYXJfZGV0ZWN0aW9uKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMDc1LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIwNzY6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIwNzctXFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTIxNDg9c3RhdGljIGludCBubDgwMjExX25vdGlmeV9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIxNjUtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjE2NjpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNmNoYW5kZWYsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE2Ny1cXHRcXHRcXHRcXHQgICAgZmFsc2UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjIzOT1zdGF0aWMgaW50IG5sODAyMTFfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMDUtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMwNjpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzA3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cGFyYW1zLmNoYW5kZWYsIHBlcm1pdF9ucGNhKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTM1NDQ9c3RhdGljIGludCBubDgwMjExX2pvaW5faWJzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMzU5MS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEzNTkyOlxcdGVyciA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGluZm8tXFx1MDAzZWF0dHJzLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTM1OTMtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpYnNzLmNoYW5kZWYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ1ODM9c3RhdGljIGludCBubDgwMjExX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NjIyLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ2MjM6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ2MjQtXFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTQ3Nzc9c3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ4NTItXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ4NTM6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDg1NC1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNoYW5kZWYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTUyNTU9c3RhdGljIGludCBubDgwMjExX2pvaW5fb2NiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MjYxLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTUyNjI6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNTI2My1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNldHVwLmNoYW5kZWYsIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTUyNzg9c3RhdGljIGludCBubDgwMjExX2pvaW5fbWVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNTMzNy1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNTMzODpcXHRcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE1MzM5LVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2V0dXAuY2hhbmRlZiwgZmFsc2UpO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNzMzNT1zdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNzM1NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE3MzU2OlxcdHJldCA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTczNTctXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZjaGFuZGVmLCBmYWxzZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE3NzY3PW5sODAyMTFfcGFyc2Vfbm9uX2V2YWNfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE3NzgzLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTc3ODQ6XFx0cmV0dXJuIG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTc3ODUtXFx0XFx0XFx0XFx0ICAgICBjaGFuZGVmLCBmYWxzZSk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NDAxPXN0YXRpYyBpbnQgbmw4MDIxMV90ZGxzX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NDI3LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg0Mjg6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9jaGFuZGVmKHJkZXYsIGluZm8tXFx1MDAzZWV4dGFjaywgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZjaGFuZGVmLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg0MjktXFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmg9MTk9c3RhdGljIGlubGluZSB1NjQgd2Rldl9pZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuaC0yNC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oOjI1OmludCBubDgwMjExX3BhcnNlX2NoYW5kZWYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmgtMjYtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvd2lyZWxlc3MvcG1zci5jPTMwOT1zdGF0aWMgaW50IHBtc3JfcGFyc2VfcGVlcihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLS1cXG5uZXQvd2lyZWxlc3MvcG1zci5jLTM1NC1cXG5uZXQvd2lyZWxlc3MvcG1zci5jOjM1NTpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2NoYW5kZWYocmRldiwgaW5mby1cXHUwMDNlZXh0YWNrLCBpbmZvLVxcdTAwM2VhdHRycyxcXG5uZXQvd2lyZWxlc3MvcG1zci5jLTM1Ni1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm91dC1cXHUwMDNlY2hhbmRlZiwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTo0Mi44MDgyNDYzNzdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNDc2OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgQ2hhbm5lbCBQYXJzaW5nIExvZ2ljKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLWV2YWN1YXRpb24gYW5kIE5BTiBjaGFubmVsIHBhcnNpbmcgd2l0aGluIHRoZSBgbmw4MDIxMWAgY29udGV4dC4gTGV0J3MgemVybyBpbiBvbiBgbmw4MDIxMV9wYXJzZV9uYW5fY2hhbm5lbGAgYW5kIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHN1YnRsZSBkaWZmZXJlbmNlcyBvciBwb3RlbnRpYWwgb3ZlcmxhcCBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2ltaWxhcml0aWVzIGluIHRoZWlyIGNvcmUgZnVuY3Rpb24gb2YgZGVhbGluZyB3aXRoIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gVGhlIGdvYWwgaXMgdG8gY29tcGFyZSB0aGVpciBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3MzM1IGluIGBuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jYCwgdG8gZmlndXJlIG91dCBhbnkgbnVhbmNlcy4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlIGhvdyB0aGV5IGhhbmRsZSBjaGFubmVsIHBhcmFtZXRlcnMgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBpbmNvbnNpc3RlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTo0NC45MzMwMTg1OTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MzM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzMzNTpcXHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfbmFuX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjE3MzM2OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqY2hhbm5lbCxcXG4xNzMzNzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuMTczMzg6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfbmFuX2NoYW5uZWwgKm5hbl9jaGFubmVscyxcXG4xNzMzOTpcXHRcXHRcXHRcXHRcXHQgICAgIHU4IGluZGV4LCBib29sIGxvY2FsKVxcbjE3MzQwOlxcdHtcXG4xNzM0MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqY2hhbm5lbF9wYXJzZWQgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuMTczNDI6XFx0XFx0c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7XFxuMTczNDM6XFx0XFx0dTggbl9yeF9uc3M7XFxuMTczNDQ6XFx0XFx0aW50IHJldDtcXG4xNzM0NTpcXHRcXG4xNzM0NjpcXHRcXHRjaGFubmVsX3BhcnNlZCA9IGtjYWxsb2MoTkw4MDIxMV9BVFRSX01BWCArIDEsIHNpemVvZigqY2hhbm5lbF9wYXJzZWQpLFxcbjE3MzQ3OlxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4xNzM0ODpcXHRcXHRpZiAoIWNoYW5uZWxfcGFyc2VkKVxcbjE3MzQ5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE3MzUwOlxcdFxcbjE3MzUxOlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoY2hhbm5lbF9wYXJzZWQsIE5MODAyMTFfQVRUUl9NQVgsIGNoYW5uZWwsIE5VTEwsXFxuMTczNTI6XFx0XFx0XFx0XFx0ICAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTczNTM6XFx0XFx0aWYgKHJldClcXG4xNzM1NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MzU1OlxcdFxcbjE3MzU2OlxcdFxcdHJldCA9IG5sODAyMTFfcGFyc2VfY2hhbmRlZihyZGV2LCBpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWxfcGFyc2VkLFxcbjE3MzU3OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y2hhbmRlZiwgZmFsc2UpO1xcbjE3MzU4OlxcdFxcdGlmIChyZXQpXFxuMTczNTk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNzM2MDpcXHRcXG4xNzM2MTpcXHRcXHRpZiAoY2hhbmRlZi5jaGFuLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF82R0haKSB7XFxuMTczNjI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coaW5mby1cXHUwMDNlZXh0YWNrLFxcbjE3MzYzOlxcdFxcdFxcdFxcdCAgICAgICBcXFwiNiBHSHogYmFuZCBpcyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuMTczNjQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE3MzY1OlxcdFxcdH1cXG4xNzM2NjpcXHRcXG4xNzM2NzpcXHRcXHRpZiAoIWNmZzgwMjExX3JlZ19jYW5fYmVhY29uKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgXFx1MDAyNmNoYW5kZWYsXFxuMTczNjg6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0lGVFlQRV9OQU4pKSB7XFxuMTczNjk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGNoYW5uZWwsXFxuMTczNzA6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJDaGFubmVsIGluIE5BTiBzY2hlZHVsZSBpcyBub3QgYWxsb3dlZCBmb3IgTkFOIG9wZXJhdGlvblxcXCIpO1xcbjE3MzcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MzcyOlxcdFxcdH1cXG4xNzM3MzpcXHRcXG4xNzM3NDpcXHRcXHRpZiAobG9jYWwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6MTk6NDQuOTM0NjYyMjczWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyNDg5MjAxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGBubDgwMjExX25hbl9zZXRfbm9uX2V2YWNfY2hhbm5lbHNgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gc3VidGxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBsdXJraW5nIGFyb3VuZC4gVGhlIGNvZGUgaXRzZWxmIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGhhbmRsaW5nIHRoZSBzZXR0aW5nIG9mIG5vbi1ldmFjdWFibGUgY2hhbm5lbHMgZm9yIE5BTi5cblxuRmlyc3QsIEkgZXhhbWluZWQgdGhlIGZsb3c6IEl0IHBhcnNlcyBjaGFubmVsIGF0dHJpYnV0ZXMgZnJvbSBhIE5ldGxpbmsgbWVzc2FnZSwgYWxsb2NhdGVzIGEgc3RydWN0dXJlIChgY2hhbm5lbHNgKSB0byBob2xkIHRoZSBjaGFubmVsIGRlZmluaXRpb25zLCBwb3B1bGF0ZXMgaXQsIGFuZCB0aGVuIHBhc3NlcyBpdCBhbG9uZy4gSSBub3RlZCB0aGF0IGV2ZW4gaWYgYG5fY2hhbm5lbHNgIGlzIHplcm8gKG1lYW5pbmcgbm8gY2hhbm5lbCBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZCksIHRoZSBhbGxvY2F0aW9uIHN0aWxsIHdvcmtzIGNvcnJlY3RseSwgYWxsb2NhdGluZyBhIHN0cnVjdCB3aXRoIGEgemVyby1sZW5ndGggYXJyYXkuIFRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIHdpdGggbm8gaWxsIGVmZmVjdHMuXG5cbk5vdywgSSBwYWlkIGNsb3NlIGF0dGVudGlvbiB0byB3aGVyZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gQm90aCBgY2hhbm5lbHNgIGFuZCB0aGUgaW50ZXJtZWRpYXJ5IGBjaGFubmVsX3BhcnNlZGAgd2l0aGluIGBubDgwMjExX3BhcnNlX25vbl9ldmFjX2NoYW5uZWxgIGFyZSB6ZXJvZWQgdmlhIGBremFsbG9jYCBvciBga2NhbGxvY2AuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4gSSBjb25maXJtZWQgdGhhdCBgbmw4MDIxMV9wYXJzZV9jaGFuZGVmYCBwcm9wZXJseSBwb3B1bGF0ZXMgdGhlIGZpZWxkcyBhbmQgdGhhdCBhbGwgZmllbGRzIGluIGBzY2hlZF9jZmctXHUwMDNlY2hhbm5lbHNgIChvciBpdHMgZXF1aXZhbGVudHMpIGFyZSBleHBsaWNpdGx5IHNldC4gVGhlcmUncyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtpbmcgaW50byB1c2VyIHNwYWNlIHZpYSBjb3BpZXMgb3IgcmVzcG9uc2VzLiBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGUgY29yZSBsb2dpYyBoYW5kbGVzIGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIG1lbW9yeSBpbiBhIHNhZmUgbWFubmVyLiBQb3RlbnRpYWwgY29uY3VycmVuY3ksIGluZGV4LXJlbGF0ZWQgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGxpa2VseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gb3IgZGF0YSBsZWFrZWQgYmFjayB0byB1c2Vyc3BhY2UsIGFuZCBubyBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIHdpdGhvdXQgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBqdXN0aWZpY2F0aW9uIHRvIHJ1biBLTVNBTiBmb3IgdGhpcy4gV2UgY2FuIHNhZmVseSBtYXJrIHRoaXMgcGF0Y2ggYXMgbm90IG5lZWRpbmcgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzc5LCJPdXRwdXRUb2tlbnMiOjI5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjoxOTo1My4xODM1ODU2NTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIG5ldGxpbmsgY29tbWFuZCBOTDgwMjExX0NNRF9OQU5fU0VUX05PTl9FVkFDX0NIQU5ORUxTIGFuZCBtYWM4MDIxMS9jZmc4MDIxMSBoYW5kbGVycyB0byBtYXJrIGNlcnRhaW4gTkFOIGxvY2FsIHNjaGVkdWxlIGNoYW5uZWxzIGFzIG5vbi1ldmFjdWFibGUuXFxuXFxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XFxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGl0IGlzIGEgc2V0dGVyIGNvbW1hbmQgcmV0dXJuaW5nIG9ubHkgYW4gZXJyb3Igc3RhdHVzKSwgcHJlY2x1ZGluZyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLlxcbjIuIEFsbCBkeW5hbWljIGFsbG9jYXRpb25zIChzdHJ1Y3QgY2ZnODAyMTFfbmFuX25vbl9ldmFjX2NoYW5uZWxzLCBubGF0dHIgYXJyYXkpIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChremFsbG9jLCBrY2FsbG9jKSBhbmQgYXV0b21hdGljYWxseSBtYW5hZ2VkIHZpYSBfX2ZyZWUoa2ZyZWUpLlxcbjMuIFRoZSBuZXcgYm9vbCBmaWVsZCBgbm9fZXZhY3VhdGVgIGluIHN0cnVjdCBpZWVlODAyMTFfbmFuX2NoYW5uZWwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoY2xlYXJlZCB0byBmYWxzZSBhbmQgc2V0IHRvIHRydWUgd2hlbiBtYXRjaGluZykuXFxuNC4gTm8gYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLlxcblxcbkFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBvciBsb2NraW5nIGlzc3VlcyBpbiB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpbnZhbGlkIHBvaW50ZXJzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGNvbmZpZ3VyYXRpb25zLiBIZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXRsaW5rIGNvbW1hbmQgTkw4MDIxMV9DTURfTkFOX1NFVF9OT05fRVZBQ19DSEFOTkVMUyBhbmQgbWFjODAyMTEvY2ZnODAyMTEgaGFuZGxlcnMgdG8gbWFyayBjZXJ0YWluIE5BTiBsb2NhbCBzY2hlZHVsZSBjaGFubmVscyBhcyBub24tZXZhY3VhYmxlLlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChpdCBpcyBhIHNldHRlciBjb21tYW5kIHJldHVybmluZyBvbmx5IGFuIGVycm9yIHN0YXR1cyksIHByZWNsdWRpbmcga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy5cXG4yLiBBbGwgZHluYW1pYyBhbGxvY2F0aW9ucyAoc3RydWN0IGNmZzgwMjExX25hbl9ub25fZXZhY19jaGFubmVscywgbmxhdHRyIGFycmF5KSBhcmUgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgYWxsb2NhdG9ycyAoa3phbGxvYywga2NhbGxvYykgYW5kIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCB2aWEgX19mcmVlKGtmcmVlKS5cXG4zLiBUaGUgbmV3IGJvb2wgZmllbGQgYG5vX2V2YWN1YXRlYCBpbiBzdHJ1Y3QgaWVlZTgwMjExX25hbl9jaGFubmVsIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGNsZWFyZWQgdG8gZmFsc2UgYW5kIHNldCB0byB0cnVlIHdoZW4gbWF0Y2hpbmcpLlxcbjQuIE5vIGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgb3IgbG9ja2luZyBpc3N1ZXMgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgaW52YWxpZCBwb2ludGVycywgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[1] Phase: Succeeded StartedAt: 2026-09-07 22:20:05 +0000 UTC FinishedAt: 2026-09-07 22:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 22:20:05 +0000 UTC FinishedAt: 2026-09-07 22:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2] Phase: Succeeded StartedAt: 2026-09-07 22:20:05 +0000 UTC FinishedAt: 2026-09-08 02:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 22:20:05 +0000 UTC FinishedAt: 2026-09-08 02:03:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 22:20:06 +0000 UTC FinishedAt: 2026-09-07 22:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 22:20:06 +0000 UTC FinishedAt: 2026-09-07 22:20:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqltcn/series-workflowqltcn-convert-artifact-2750944807/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 22:20:32 +0000 UTC FinishedAt: 2026-09-07 22:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 22:20:32 +0000 UTC FinishedAt: 2026-09-07 22:39:28 +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:*9787ed26-8770-4e31-9f59-05a78b61384b,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-workflowqltcn/series-workflowqltcn-convert-artifact-2750944807/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": "f02becd8-0539-4a32-9622-c425d0777489", "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-workflowqltcn/series-workflowqltcn-build-action-1928357309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 22:20:32 +0000 UTC FinishedAt: 2026-09-07 22:39:18 +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:*9787ed26-8770-4e31-9f59-05a78b61384b,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-workflowqltcn/series-workflowqltcn-convert-artifact-2750944807/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": "f02becd8-0539-4a32-9622-c425d0777489", "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-workflowqltcn/series-workflowqltcn-build-action-1928357309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 22:39:28 +0000 UTC FinishedAt: 2026-09-07 22:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 22:39:28 +0000 UTC FinishedAt: 2026-09-07 22:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 22:39:28 +0000 UTC FinishedAt: 2026-09-07 22:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 22:39:28 +0000 UTC FinishedAt: 2026-09-07 22:39:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqltcn/series-workflowqltcn-convert-artifact-1630568406/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 22:39:38 +0000 UTC FinishedAt: 2026-09-07 22:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 22:39:38 +0000 UTC FinishedAt: 2026-09-07 22:41:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f02becd8-0539-4a32-9622-c425d0777489,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-workflowqltcn/series-workflowqltcn-build-action-1928357309/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-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 22:41:36 +0000 UTC FinishedAt: 2026-09-07 22:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 22:41:36 +0000 UTC FinishedAt: 2026-09-07 22:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 22:41:36 +0000 UTC FinishedAt: 2026-09-07 22:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 22:41:36 +0000 UTC FinishedAt: 2026-09-07 22:57:39 +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:*9787ed26-8770-4e31-9f59-05a78b61384b,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-workflowqltcn/series-workflowqltcn-convert-artifact-1630568406/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": "df74f717-defc-492a-8f56-aa54d001c343", "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-workflowqltcn/series-workflowqltcn-build-action-2447713754/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 22:41:36 +0000 UTC FinishedAt: 2026-09-07 22:57:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9787ed26-8770-4e31-9f59-05a78b61384b,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-workflowqltcn/series-workflowqltcn-convert-artifact-1630568406/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": "df74f717-defc-492a-8f56-aa54d001c343", "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-workflowqltcn/series-workflowqltcn-build-action-2447713754/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 22:57:39 +0000 UTC FinishedAt: 2026-09-07 22:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 22:57:39 +0000 UTC FinishedAt: 2026-09-07 22:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 22:57:39 +0000 UTC FinishedAt: 2026-09-07 22:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 22:57:39 +0000 UTC FinishedAt: 2026-09-07 22:59:41 +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:*df74f717-defc-492a-8f56-aa54d001c343,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-workflowqltcn/series-workflowqltcn-build-action-2447713754/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-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 22:59:51 +0000 UTC FinishedAt: 2026-09-08 02:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 22:59:51 +0000 UTC FinishedAt: 2026-09-08 02:03:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"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:*f02becd8-0539-4a32-9622-c425d0777489,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df74f717-defc-492a-8f56-aa54d001c343,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-workflowqltcn/series-workflowqltcn-build-action-1928357309/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-workflowqltcn/series-workflowqltcn-build-action-2447713754/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 22:59:51 +0000 UTC FinishedAt: 2026-09-07 23:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 22:59:51 +0000 UTC FinishedAt: 2026-09-07 22:59:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"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-workflowqltcn/series-workflowqltcn-convert-artifact-851664251/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 22:59:51 +0000 UTC FinishedAt: 2026-09-07 22:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 22:59:51 +0000 UTC FinishedAt: 2026-09-07 22:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 22:59:51 +0000 UTC FinishedAt: 2026-09-07 22:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 23:00:01 +0000 UTC FinishedAt: 2026-09-08 02:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqltcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_nan_set_non_evac_channels","nl80211_parse_non_evac_channel","cfg80211_nan_set_non_evac_channels","ieee80211_set_nan_non_evac_channels","ieee80211_nan_set_non_evac_channels","ieee80211_nan_find_evac_chan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"aa0e38da-2215-4e11-b6b4-9b43cd93dcba","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 23:00:01 +0000 UTC FinishedAt: 2026-09-08 02:02:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f02becd8-0539-4a32-9622-c425d0777489,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df74f717-defc-492a-8f56-aa54d001c343,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-workflowqltcn/series-workflowqltcn-build-action-1928357309/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-workflowqltcn/series-workflowqltcn-build-action-2447713754/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-workflowqltcn/series-workflowqltcn-convert-artifact-851664251/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,}